视觉SLAM(一)——视觉SLAM框架

1.简介及说明

SLAM(Simultaneous Localization And Mapping)——同时定位与地图构建。因此SLAM是研究“定位”和“地图构建”问题的。
目前多用于机器人导航、无人车驾驶、跟踪建模。对于不同应用场景,精度要求、鲁棒性等有所差异,此时选择传感器、运算侧重环节也往往不同。但是基本框架几乎一致。

本系列主要研究以视觉为主的SLAM系统,主要是系统的学习基础的SLAM相关内容。本人从事三维机器视觉相关工作,主要在交通行业应用,由于项目侧重于跟踪建模,研究过ORB-SLAM(特征点匹配法)、DSO(光度恒定直接法)源代码,各有优缺点。主要工作内容是对高速场景下的多车道车辆实时跟踪三维建模,为了保证准确、实时、同时跟踪多目标并建模,所有运算环节均在Nvidia GPU中完成,产品已经满足设计要求,且工作稳定,下图为自主研发产品检测建模结果。现在作为回顾,系统学习SLAM的相关内容。
Measure Result

主要参考书目是高翔博士的《视觉SLAM十四讲》,中间会记录一些个人实践经验和思考。

2.SLAM基础框架

SLAM伴随着机器视觉发展和机器人导航已经相对成熟,形成了合理高效的基本框架。
主要包含:
传感器数据、前端视觉里程计、后端优化、回环检测、建图。

传感器数据

采集根据不同应用场景和需求进行选择,主要有如下几种传感器:

1.单目:

也就是单独一个摄像机,应用于手机AR场景。
单目第一个问题是没有像素点的深度信息,在DSO初始化环节中,通过小位移假设对有效的像素点进行试探扫描,进而对深度初始化。ORB-SLAM中初始化对特征点匹配进行,运Homography和Fundamental Matrix,选择较好的运算位姿,最后进行Full Bundle Adjustment。
单目第二个问题是尺度不确定,测试过单目DSO,建图会出现突然场景变大好多倍的现象。

2.双目:

双目的好处是受光线影响较小在户外场景可以使用,按照场景可以选择不同基线距离和分辨率的双目相机。分辨率高时,运算量会非常大,并且目前双目匹配优化比较消耗内存或显存;分辨率低时,远处准确度会变差;基线小时,远处准确率难以保证;基线大时,近处测量不到,增大视差扫描范围可部分解决,但性价比不高,64像素与128像素,可能只是增加近处0.5m的深度检测范围,但是视差运算时运算量会增加近一倍。

需要根据应用场景特点,在分辨率和基线参数上权衡。

市面上目前消费级双目相机有
ZED(一代):分辨率高,深度由SDK优化过,速度和精度均为顶尖水平,需要在带有GPU的主机上运算,深度范围:0.3-25m(实际10m处精度已经比较差了),视场角大:90x60,卷帘快门:对快速运动物体会有拖影,效果可能比较差。
RealSense(D435):基线距离短,Intel的产品!所以片上运算出深度数据,不必消耗太多计算机资源,但是实际测试3m以外,测量误差几乎超过20cm了。

自主设计双目相机
匹配算法主要有OpenCV——BMSGBM,开源的有libSGM;opencv的BM有GPU实现,但是无亚像素级,远处深度直接分段,几乎可以认为GPU的BM算法不可用(截至目前)。SGBM运算效果很好,但是运算速度太慢,无GPU版本,github上有个国内的大佬实现了SGBM的GPU版本,只支持640*480分辨率,测试效果与CPU运算结果几乎一致!但是工程使用中,还是不太敢用,毕竟没有深入研究代码,怕有bug(逃。。。)。libSGM是日本的fixstar做的开源版本具有GPU版本的双目匹配算法,一直都有维护,youtube上看该团队做的项目很高大上,也研究并改动过源代码,效果虽然没有SGBM好,但是运算效率高且稳定,支持64\128像素视差,居家必备良心推荐。

3.RGB-D相机:

KinectV1:结构光,年代太早,现在几乎已经找不到了。
KinectV2:Tof,效果很棒,在室内非常好用,精度高,数据稳定。官方SDK只支持一台相机连接到计算机,使用libfreenect开源库,可以同时连接多台,之前专门编写了多路libfreenect的采集同步,但由于KinectV2没有同步触发方式,多台相机会存在同步采集问题。目前已经停产有两年了,以后可能想用也用不上了。
Kinect Azure:第三代Kinect,也是Tof。与KinectV2对比测试过,KinectV2有三个激光发射模块(后边只装了两个,另一个空着没有焊接发射模块,可能是节约成本或者怕引起过曝),而Kinect Azure只有一个激光发射模块。由于激光模块功率变小,对于反射率低的空洞会变多。但是总体来说,Kinect Azure各方面性能都接近完美,可惜只适用于室内场景。
RealSense(L515):MEMS,没有测评过,但是看youtube上的演示视频,只给出伪彩深度图的室内场景测试结果,目测精度没有Kinect Azure高,并且发现对于测试场景中有个人人腿处大面积空洞,应当对于反射率低或黑色的效果比较差,失去了测评的兴趣。
总体来说,RGB-D相机多数为室内场景设计,一般850nm左右的波长就是针对室内场景了,905nm或者940nm左右的应当是室外自然光条件下也可以使用的。(阳光中该波长的光含量少,对于传感器来讲噪音就少了很多)

4.激光雷达:

激光雷达目前多应用于无人车驾驶,价格昂贵,点云稀疏。但是好在测量结果稳定性好、测量深度范围大,对于低反射率或者室外阳光下环境效果也保持稳定、准确。仅测评过DJI的Livox Mid-100,室内外测量效果没得说,棒!价格也比较亲民,只要9999!但是,机械式单点扫描速度较慢,100ms的采样周期,相对比较稀疏,1s时很稠密,对于具体应用场景需要权衡。多线激光雷达采样周期短,但就是太贵,造价不降下来的话,产品难以大量推广应用,预研、demo都没问题,量产产品就很心疼了。

5.IMU(惯性测量单元):

基于各种视觉导航的都会在特定场景下失效,比如少纹理时,所有基于视觉的都无法正常跟踪。惯性导航作为数据融合补充项,在视觉失效的场景下,能够提供粗略的位姿信息。
实际用于定位导航的产品,几乎都需要增加IMU作为补充,提高产品环境适应性。但是视觉SLAM中暂时没有研究这块内容,开源项目VINS很好的对视觉和IMU进行融合,大神做的工作很充分了,值得学习研究。

前端视觉里程计(VO-Visual Odometry)

根据视觉特征,对相邻帧间的位姿进行拟合运算。不同方式,最终结果都是完成相机平移、旋转的运算。

后端优化(Optimization)

通过大量观测点的拟合,最终针对平移、旋转6个参数进行寻优,往往得到结果准确度是比较高的。但准确度再高,也会有误差,小误差累计起来,会对建图准确性产生很大影响。为了得到准确的建图结果,VO环节得到的位姿都输入到优化器内,当优化器收到回环检测信息时,即可对所有中间输入位姿全局优化,减小累计误差对建图准确性的影响。

回环检测(Loop Closing)

通过关键帧的特征匹配,检测到相机回到之前走过的场景,此时就可以作为先验知识,使用优化器去将之前的位姿人为闭合。
这里没有专门研究过,想到了两个问题:
1.如果遇上相似场景,导致匹配误报,那场景岂不就大错特错了,是不是就得增加其他手段进行干预,比如GPS?对场景进行关联,限定当前帧匹配范围?
2.即使使用Bow,对特征匹配进行加速,当场景很大时,关键帧就会变得非常多,此时匹配的速度一定会变慢,并且误匹配的概率也会增加。应该也是需要分区域,限定匹配范围。

建图(Mapping)

根据需求,构建相应性质的地图。
侧重于定位时,多采用稀疏的路标地图。
侧重于路径规划自主导航时,则需要稠密的地图,二维Grid、三维Voxel。
侧重于实景建模时,需要对三维地图进一步网格化。

关于传感器数据就在本章完成讨论,对于视觉里程计、后端优化、回环检测、建图后续单独分章节记述。

The End.

  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值