当前的开源SLAM方案
开源方案 | 传感器形式 | 地址链接 |
MonoSLAM | 单目 | https://github.com/hanmekim/SceneLib2 |
PTAM | 单目 | http://www.robots.ox.ac.uk/~gk/PTAM/ |
ORB-SLAM | 单目为主 | http://webdiis.unizar.es/~raulmur/orbslam/ |
ORB-SLAM2 | 单目 | https://github.com/raulmur/ORB_SLAM2 |
LSD-SLAM | 单目为主 | http://vision.in.tum.de/research/vslam/lsdslam https://github.com/tum-vision/lsd_slam |
SVO | 单目 | https://github.com/uzh-rpg/rpg_svo |
RTAB-MAP | RGB-D/双目 | https://github.com/introlab/rtabmap |
OKVIS | 多目+IMU | https://github.com/ethz-asl/okvis |
ROVIO | 单目+IMU | https://github.com/ethz-asl/rovio |
【1】2007---MonoSLAM (单目-滤波)
背景:说到视觉SLAM,很多研究者第一个想到的就是A.J.Davison的单目SLAM工作,他2007年提出的MonoSLAM是第一个实时的单目视觉SLAM系统。
- Davison, A. J., et al. "MonoSLAM: real-time single camera SLAM. " IEEE Transactions on Pattern Analysis & Machine Intelligence29.6(2007):1052.
- Davison, Andrew J. "Real-Time Simultaneous Localisation and Mapping with a Single Camera." IEEE International Conference on Computer Vision IEEE Computer Society, 2003:1403.
特点:扩展卡尔曼滤波为后端,追踪前端非常稀疏的特征点。
意义:之前的SLAM系统基本不能在线运行,只能靠机器人携带相机采集数据,再离线的定位和建图。
现在看来,应用场景窄,已经停止对其开发。
【2】2007---PTAM (单目 -非线性优化)
背景:2007年,Klein等人提出了PTAM (Parallel Tracking and Mapping)
- Murray, Dw, and G. Klein. "Parallel tracking and mapping for small AR workspaces." (2007):1-10.
意义:实现了跟踪与建图过程的并行化;第一个使用非线性优化,而不是使用传统的滤波器作为后端的方案。引入了关键帧机制,不必精细的处理每幅图像,而是把几个关键图像串起来,然后优化其轨迹和地图,在PTAM之后,视觉SLAM转向以非线性优化为主导的后端。
PTAM同时是一个增强现实软件,演示了炫酷的AR效果。根据PTAM估计的相机位姿,我们可以在一个虚拟的平面上放置虚拟物体,看起来就跟真实的场景中一样。
【3】2015---ORB-SLAM (单目为主-特征点-图优化)
背景:ORB-SLAM 是PTAM的继承者中非常有名的一位。提出于2015年,是现代SLAM系统中做得非常完善的系统之一。
- Mur-Artal, Raúl, J. M. M. Montiel, and J. D. Tardós. "ORB-SLAM: A Versatile and Accurate Monocular SLAM System." IEEE Transactions on Robotics 31.5(2015):1147-1163.
优点:(1)支持单目、双目、RGB-D三种模式;
(2)整个系统围绕ORB特征进行计算,包括视觉里程计与回环检测ORB字典。ORB特征不像SURF或SIFT费时,可在CPU上实时计算;相比Harris等简单角点特征,又具有良好的旋转和缩放不变性;ORB提供描述子,使在大范围运动时能够回环检测和重定位。
(3)ORB的回环检测是它的亮点,优秀的回环检测算法保证了ORB-SLAM有效的防止累计误差,并且在丢失后还能迅速找回。为此,ORB-SLAM在运行前需要加载一个很大的ORB字典文件。
(4)ORB创新使用了3个线程完成了SLAM:实时跟踪特征点的Tracking线程,局部Bundle Adjustment的优化线程(俗称小图),全局Pose Graph的回环检测与线性优化(俗称大图。)
Tracking线程:对每幅新来的图像提取ORB特征点,并与最近的关键帧进行比较,计算特征点的位置并粗略的估计相机位姿。
小图线程:求解一个Bundle Adjustment问题,包括局部空间内的特征点与相机位姿,负责求解更精细的相机位姿与特征点空间位置。前面的这两个线程完成了比较好的视觉里程计。
大图线程:对全局的地图与关键帧进行回环检测,消除累积误差。由于全局中地图点太多了,所以优化不包括地图点,只有相机位姿组成的位姿图。 【可详细了解:http://www.cnblogs.com/Jessica-jie/p/7281944.html】
(5)ORB围绕特征点进行了不少优化。
缺点:由于整个 SLAM系统采用特征点进行计算,对每幅图像都计算一遍ORB特征,是非常耗时的;ORB-SLAM的三线程结构给CPU带来了较大的负担;ORB-SLAM的建图为稀疏矩阵点,目前还没有开放存储和读取地图后重新定位的功能,稀疏特征点地图只能满足我们对定位的需求,而无法提供导航、避障、交互等功能。
【4】2014---LSD-SLAM [Large Scale Direct monocular SLAM] (单目-直接法) http://www.sohu.com/a/166136329_715754
背景:是J.Engle等人于2014年提出的SLAM工作,标志着单目直接法在SLAM中的成功应用。其核心贡献是将直接法应用到半稠密的单目SLAM中,不需要计算特征点,还能构建半稠密地图。(半稠密:估计梯度明显的像素位置)
- Engel, Jakob, T. Schöps, and D. Cremers. "LSD-SLAM: Large-Scale Direct Monocular SLAM." 8690(2014):834-849.
- Engel, Jakob, and D. Cremers. "Semi-dense Visual Odometry for a Monocular Camera." IEEE International Conference on Computer VisionIEEE Computer Society, 2013:1449-1456.
优点:(1)LSD-SLAM的直接法是针对像素进行的。
(2)LSD-SLAM在CPU上实现了半稠密场景的重建,这在之前的方案中很少见。基于特征点的方法只能是稀疏的,而进行稠密重建的方案大多要使用RGB-D传感器,或者使用GPU构建稠密地图。
(3)LSD-SLAM的半稠密追踪使用了一些精妙的手段保证追踪的实时性与稳定性。例如,LSD-SLAM既不是利用单个像素,也不是利用图像块,而是在极线上等距取5个点,度量其SSD;在深度估计时,LSD-SLAM首先用随机数初始化深度,在估计完后又把深度均值归一化,以调整尺度;在度量深度不确定时,不仅考虑三角化的几何关系,而且考虑了极限与深度的夹角,归纳成一个光度不确定性项;关键帧之间的约束使用了相似变换群,在后端优化中可以将不同尺度的场景考虑进来,减小了尺度漂移现象。
半稠密地图建模了灰度图中有明显梯度的部分,显示在地图上,很大一部分都是物体的边缘或表面上带纹理的部分。LSD-SLAM对它们进行跟踪并建立关键帧,最后优化得到这样的地图,看起来比稀疏的地图具有更多的信息,但又不像稠密地图那样拥有完整的表面。
缺点:由于LSD-SLAM使用了直接法进行跟踪,所以它既有直接法的优点(对特征缺失区域不敏感),也继承了直接法的缺点。例如,LSD-SLAM对相机内参和曝光非常敏感,并且在相机快速运动时容易丢失。在回环检测部分,由于目前没有基于直接法的回环检测方式,因此LSD-SLAM必须依赖于特征点方法进行回环检测,尚未完全摆脱特征点的计算。
【5】2014---SVO[Semi-direct Visual Odoemtry] (单目-半直接法)
背景:是Forster等人于2014年提出的一种基于稀疏直接法(半直接法)的视觉里程计。特征点法与直接法混用---SVO跟踪了一些关键点(角点,没有描述子),然后直接法那样,根据关键点周围的信息(4*4的小块进行块匹配)估计相机的运动及其位置。
- Forster, Christian, M. Pizzoli, and D. Scaramuzza. "SVO: Fast semi-direct monocular visual odometry." IEEE International Conference on Robotics and Automation IEEE, 2014:15-22.
优点:相比其他方案,最大的优点就是速度快。由于使用稀疏的直接法,既不用费力去计算描述子,也不必处理稠密和半稠密那么多信息,因此在低端计算平台上也能达到实时性,适用于无人机。SVO的另一创新之处:提出了深度滤波器概念,并推导了基于均匀-高斯混合分布的深度滤波器。SVO将这种滤波器用于关键点的位置估计,并使用了逆深度作为参数化形式,使之能更好的计算特征点位置。
开源版的SVO代码清晰易读,适合读者作为第一个SLAM实例进行分析。但它也存在一些问题:
(1)由于目标应用平台为无人机的俯视相机,其视野内的物体主要是地面,而且相机的运动主要是水平和上下移动,SVO的许多细节是围绕这个应用设计的,这使得它在平视相机中表现不佳。
(2)SVO为了速度和轻量化,舍弃了后端优化和回环检测部分,也基本没有建图功能。这意味着SVO的位姿估计必然存在累积误差,而且丢失后不太容易进行重定位(因为没有描述子用来回环检测)。
【6】RTAB-MAP RGB-D传感器上的SLAM方案
背景:RTAB-MAP (Real Time Appearance-Based Mapping)是RGB-D SLAM中比较经典的方案。它实现了RGB-D SLAM中所以应该有的东西:基于特征的视觉里程计、基于词袋的回环检测、后端的位姿图优化,以及点云和三角网格地图。RTAB-MAP支持一些常见的RGB-D和双目传感器,像kinect、Xtion等,且提供实时的定位和建图功能。不过由于集成度较高,更适合作为SLAM应用而非研究。
- Labbé, Mathieu, and F. Michaud. "Online global loop closure detection for large-scale multi-session graph-based SLAM." Ieee/rsj International Conference on Intelligent Robots and Systems IEEE, 2014:2661-2666.
优点:相比于单目和双目,RGB-D SLAM的原理要简单很多,而且能在CPU上实时建立稠密的地图。
扩展:
【1】 OKVIS---提出了一种紧耦合、基于非线性优化的IMU与多目视觉的实时融合方法,属于VIO(Visual Inertial Odometry),通过视觉融合IMU做里程计。
http://blog.csdn.net/fuxingyin/article/details/53368649---okvis理论
http://blog.csdn.net/fuxingyin/article/details/53428523---okvis代码
- Stefan L, Simon L, Michael B and Roland S . "Keyframe-based visual-inertial odometry using nonlinear optimization." International Journal of Robotics Research34.3(2015):314-334.
【2】ROVIO---紧耦合、提出了一种基于EKF的IMU与单目视觉的融合方法;基于图像块的滤波实现的VIO。
http://www.cnblogs.com/shhu1993/p/7003670.html
- Bloesch Michael, et al. "Robust visual inertial odometry using a direct EKF-based approach." Ieee/rsj International Conference on Intelligent Robots and Systems IEEE, 2015:298-304.
未来的SLAM话题:
SLAM将来的发展趋势有两大类:一是朝轻量级、小型化方向发展,让SLAM能够在嵌入式或手机等小型设备上良好运行,然后考虑以它为底层的应用。另一方面是,利用高性能计算设备,实现精密的三维重建、场景理解等功能。在这些应用中我们的目的是完美的重建场景,由于可以利用GPU,所以这个方向和深度学习有结合点。
【1】视觉+惯性导航SLAM
惯性传感器(IMU)能够测量传感器本体的角速度和加速度,被认为与相机传感器有明显的互补性。
(1)IMU虽然可以测得角速度和加速度,但是这些都存在明显的漂移,使得积分两次得到的位姿数据非常不可靠。但是,对于短时间内的快速运动,IMU能提供一些较好的估计,这正是相机的弱点。当相机运动过快时,相机会出现运动模糊,或者两帧之间重叠区域太少以至于无法进行特征匹配,所以纯视觉的SLAM很怕快速运动。有了IMU,即使在相机无效的那段时间内,我们也能保持一个较好的位姿估计。
(2)相比于IMU,相机数据基本不会有飘移,相机数据可以有效的估计并修正IMU读数中的飘移。
(3)当图像发生变化时,本质上我们没法知道是相机自身发生了运动,还是外界条件发生了变化,所以纯视觉SLAM难以处理动态的障碍物。而IMU能感受到自身的运动信息,某种程度上减轻动态物体的影响。
虽然说起来比较简单,但是无论在理论还是实践上VIO(Visual Inertial Odometry)都是相当复杂的。目前VIO框架定位两大类:松耦合---IMU和相机分别进行自身的运动估计,然后对其位姿估计进行融合;紧耦合---把IMU的状态和相机状态合并在一起,共同构建运动方程和观测方程,然后进行状态估计。紧耦合理论可分为基于滤波和基于优化两个方向。滤波方面---MSCKF(Multi-State Constraint KF);优化方面---尽管在纯视觉SLAM中优化方案占了主流,但在VIO中由于IMU的数据频率非常高,对状态优化需要的计算量就更大了,因此目前处于滤波和优化并存的阶段。
【2】语义SLAM
SLAM与深度学习技术结合。(语义分割是深度学习图像处理方面的有一个发展方向,与目标检测很相似)
【3】除此之外,基于线/面特征的SLAM、动态场景下的SLAM、多机器人的SLAM等,都是研究者感兴趣并发力的地方。