本文旨在梳理目前较为前沿的SLAM技术,包括激光和视觉,主要从精度和实时性两个方面对算法进系评价。
对于激光SLAM了解不深,后期需要补充相关算法的核心思想与算法框架。有问题请大佬们随时留言,我再改正。
从算法的定位精度上来看,ORB-SLAM3 > DM-VIO > VINS系列
从算法的实时性方面来看,跟踪一帧数据的时间(指输入一帧数据得到该帧的位姿),ORB-SLAM3和VINS的时间均在40ms–50ms左右,DM-VIO对于普通帧的跟踪在10ms左右,对于关键帧的跟踪在53ms左右略大于ORBSLAM3
综合定位精度和实时性,ORB-SLAM3的性能相对更加出色,而且多地图和重定位模式使得系统更加鲁棒。
3D激光SLAM应用环境主要针对室外的大场景(2km以上),目前纯激光SLAM算法中lego-loam较为出色,但在实时性和精度上比最新的一些LIO算法较差一些。
在LIO算法中较为出色的有早期的LIO-SAM算法(lego-loam的改进版本),fast系列的fast-lio2和faster-lio,LIO系统的精度和用于评测的数据集相关,每个算法在不同的数据集上均有不同的表现,但综合来看对于2km以上的大场景算法的定位误差可以控制在1.5m左右,不同数据集下的表现大不相同,定位精度高的可以达到0.2-0.3m,差得可以达到10m,针对不同场景下的泛化性相对差一些。
对于ORB-SLAM在KITTI数据集的表现,双目模式下的ORBSLAM表现相对稳定,定位误差在基本在1米以内,对于比较极端的场景kitti08和kitti09在3m-4m之间
Tracking、LocalMpping、LoopClosing三大核心线程。
定位误差控制在10cm以内,大部分数据集控制在5cm以内
精度比较:ORB3双目/双目+IMU > ORB3单目+IMU > VINS-MONO
ORB3的VIO是基于紧耦合的因子图优化,IMU的精度在一些数据集(EuRoC->V系列)损失了一部分精度,但是提高了系统的稳定性(跟踪失败减少)
单目模式下跟踪一帧数据30ms以内,双目模式下40ms以内(图像分辨率752x480,实际跟踪时间和分辨率大小相关)
包括VINS-MONO和VINS-FUSION两个系列,VINS-FUSION在MONO的基础上添加了双目模式,以及与GPS融合。
简单的可以划分为数据预处理,基于滑窗的VIO,回环检测三个部分,普通跟踪过程的优化在VIO中实现
数据预处理: 对图像部分进行KLT光流跟踪获得关键点和速度信息,对IMU数据进行预积分处理
VIO跟踪: 类似于ORB3的Tracking+LocalMapping,维护一个小的局部的滑窗,实时对滑窗内所有的关键帧进行优化
回环检测: 和ORBSLAM类似,对关键帧图像额外提取500角点,通过计算词袋向量的几何相似性判断回环
VINS-FUSION:
VINS-FUSION在MONO的基础上添加了双目模式,以及与GPS融合,双目的初始化取代了单目SFM的三角话直接得到深度信息,在初始化时将首帧的位姿和GPS坐标进行对应获得绝对位姿
在EuRoC数据集下,VINS的单目+IMU和双目+IMU模式,定位误差在7-15cm左右,且普遍高于10cm,相比与ORBSLAM3略有逊色。
因为前端采用光流跟踪,vins-mono在EuRoC数据集上的平均跟踪时间是10ms(VINS的跟踪只是光流跟踪得到匹配点和速度),但位姿优化时间是36ms,跟踪一帧数据耗时40ms+。
DM-VIO是一个单目VIO框架,DSO系列的极大成算法,基于直接法和IMU结合的思想,算法没有明确的前端和后端,因为是直接在像素层面上通过最小化光度误差进行位置估计,在计算位姿的同时进行了优化。
在EuRoC数据集上,定位误差基本控制在10cm以内,只比ORBSLAM3略差一些,但精度要高于VINS系列
在实时性上,DM-VIO跟踪一普通帧仅需要10ms左右,对于关键帧跟踪涉及BA,边缘化等操作跟踪一帧需要53ms,对于普通帧的跟踪实时性要远大于ORBSLAM3
Lego-Loam 算法是在LOAM算法基础上的拓展,LIO-SAM又在Lego-Loam算法框架基础上融合了IMU。
整个SLAM系统主要包括点云分割、激光里程计、激光地图构建和位姿估计4个模块。
基于平滑度计算,对点云信息进行特征提取平面点和边缘点
特征匹配估计位姿
激光点云地图构建:本质上是将单帧点云和全局地图中的点云集合进行匹配
在室外大型场景下(2km)的均方根误差波动较大,最小0.36m,最大10m以上
酷睿i7平台,帧间跟踪(scan-to-scan)在30ms以内,地图匹配耗时较长普遍在100ms以上
相比lego-loam的改进点,加入了在激光里程计因子和回环因子的基础上,加入了IMU和GPS因子,同时将scan-to-全局地图匹配改为和局部地图匹配,提高匹配效率
激光里程计部分: 维护一个由n个关键帧组成的滑窗,滑窗中所有关键帧的线特征和平面特征组成局部地图,只进行关键帧和局部地图之间的匹配
GPS因子: 对GPS(一般是10hz)位姿根据时间戳进行线性插值,但只在位姿估计协方差矩阵变化较大时加入GPS因子进行融合
在室外公园场景(3km)下,定位精度控制在1m内
相比于Lego-Loam,scan-to-map耗时提升不是特别大,基于无人车采集的公园数据集上,单帧匹配时间在100ms左右
对于scan-to-scan的单帧匹配,LIO-SAM时间上速度略有提升,精度上使用的数据集不一致无法进行有效评估。
Faster-LIO是基于Fast-LIO的改进版本,在牺牲一点精度的情况下,极大提高了算法跟踪的整个流程。
从精度上说,针对不同的数据集,fast-lio2比faster-lio精度略高一些,大部分数据集精度差在0.2m以内; faster系列和lio-sam系列在不同的数据集上各有输赢,整体上误差之间的差距在0.5m以内
从时间上说,faster-lio实时性最好,和fast-lio相比,单帧跟踪时间由30ms左右降到10ms,lio-sam一般在40ms+