本文重点分享SLAM原理、视觉SLAM框架、开源SLAM分类和传感器选择。
1.1 定义
SLAM是Simultaneous Localization and Mapping的缩写,翻译成中文就是“同时定位和地图构建”。它是指配备有特定传感器的主体,在没有先验环境信息的情况下,在运动过程中建立环境模型,同时估计自身的运动。如果这里的传感器主要是摄像头,则称为“视觉SLAM”。
1.2 发展背景
图1-1 SLAM中建图的分类及作用
引入SLAM的主要目的如下:
1)映射
利用SLAM,可以在传感器性能良好的环境下建立高精度的全球地图。建立的地图将为后续的定位、导航等功能提供服务。
2)定位
在视觉SLAM中,可以通过帧间数据匹配计算出相机的相对变换,对应机器人的位姿信息。但计算结果受累积误差影响;利用SLAM建立的全局地图,通过摄像头采集的环境信息与地图匹配,可以减少累积误差的影响,获得更准确的机器人位姿。
3)导航
如果我们创建的地图中包含了“哪些地方可以通过,哪些地方不能通过”的信息,那么我们就可以利用它来实现机器人从地图中某个起点到某个终点的路径规划和跟踪,并能够绘制地图。通过固定中间的障碍物来实现避障。但这对我们能够构建的地图有要求,需要是一张“密集”的地图。
02视觉SLAM
2.1 经典视觉SLAM框架
SLAM 的研究已经有三十多年了。这里就是经典的视觉SLAM框架。这个框架本身以及它包含的算法已经基本定型,并且已经在很多视觉和机器人库中提供。
图2-1 经典视觉SLAM框架
我们将整个视觉SLAM流程分为以下步骤:
1)传感器信息读取,在视觉SLAM中,主要是相机图像信息的读取和预处理。如果是在机器人中,还可能存在码盘、惯性传感器等信息的读取和同步。
2)视觉里程计(VO)。视觉里程计的任务是估计相机在相邻图像之间的移动以及局部地图的外观。 VO 也称为前端。
3)后端优化(Optimization)。后端接受不同时间通过视觉里程计测量的相机位姿以及环路检测信息,并对它们进行优化以获得全局一致的轨迹和地图。由于它连接在VO之后,因此也称为后端。
4) 闭环:闭环检测机器人是否到达前一个位置。如果检测到环回,则将信息提供给后端进行处理。
5)建图,根据估计的轨迹构建与任务需求对应的地图。
在一些用例中,我们只截取SLAM的部分功能,并将其应用到实际场景中。例如,仅使用VO部分,我们可以获得连续的相机相对运动信息。虽然这个运动信息存在累积误差,但是在应用中对此的要求并不高甚至不需要,比如在VR头戴显示器中计算头戴设备的运动时。姿势。
不过一般在机器人应用场景中,我个人认为建图功能也是必不可少的。由于前后端优化得到的运动信息总是包含累积误差,这种累积误差在SLAM中只能通过环回检测(机器人返回到曾经经过的地方并且系统识别到)来检测出来,或者有一个累积误差。与预先设定的相似度更高。高精度全球地图匹配消除。然而,在机器人的实际运动过程中,并不能保证全局路径会重叠。也就是说SLAM计算中可能不会出现环回。此时只能通过与全局地图匹配来消除累积误差。因此,SLAM的建图功能也是不可或缺的。
图2-2 环回检测消除累积错误
这在VINS开源项目(香港科技大学团队基于单目+IMU开发的开源SLAM解决方案)中的测试视频中得到了演示(参见“视频/VINS/【开源】VINS-Mono_ EuRoC MAV 数据集中的单目视觉惯性系统(MH_05 V1_03).mp4") 也有所反映。在回环检测之前,SLAM计算出的位姿与真实位姿已经存在较大偏差,如图2-3所示;这种偏差只有当相机返回到它经过的地方并且SLAM成功执行回环时才会发生。检测后消除,如图2-4所示。
图2-3 闭环检测前累计位姿误差
图2-4 环回检测消除累积错误
2.2 视觉SLAM解决方案分类
视觉SLAM解决方案可以基于不同的传感器(单目、双目、RGBD、与IMU结合等)、不同的前端方法(主要分为直接法和特征点法)、不同的后端优化方案(过滤或者非线性优化),不同的生成图形式(稀疏图、稠密图等)有不同的划分。这里主要根据不同的传感器来简单介绍一下slam方案。
1)单眼猛击
仅使用一台摄像机来收集信息。当尺度初始化后(即相机在初始阶段进行一定的位移并确定位移的实际大小作为参考),就可以完成连续图像之间相机位姿的计算和映射。优点是设备简单、成本低。缺点是存在尺度漂移;图像的深度信息只能通过三角测量来计算,对环境的适应性较差;当相机位移较小时,计算误差较大,建图精度不高。
2)双目猛击
使用双目相机收集信息。双目相机可以通过立体视觉原理计算像素深度,从而使单目SLAM中不存在未知的深度。优点是比单目slam对环境的适应能力更强,可以计算像素的真实深度;缺点是像素深度的计算量较大,一般通过FPGA或GPU加速来实现实时计算输出。
3)RGBD SLAM
RGBD相机是指能够同时输出RGB图像和相应深度图的相机。其测量的像素深度不再通过耗时的被动双目匹配来计算,而是通过激光散斑添加图像纹理来加速计算或硬件测量(结构光)。TOF等)已实现。因此,可以将其视为减少计算量的双目SLAM。不过RGBD相机一般在室外表现较差,更多用于室内环境。
4)近年来,有学者提出了单目/双目+IMU slam解决方案。 IMU的主要功能包括:
(1)解决单目slam的初始化尺度问题
(2)在跟踪过程中提供更好的初始位姿
(3) 提供重力方向
(4) 提供优化的时间误差项。理论上,IMU提供了冗余的运动信息,通过数据融合可以获得更准确的运动估计。
从实现难度来看:单目SLAM和双目SLAMRGBD SLAM。
2.3 开源视觉SLAM解决方案总结
目前流行的开源视觉SLAM解决方案如表2-1所示:
解决方案名称传感器形式地址MonoSLAM 单目https://github.com/hanmekim/SceneLib2PTAM 单目http://www.robots.ox.ac.uk/~gk/PTAM/ORB-SLAM2 单目/双目/RGBDhttps://github.com/raulmur/ORB_SLAM2LSD-SLAM 基于单目http://vision .in.tum.de/research/vslam/lsdslamSVO 单目https://github.com/uzh-rpg/rpg_svoDTAMRGB-Dhttps://github.com/anuranbaka/OpenDTAMDVORGB-Dhttps://github.com/tum-vision/dvo_slamDSO 单目https://github。 com/JakobEngel/dsoRTAB-MAPbineye/RGB-Dhttps://github.com/introlab/rtabmapRGBD-SLAM-V2RGB-Dhttps://github.com/felixendres/rgbdslam_v2Elastic FusionRGB-Dhttps://github.com/mp3guy/ElasticFusionOKVISmultiple+IMUhttps://github.com/ethz -asl /okvisROV IO单目+ IMUhttps://github.com/ethz-asl/rovioVINS 单目+IMUhttps://github.com/HKUST-Aerial-Robotics/VINS-Mono
表2-1 开源SLAM解决方案汇总
03
视觉SLAM设备选型
3.1 设备选型的重要性
设备选型的重要性不言而喻。毕竟,“好的模型不能支持坏的数据”。无论SLAM模型建立得多么好,如果设备本身采集的数据误差太大,计算结果肯定不会理想。我们以VINS项目为例。根据论文内容,其设备型号及具体信息如下。
摄像头模块:单目摄像头,型号为MatrixVision的mvBlueFOX-MLC200w,带全局快门; cmos型号MT9V034,单色,分辨率752X480,帧率20Hz。
IMU:该模块采用DJI集成飞控模块A3内置的IMU模块。芯片型号为ADXL278和ADXRS290(均为工业级IMU芯片);可以确定A3内置了IMU的标定、去噪等处理算法。
图3-1 VINS中的设备模型
由此看来,VINS所选择的硬件有一定的要求,其采集数据的准确性也对SLAM算法的最终效果有着积极的影响。
3.2 设备选型
以RGBD相机为例,很多基于结构光或ToF方案的深度相机在室外表现不佳,主要是受到室外自然光的影响。就我个人而言,我最初倾向于选择双目或RGBD(双目在某些情况下可以视为RGBD)+IMU的解决方案。主要原因如下:
1)双目/RGBD+IMU硬件,在此基础上可以尝试各种基于单目/双目/RGBD/单目+IMU/双目+IMU的开源SLAM方案;反之,单目+IMU设备适用于开源方案,局限性较大(只能是单目/单目+IMU)。
INDEMIND双目惯性模块(点击原文链接查看详情)
2)单目SLAM场景适应性较差,建图尤其是深度估计精度较差。双目/RGBD在建图方面相对有优势,因为它可以计算深度,更容易构建“密集”地图。
3)SLAM定位实现中,基于单目解算的计算量比基于双目/RGBD的计算量大,并且由于三角测量部分的引入,对环境的适应性较差。
因此,在型号选择上,可以主要关注双目/RGBD类型;同时,为了加快开发进程,可以选择像INDEMIND双目惯性模组这样提供开发SDK等工具的产品,可以省去相机标定、数据同步等开发工作。
审稿人:李茜