SLAM入门之发展
方案 | 时间 | 传感器 | 地址 |
---|---|---|---|
MonoSLAM | 2007 | 单目 | https://github.com/hanmekim/SceneLib2 |
PTAM | 2007 | 单目 | http://www.robots.ox.ac.uk/~gk/PTAM/ |
ORB-SLAM | 2015 | 单目 | http://webdiis.unizar.es/~raulmur/orbslam/ |
ORB-SLAM2 | 2016 | 单目/双目/RGB-D | https://github.com/raulmur/ORB_SLAM2 |
LSD-SLAM | 2014 | 单目 | http://vision.in.tum.de/research/vslam/lsdslam |
SVO | 2014 | 单目 | https://github.com/uzh-rpg/rpg_svo |
RTAB-MAP | 2014 | RGB-D/双目 | https://github.com/introlab/rtabmap |
DSO | 2016 | 单目 | https://github.com/JakobEngel/dso |
DVO | 2013 | RGB-D | https://github.com/tum-vision/dvo_slam |
DTAM | 2012 | RGB-D | https://github.com/anuranbaka/OpenDTAM |
RGBD-SLAM-V2 | 2012 | RGB-D | https://github.com/felixendres/rgbdslam_v2 |
Elastic Fusion | 2015 | RGB-D | https://github.com/mp3guy/ElasticFusion |
OKVIS | 2015 | 多目+IMU | https://github.com/ethz-asl/okvis |
ROVIO | 2015 | 单目+IMU | https://github.com/ethz-asl/rovio |
-
MonoSLAM
- A. J. Davison 在 2007 年提出的 MonoSLAM 是第一个实时的单目视觉 SLAM 系统
- MonoSLAM 以扩展卡尔曼滤波为后端(以相机的当前状态和所有路标点为状态量,更新其均值和协方差。),追踪前端非常稀疏的特征点(且用到了主动追踪技术)。
- MonoSLAM 存在诸如应用场景很窄,路标数量有限,稀疏特征点非常容易丢失的情况。
-
PTAM
- Parallel Tracking and Mappin,2007 年, Klein 等人提出。是视觉SLAM 发展过程中的重要事件。
- PTAM 提出并实现了跟踪与建图过程的并行化。这是视觉 SLAM 中首次区分出前后端的概念。
- PTAM 是第一个使用非线性优化,而不是使用传统的滤波器作为后端的方案。它引入了关键帧机制:我们不必精细地处理每一个图像,而是把几个关键图像串起来,然后优化其轨迹和地图。
- PTAM 同时是一个增强现实软件,演示了酷炫的 AR 效果。是早期的结合 AR 的 SLAM 工作之一。
- 存在着明显的缺陷:场景小,跟踪容易丢失等等。这些又在后续的方案中得以修正。
-
ORB-SLAM
- 它提出于 2015 年,是现代 SLAM 系统中做的非常完善,非常易用的系统之一
- 支持单目、双目、 RGB-D 三种模式。
- 整个系统围绕 ORB 特征进行计算,包括视觉里程计与回环检测的 ORB 字典。体现出 ORB 特征是现阶段计算平台的一种优秀的效率与精度之间的折衷方式。
- ORB 的回环检测是它的亮点。优秀的回环检测算法保证了 ORB-SLAM 有效地防止累计误差,并且在丢失之后还能迅速找回。
- ORB-SLAM 创新式地使用了三个线程完成 SLAM:实时跟踪特征点的 Tracking 线程,局部 Bundle Adjustment 的优化线程(Co-visibility Graph,俗称小图),以及全局 Pose Graph 的回环检测与优化线程(Essential Graph 俗称大图)
- ORB-SLAM 围绕特征点进行了不少的优化。
- ORB-SLAM 也存在一些不足之处。我们必须对每张图像都计算一遍 ORB 特征,非常耗时,对 CPU 带来了较重的负担。建的图为稀疏特征点,无法提供导航、避障、交互等诸多功能。
-
LSD-SLAM
- Large Scale Direct monocular SLAM, J. Engle 等人于 2014 年提出。LSD-SLAM 则标志着单目直接法在 SLAM 中的成功应用。
- 核心贡献,是将直接法应用到了半稠密的单目SLAM 中。它不仅不需要计算特征点,还能构建半稠密的地图——这里半稠密的意思主要是指估计梯度明显的像素位置。
- LSD-SLAM 的直接法是针对像素进行的。作者有创见地提出了像素梯度与直接法的关系,以及像素梯度与极线方向在稠密重建中的角度关系。
- LSD-SLAM 在 CPU 上实现了半稠密场景的重建。
- LSD-SLAM既有直接法的优点(对特征缺失区域不敏感),也继承了直接法的缺点。对相机内参和曝光非常敏感,并且在相机快速运动时容易丢失。由于目前并没有在直接法基础实现的回环检测方式, LSD-SLAM 必须依赖于特征点方法进行回环检测,
-
SVO
- Semi-direct Visual Odoemtry ,由 Forster 等人于 2014 年提出的一种基于稀疏直接法的视觉里程计。
- 半直接在原文的意思,是指特征点与直接法的混合使用: SVO 跟踪了一些关键点(角点,没有描述子),然后像直接法那样,根据这些关键点周围的信息,估计相机运动以及它们的位置。SVO 使用了关键点周围的 4×4 的小块进行块匹配,估计相机自身的运动
- SVO 的最大优势是速度极快。在作者后续工作 SVO2.0 中,速度更达到了惊人的 400 帧每秒。这使得 SVO 非常适用于计算平台受限的场合,例如无人机、手持 AR/VR 设备的定位。
- SVO 提出了深度滤波器的概念,并推导了基于均匀——高斯混合分布的深度滤波器。将这种滤波器用于关键点的位置估计,并使用了逆深度作为参数化形式,使之能够更好地计算特征点位置。
- 由于目标应用平台为无人机的俯视相机,考虑到视野内的物体主要是地面,而且相机的运动主要为水平和上下的移动, SVO 的许多细节是围绕这个应用设计的,使得它在平视相机中表现不佳。 SVO 在单目初始化时,使用了分解 H 矩阵而不是传统的 F 或 E 矩阵的方式,这需要假设特征点位于平面上。该假设对俯视相机是成立的,但对平视相机通常是不成立的,可能导致初始化失败。在关键帧选择时,使用了平移量作为确定新的关键帧的策略,而没有考虑旋转量。这同样在无人机俯视配置下是有效的,但在平视相机中则会容易丢失。
- SVO 舍弃了后端优化和回环检测部分,也基本没有建图功能,位姿估计必然存在累计误差,而且丢失后不太容易进行重定位。称它为一个 VO。
-
RTAB-MAP
- Real Time Appearance-Based Mapping ,是 RGB-D SLAM 中比较经典的一个方案。
- 它实现了 RGB-D SLAM 中所有应该有的东西:基于特征的视觉里程计、基于词袋的回环检测、后端的位姿图优化以及点云和三角网格地图。 RTAB-MAP 更适合作为 SLAM 应用而非研究使用。
-
视觉 + 惯导 SLAM
- IMU 虽然可以测得角速度和加速度,但这些量都存在明显的漂移,使得积分两次得到的位姿数据非常不可靠。对于短时间内的快速运动, IMU 能够提供一些较好的估计。
- 相比于 IMU,相机数据基本不会有漂移。当运动过快时,(卷帘快门的)相机会出现运动模糊,或者两帧之间重叠区域太少以至于无法进行特征匹配,所以纯视觉 SLAM 非常害怕快速的运动。
- IMU使在相机数据无效的那段时间内还能保持一个较好的位姿估计
- 相机数据可以有效地估计并修正 IMU 读数中的漂移,使得在慢速运动后的位姿估计依然有效。
- 当图像发生变化时,本质上我们没法知道是相机自身发生了运动,还是外界条件发生了变化,所以纯视觉 SLAM 难以处理动态的障碍物。而 IMU 能够感受到自己的运动信息,从某种程度上减轻动态物体的影响。
- 目前 VIO 的框架已经定型为两大类:松耦合(Loosely Coupled)和紧耦合(Tightly Coupled)
- 松耦合是指, IMU 和相机分别进行自身的运动估计,然后对它们的位姿估计结果进行融合。
- 紧耦合是指,把 IMU 的状态与相机的状态合并在一起,共同构建运动方程和观测方程,然后进行状态估计。紧耦合理论分为基于滤波和基于优化的两个方向。
- 在 VIO 中,由于 IMU 的数据频率非常高,对状态进行优化需要的计算量就更大,因此VIO 领域目前仍处于滤波与优化并存的阶段。在纯视觉 SLAM 中,优化方法已经占了主流。
-
语义 SLAM
- SLAM 另一个大方向就是和深度学习技术进行结合。
- 语义帮助 SLAM。传统的物体识别、分割算法往往只考虑一个图,而在 SLAM 中我们拥有一台移动的相机。如果我们把运动过程中的图片都带上物体标签,就能得到一个带有标签的地图。另外,物体信息亦可为回环检测、 BA 优化带来更多的条件。
- SLAM 帮助语义。物体识别和分割都需要大量的训练数据。要让分类器识别各个角度的物体,需要从不同视角采集该物体的数据,然后进行人工标定,非常辛苦。而SLAM 中,由于我们可以估计相机的运动,可以自动地计算物体在图像中的位置,节省人工标志的成本。如果有自动生成的带高质量标注的样本数据,能够很大程度上加速分类器的训练过程。
-
基于线/面特征的 SLAM
-
动态场景下的SLAM
-
多机器人的 SLAM
视觉 SLAM 经过了三个大时代:提出问题、寻找算法、完善算法。
我们目前正处于第三个时代,面对着如何在已有的框架中进一步改善,使视觉 SLAM 系统能够在各种干扰的条件下,稳定地运行。