除了经典 V-SLAM 框架之外,也积累了许多优秀的开源 SLAM 方案,大部分实现都比较复杂,不适合作为初学者的上手材料。
当前的开源方案
在 SLAM 研究领域,能见到开源方案是很不容易的。论文中,往往介绍理论只占 20% 的内容,其他 80% 都写在代码中。
MonoSLAM
被认为是许多工作的发源地,EKF
在早期 SLAM 中占据着明显主导地位,所以 MonoSLAM也是建立在 EKF 的基础之上。
特征点在三维空间中的表示:在某个方向上显得越长,说明在该方向的位置就越不确定。
在当时已经是里程碑式的工作了,因为在此之前的 V-SLAM 系统基本不能在线运行。
PTAM
PTAM(Parallel Tracking and Mapping)的重要意义:
- 提出并实现了跟踪、建图过程的并行化。跟踪部分需要实时响应图像数据,而对地图的优化则没必要实时地计算。
- 第一个使用非线性优化,而不是使用传统的滤波器作为后端的方案。引入了
关键帧
机制:不必精细地处理每一幅图像。
PTAM 是早期结合 AR 的 SLAM 工作之一。
ORB-SLAM
明显优势
- 支持单目、双目、RGB-D 三种模式,良好的泛用性。
- 整个系统围绕 ORB 特征进行计算。
- ORB 的回环检测是亮点。
- 创新式地使用了三个线程完成 SLAM:
- 实时跟踪特征点的 Tracking 线程
- 局部 Bundle Adjustment 的优化线程(Co-visibility,
小图
) - 全局 Pose Graph 的回环检测与优化线程(Essential Graph,
大图
)
由于全局地图中的地图点太多,这个线程的优化不包括地图点,而只有相机位姿组成的位姿图。
- 围绕特征点进行了不少的优化:在 OpenCV 的特征提取基础上保证了特征点的均匀分布;在优化位姿时使用了一种得到更多正确匹配的方法;比 PTAM 更为宽松的关键帧选取策略。
不足之处
- 必须对每幅图像都计算一遍 ORB 特征,这是非常耗时的,移植到嵌入式设备上有一定困难。
- 稀疏特征点地图只能满足我们对定位的需求,而无法提供导航、避障、交互等诸多功能。
LSD-SLAM
LSD-SLAM(Large Scale Direct monocular SLAM)标志着单目直接法在 SLAM 中的成功应用。
主要优点
- 直接法是基于像素进行的。
- 在 CPU 上实现了半稠密场景的重建。基于特征点的方法只能是稀疏的,进行稠密重建的方案大多要使用 RGB-D 传感器,或者使用 GPU 构建稠密地图。
- 使用了一些精妙的手段来保证追踪的实时性与稳定性。
半稠密地图建模了灰度图中有明显梯度的部分,既有直接法的优点(对特征缺失区域不敏感),也继承了直接法的缺点:
- 对相机内参、曝光非常敏感,在相机快速运动时容易丢失。
- 依赖于特征点方法进行回环检测,尚未完全摆脱特征点的计算。
SVO
SVO(Semi-direct Visual Odoemtry)是一种基于半直接法的视觉里程计。半直接
在原文中的意思是指特征点与直接法的混合使用。
跟踪了一些关键点(角点,没有描述子),SVO 的最大优势是速度极快,非常适用于计算平台受限的场合,例如无人机、手持 AR/VR 设备的定位。
SVO 的另一创新之处是提出了深度滤波器的概念。
一些问题
- 目标应用平台为无人机的俯视相机,想要在平视相机中使用 SVO,必须自己加以修改。
- 舍弃了后端优化和回环检测部分,也基本没有建图功能,而且没有描述子用来回环检测,所以,称它为一个 VO,而不是称它为完整的 SLAM。
RTAB-MAP
RTAB-MAP(Real Time Appearance-Based Mapping)是 RGB-D 传感器上的 SLAM 方案,可以直接从 ROS 中获得其二进制程序,此外,在 Google Project Tango 上也可以获取其 App 使用。
由于集成度
较高,进行二次开发变得困难,RTAB-MAP 更适合作为 SLAM 应用而非研究使用。
未来的 SLAM 话题
SLAM 将来的发展趋势有两大类:
- 朝轻量级、小型化方向发展,让 SLAM 能够在嵌入式或手机等小型设备上良好运行,然后考虑以它为底层功能的应用。
- 利用高性能计算设备,实现精密的三维重建、场景理解等功能。由于可以利用 GPU,这个方向和深度学习亦有结合点。
视觉 + 惯性导航 SLAM
学术界喜欢大而且干净的问题
(Big Clean Problem),产业界则更注重让算法更加实用。
IMU 与相机传感器的互补性
惯性传感器(IMU)能够测量传感器本体的角速度、加速度,被认为与相机传感器具有明显的互补性:
- IMU 的测量量存在明显的漂移(Drift),但是,对于短时间内的快速运动,IMU 能够提供一些较好的估计。
- 相机数据可以有效地估计并修正 IMU 读数中的漂移。
- 纯视觉 SLAM 难以处理动态的障碍物,而 IMU 能够感受到自己的运动信息,从某种程度上减轻动态物体的影响。
IMU 为快速运动提供了较好的解决方式,而相机又能在慢速运动下解决 IMU 的漂移问题。
不管是理论还是实践,VIO(Visual Inertial Odometry)都是相当复杂的,目前 VIO 的框架已经定型为两大类:松耦合
(Loosely Coupled)、紧耦合
(Tightly Coupled)。
尽管在纯视觉 SLAM 中优化方法已经占了主流,但在 VIO 中,由于 IMU 的数据频率非常高,对状态进行优化需要的计算量就更大,因此目前仍处于滤波与优化并存的阶段。
结合稀疏直接法,有望在低端硬件上取得良好的 SLAM 或 VO 效果,是非常有前景的。
语义 SLAM
到目前为止,SLAM的方案都处于特征点或者像素的层级,与我们人类的做法不怎么相似,SLAM 的另一个大方向就是和深度学习技术结合。
SLAM 和语义的结合点
- 语义帮助 SLAM。能得到一个带有标签的地图,另外,物体信息亦可为回环检测、BA 优化带来更多的条件。
- SLAM 帮助语义。如果有自动生成的带高质量标注的样本数据,能够很大程度上加速分类器的训练过程。
在深度学习广泛应用之前,我们只能利用支持向量机
、条件随机场
等传统工具对物体或场景进行分割和识别,或者直接将观测数据与数据库中的样本进行比较。
随着深度学习的发展,我们开始使用神经网络
,越来越准确地对图像进行识别、检测和分割。
将 SLAM 与深度学习结合起来处理图像,亦是一个很有前景的研究方向。
SLAM 的未来
V-SLAM 经过了三个大时代:提出问题、寻找算法、完善算法。我们目前正处于第三个时代。