视觉 SLAM 的主流方案主要有以下几种,其区别如下:
- 基于特征点法的方案1:
- ORB-SLAM1:
- 原理:对新来的图像提取 ORB 特征点,并与最近的关键帧进行比较,计算特征点的位置并粗略估计相机位姿。它有三个线程,包括跟踪线程、局部建图线程以及回环检测和全局优化线程。
- 优点:支持单目、双目、RGBD 等多种传感器模式,具有良好的泛用性;ORB 特征计算速度较快,且具有良好的旋转和缩放不变性,能在大范围运动时进行回环检测和重定位;关键帧的选取策略能保证后续帧的鲁棒跟踪和建图的效率精度;代码可读性强,易扩展。
- 缺点:计算 ORB 特征耗时,三线程结构导致 CPU 消耗大,难以移植到嵌入式设备;构建的是稀疏特征点地图;对动态物体敏感,有动态物体时容易跟踪失败;纯旋转场景下也容易丢失跟踪。
- PTAM:
- 原理:前端线程通过匀速运动模型预测当前帧方位,搜索 FAST 角点,并根据匹配关系优化帧方位,若跟踪失败开始重定位,跟踪成功则判断是否满足关键帧条件。后端线程沿极线匹配不同关键帧之间的图像特征点,通过三角化恢复三维位置,并对所有关键帧和三维点运行 BA(Bundle Adjustment,光束法平差)优化1。
- 优点:提出并实现了跟踪和建图过程的并行化,首次区分出前后端的概念;是第一个使用非线性优化的方案,引入了关键帧机制,对后续视觉 SLAM 系统的发展影响深远;可作为增强现实软件,根据估计的相机位姿在虚拟平面上放置虚拟物体1。
- 缺点:应用场景较小,跟踪容易丢失1。
- ORB-SLAM1:
- 基于直接法的方案:
- LSD-SLAM:
- 原理:将直接法应用到了半稠密的单目 SLAM 中。该方法提出了地图梯度与直接法的关系,以及像素梯度与极线方向在稠密重建中的角度关系1。
- 优点:在 CPU 上实现了实时半稠密场景的重建;具有回环检测功能;通过一些技巧保证了追踪的实时性与稳定性1。
- 缺点:对相机内参和曝光非常敏感;在相机快速运动时容易丢失;依赖于特征点的方法进行回环检测1。
- DSO:
- 原理:后端使用一个由若干个关键帧组成的滑动窗口,除了维护这个窗口中的关键帧与地图点外,还会维护与优化相关的结构,如 Hessian 矩阵和 b 向量等1。
- 优点:可以得到较为精确的相机位姿和场景结构信息,对光照变化有一定的鲁棒性。
- 缺点:计算复杂度较高,对硬件性能要求较高;初始化过程相对复杂,需要较好的初始估计。
- LSD-SLAM:
- 基于稀疏直接法的视觉里程计方案:
- SVO1:
- 原理:跟踪一些关键点(角点),然后像直接法那样根据关键点周围的信息(4*4 小块进行块匹配)估计相机运动及其位置。
- 优点:速度极快,适用于计算平台受限的场合;提出了深度滤波器的概念,用于关键点的位置估计,并使用了逆深度作为参数化形式。
- 缺点:误差大,不准确;目标应用平台为无人机,在平视相机中表现不佳;舍弃了后端优化和回环检测功能,没有建图功能。
- SVO1:
- 基于深度学习的方案:
- 基于光流的方法:利用光流信息来估计相机的运动。光流描述了图像中像素的运动情况,可以通过计算相邻帧之间的像素位移来获取相机的运动信息。这种方法在动态场景中具有一定的优势,但对光照变化和图像噪声比较敏感。
- 基于深度学习的端到端方法:使用深度神经网络直接从图像中预测相机的位姿和场景结构。这种方法不需要手动设计特征提取器和匹配算法,能够自动学习图像中的特征和运动信息,但需要大量的训练数据和较高的计算资源。
基于特征点法的方案在特征匹配和回环检测方面较为成熟,但计算量较大;基于直接法的方案可以避免特征提取和匹配的过程,提高计算效率,但对光照和场景变化较为敏感;基于深度学习的方案具有较高的准确性和鲁棒性,但需要大量的训练数据和计算资源。在实际应用中,需要根据具体的场景和需求选择合适的视觉 SLAM 方案。