第14讲 SLAM:现在与未来
14.1 当前的开源方案
往往论文中介绍理论只占20%的内容,其他80%都写在代码中,是论文里没有提到的。
方案名称 | 传感器形式 | 地址 |
MonoSLAM | 单目 | https://github.com/hanmekim/SceneLib2 |
PTAM | 单目 | https://www.robots.ox.ac.uk/~gk/PTAM/ |
ORB-SLAM | 单目为主 | https://webdiis.unizar.es/~raulmur/orbslam/ |
LSD-SLAM | 单目为主 | https://cvg.cit.tum.de/research/vslam/lsdslam |
SVO | 单目 | https://github.com/uzh-rpg/rpg_svo |
DTAM | RGB-D | https://github.com/anuranbaka/OpenDTAM |
DVO | RGB-D | https://github.com/tum-vision/dvo_slam |
DSO | 单目 | https://github.com/JakobEngel/dso |
RTAB-MAP | 双目/RGB-D | https://github.com/introlab/rtabmap |
RGBD-SLAM-V2 | RGB-D | https://github.com/felixendres/rgbdslam_v2 |
Elastic Fusion | RGB-D | https://github.com/mp3guy/ElasticFusion |
Hector SLAM | 激光 | https://wiki.ros.org/hector_slam |
GMapping | 激光 | https://wiki.ros.org/gmapping |
OKVIS | 多目+IMU | https://github.com/ethz-asl/okvis |
ROVIO | 单目+IMU | https://github.com/ethz-asl/rovio |
14.1.1 MonoSLAM
Davison教授是视觉SLAM研究领域的先驱,他在2007年提出的MonoSLAM是第一个实时的单目视觉SLAM系统,被认为是许多工作的发源地。MonoSLAM以扩展卡尔曼滤波为后端,追踪前端非常稀疏的特征点。由于EKF在早期SLAM中占据着明显主导地位,所以MonoSLAM亦是建立在EKF的基础之上,以相机的当前状态和所有路标点为状态量,更新其均值和协方差。
14.1.2 PTAM
2007年,Klein等人提出了PTAM(Parallel Tracking and Mapping),这也是视觉SLAM发展过程中的重要事件。PTAM的重要意义在于以下两点:
1.PTAM提出并实现了跟踪与建图过程的并行化。这是视觉SLAM中首次区分出前后端的概念。
2.PTAM是第一个使用非线性优化,而不是使用传统的滤波器作为后端的方案。它引入了关键帧机制:我们不必精细地处理每一幅图像,而是把几个关键图像串起来,然后优化其轨迹和地图。
14.1.3 ORB-SLAM
ORB-SLAM提出于2015年,代表着主流的特征点SLAM的一个高峰。相比于之前的工作,ORB-SLAM具有以下几条明显的优势:
1.支持单目、双目、RGB-D三种模式。
2.整个系统围绕ORB特征进行计算,包括视觉里程计与回环检测的ORB字典。
3.ORB的回环检测是它的亮点。ORB-SLAM在运行之前必须加载一个很大的ORB字典文件。
4.ORB-SLAM创新式地使用了三个线程完成SLAM:实时跟踪特征点的Tracking线程,局部Bundle Adjustment的优化线程(Co-visibility Graph,俗称小图 ),以及全局Pose Graph的回环检测与优化线程(Essential Graph俗称大图 )。
5.ORB-SLAM围绕特征点进行了不少的优化。例如,在OpenCV的特征提取基础上保证了特征点的均匀分布,在优化位姿时使用了一种循环优化4遍以得到更多正确匹配的方法,比PTAM更为宽松的关键帧选取策略,等等。
当然,ORB-SLAM也存在一些不足之处。首先,由于整个SLAM系统都采用特征点进行计算,我们必须对每幅图像都计算一遍ORB特征,非常耗时。ORB-SLAM的三线程结构也给CPU带来了较重的负担,使得它只有在当前PC架构的CPU上才能实时运算,移植到嵌入式设备上则有一定困难。其次,ORB-SLAM的建图为稀疏特征点,目前还没有开放存储和读取地图后重新定位的功能(虽然从实现上来讲并不困难)。根据我们在建图部分的分析,稀疏特征点地图只能满足我们对定位的需求,而无法提供导航、避障、交互等诸多功能。然而,如果我们仅用ORB-SLAM处理定位问题,似乎又显得有些过于重量级了。
14.1.4 LSD-SLAM
LSD-SLAM(Large Scale Direct monocular SLAM)是J.Engle等人于2014年提出的。类比于ORB-SLAM之于特征点,LSD-SLAM则标志着单目直接法在SLAM中的成功应用。LSD-SLAM的核心贡献是将直接法应用到了半稠密的单目SLAM中。它不仅不需要计算特征点,还能构建半稠密的地图——这里半稠密的意思主要是指估计梯度明显的像素位置。它的主要优点如下:
1.LSD-SLAM的直接法是针对像素进行的。
2.LSD-SLAM在CPU上实现了半稠密场景的重建,这在之前的方案中是很少见到的。
3.LSD-SLAM的半稠密追踪使用了一些精妙的手段来保证追踪的实时性与稳定性。例如,LSD-SLAM既不是利用单个像素,也不是利用图像块,而是在极线上等距离取5个点,度量其SSD;在深度估计时,LSD-SLAM首先用随机数初始化深度,在估计完后又把深度均值归一化,以调整尺度;在度量深度不确定性时,不仅考虑三角化的几何关系,而且考虑了极线与深度的夹角,归纳成一个光度不确定性项;关键帧之间的约束使用了相似变换群及与之对应的李代数$\zeta\in sim(3)$显式地表达出尺度,在后端优化中可以将不同尺度的场景考虑进来,减小了尺度飘移现象。
由于LSD-SLAM使用了直接法进行跟踪,所以它既有直接法的优点(对特征缺失区域不敏感),也继承了直接法的缺点。例如,LSD-SLAM对相机内参和曝光非常敏感,并且在相机快速运动时容易丢失。另外,在回环检测部分,由于目前并没有基于直接法实现的回环检测方式,因此LSD-SLAM必须依赖于特征点方法进行回环检测,尚未完全摆脱特征点的计算。
14.1.5 SVO
SVO是Semi-direct Visual Odoemtry的缩写,它是由Forster等人于2014年提出的一种基于稀疏直接法的视觉里程计。
半直接在原文中的意思是指特征点与直接法的混合使用:SVO跟踪了一些关键点(角点,没有描述子),然后像直接法那样,根据这些关键点周围的信息估计相机运动及其位置。在实现中,SVO使用了关键点周围的4×4的小块进行块匹配,估计相机自身的运动。
相比于其他方案,SVO的最大优势是速度极快。由于使用稀疏的直接法,即使在低端计算平台上也能达到实时性,而在PC平台上则可以达到每秒100多帧。在后续的SVO 2.0中,速度达到每秒400帧。这使得SVO非常适用于计算平台受限的场合,例如无人机、手持AR/VR设备的定位。无人机也是作者开发SVO的目标应用平台。
SVO的另一创新之处是提出了深度滤波器的概念,并推导了基于均匀-高斯混合分布的深度滤波器。SVO将这种滤波器用于关键点的位置估计,并使用了逆深度作为参数化形式,使之能够更好地计算特征点位置。
开源版的SVO代码清晰易读,十分适合读者作为第一个SLAM实例进行分析。不过,开源版SVO也存在一些问题:
1.由于目标应用平台为无人机的俯视相机,其视野内的物体主要是地面,而且相机的运动主要为水平和上下的移动,SVO的许多细节是围绕这个应用设计的,这使得它在平视相机中表现不佳。
2.SVO为了速度和轻量化,舍弃了后端优化和回环检测部分,也基本没有建图功能。这意味着SVO的位姿估计必然存在累积误差,而且丢失后不太容易进行重定位(因为没有描述子用来回环检测)。所以,我们称它为一个VO,而不是称它为完整的SLAM。
14.1.6 RTAB-MAP
RTAB-MAP(Real Time Appearance-Based Mapping)是RGB-D SLAM中比较经典的一个方案。它实现了RGB-D SLAM中所有应该有的东西:基于特征的视觉里程计、基于词袋的回环检测、后端的位姿图优化,以及点云和三角网格地图。因此,RTABMAP给出了一套完整的(但有些庞大的)RGB-D SLAM方案。
14.2 未来的SLAM话题
大体上讲,SLAM将来的发展趋势有两大类:一是朝轻量级、小型化方向发展,让SLAM能够在嵌入式或手机等小型设备上良好运行,然后考虑以它为底层功能的应用。另一方面则是利用高性能计算设备,实现精密的三维重建、场景理解等功能。
14.2.1 视觉+惯性导航SLAM
目前VIO的框架已经定型为两大类:松耦合(Loosely Coupled)和紧耦合(Tightly Coupled)。松耦合是指IMU和相机分别进行自身的运动估计,然后对其位姿估计结果进行融合。紧耦合是指把IMU的状态与相机的状态合并在一起,共同构建运动方程和观测方程,然后进行状态估计。
值得一提的是,尽管在纯视觉SLAM中优化方法已经占了主流,但在VIO中,由于IMU的数据频率非常高,对状态进行优化需要的计算量就更大,因此目前仍处于滤波与优化并存的阶段。
VIO为将来SLAM的小型化与低成本化提供了一个非常有效的方向。而且结合稀疏直接法,我们有望在低端硬件上取得良好的SLAM或VO效果,是非常有前景的。
14.2.2 语义SLAM
我们正看到,逐渐开始有学者将神经网络方法引入到SLAM中的物体识别和分割,甚至SLAM本身的位姿估计与回环检测中。虽然这些方法目前还没有成为主流,但将SLAM与深度学习结合来处理图像,亦是一个很有前景的研究方向。