1.简介及说明

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

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

主要参考书目是高翔博士的《视觉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.

视觉SLAM(一)——视觉SLAM框架相关推荐

  1. 【开源分享】VIDO-SLAM:一种视觉惯性动态物体SLAM系统

    文章:Inertial-Only Optimization for Visual-Inertial Initialization 作者:Carlos Campos, Jose M.M. Montiel ...

  2. 对比激光SLAM与视觉SLAM:谁会成为未来主流趋势?

    来源:智车科技 摘要:SLAM(同步定位与地图构建),是指运动物体根据传感器的信息,一边计算自身位置,一边构建环境地图的过程,解决机器人等在未知环境下运动时的定位与地图构建问题. 目前,SLAM 的主 ...

  3. 视觉SLAM总结——LSD SLAM中关键知识点总结

    视觉SLAM总结--LSD SLAM中关键知识点总结 视觉SLAM总结--LSD SLAM中关键知识点总结 1. LSD SLAM的创新点/关键点是什么? 2. LSD SLAM的整体框架是怎样的? ...

  4. 视觉SLAM总结——视觉SLAM十四讲笔记整理

    视觉SLAM总结--视觉SLAM十四讲笔记整理 说明 基础知识点 1. 特征提取.特征匹配 (1)Harris (2)SIFT (3)SUFT (4)ORB (5)特征匹配 2. 2D-2D:对极约束 ...

  5. 激光slam_激光SLAM与视觉SLAM的特点

    激光SLAM与视觉SLAM的特点 目前,SLAM技术被广泛运用于机器人.无人机.无人驾驶.AR.VR等领域,依靠传感器可实现机器的自主定位.建图.路径规划等功能.由于传感器不同,SLAM的实现方式也有 ...

  6. 通俗易懂!视觉slam第一部分——slam简介与相机介绍

    首先是定义: SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作"同时定位与地图构建".它是指搭载特定传感器的主体,在没有环 ...

  7. SLAM系列——视觉里程计(特征法)

    目录 1 特征点法 1.1 特征点 1.2 ORB特征 1.3 特征匹配 2 特征提取与匹配 3 2D-2D:对极几何 3.1 对极约束 3.2 本质矩阵 3.3 单应矩阵 讨论 4 实践:对极约束求 ...

  8. 激光SLAM与视觉SLAM的区别

    目前,SLAM技术被广泛运用于机器人.无人机.无人驾驶.AR.VR等领域,依靠传感器可实现机器的自主定位.建图.路径规划等功能.由于传感器不同,SLAM的实现方式也有所不同,按传感器来分,SLAM主要 ...

  9. 激光SLAM与视觉SLAM的现状与趋势

    本文作者龙建睿,深圳市大道智创科技有限公司联合创始人&研发总监,美国伊利诺伊理工大学博士研究生,"E巡-机器警长"首席产品经理. 同时定位与地图构建(Simultaneou ...

  10. 视觉SLAM总结——视觉SLAM面试题汇总

    视觉SLAM总结--视觉SLAM面试题汇总 视觉SLAM总结--视觉SLAM面试题汇总 1. SIFT和SUFT的区别 2. 相似变换.仿射变换.射影变换的区别 3. Homography.Essen ...

最新文章

  1. nginx之 nginx-1.9.7 编译安装、理论简介
  2. Android实时监听网络状态
  3. springboot actuator监控笔记
  4. Android 百度地图开发(一)
  5. spring安全性_具有PreAuthorize的Spring方法安全性
  6. consul删除无效服务
  7. printf,sprintf,vsprintf 区别【转】
  8. Android开发案例源码解析之使用sqlite数据库记录并读取GPS信息
  9. c#中excel文件怎么转换为dbf文件
  10. 源代码HTML5五子棋小游戏web开发
  11. 要打仗,你手里先得有张地图:数据治理之元数据管理
  12. 大数据-浅谈hive优化
  13. JAVA 实现语音播报
  14. [Ubuntu 16.04] [Memos] install ssh
  15. HTML页面循环遍历数据,不用JSTL标签
  16. 缓冲区溢出的保护机制
  17. pygame安装(2020版超详细)
  18. Linux下网络传输测速程序小记
  19. php aes解密中文,PHP AES加密解密算法
  20. Android x86是什么?,安卓X86是什么?和手机上的安卓系统有什么区别?

热门文章

  1. LPC5411x_FreeRTOS学习笔记
  2. 树莓派系统安装资源和步骤说明
  3. wireshark图片还原
  4. 十个评委打分java_java评委打分系统的设计与实现.doc
  5. 1-out-2 OT
  6. 5.5static(修饰和初始化顺序)
  7. 基于PHP+MYSQL的公司人事工资管理系统
  8. win 8 store app 国通快递查询 隐私声明
  9. centos7上zabbix3.4详细搭建
  10. 修改mp4文件的moov atom,使其位置在文件的前面