0%

论文记录 ORB-SLAM2_An Open-Source SLAM System for Monocular, Stereo, and RGB-D Cameras

Mur-Artal, Raul, and Juan D. Tardos. “ORB-SLAM2: An Open-Source SLAM System for Monocular, Stereo, and RGB-D Cameras.” IEEE Transactions on Robotics 33, no. 5 (October 2017): 1255–62. https://doi.org/10.1109/TRO.2017.2705103.

1 Introduction

本文的贡献:

  1. 第一个适用于单目双目以及RGB-D 相机的开源SLAM 系统,该系统包含回环检测、重定位以及地图重用;
  2. 本系统运行RGB-D 的结果证明:使用BA 可以实现比基于ICP 或者光度深度误差最小化的SOTA 方法更高的精度;
  3. 通过使用近远立体点和单目观测,本系统运行双目的结果要比直接双目SLAM 的 SOTA 算法精度更高;
  4. 提出了一种关闭制图功能情况下,有效重使用地图的轻量级定位模式。

fig1

3 ORB-SLAM2

ORB-SLAM2 的整体架构如下所示:

fig2

系统包含三个主要的并行线程:

  1. 跟踪线程:寻找与局部地图相匹配的特征点,利用motion-only BA 最小化重投影误差,来解算每帧图片对应的相机位姿;
  2. 局部制图:管理局部地图,并使用局部BA 对其进行优化;
  3. 回环检测:检测大回环,并使用位姿图优化来消除累积漂移;然后开启第四个线程,进行全局BA 优化解算地图与位姿的最优解。

本系统还嵌入了一个基于DBoW2 的地点重识别模块进行重定位,在跟踪失败或利用现有地图进行重初始化时使用;本系统维护一个共视图,来关联任意两个具有共同观测特征点的关键帧,并使用一个最小化spanning tree 来连接所有的关键帧;这些图结构方便恢复关键帧的局部窗口以进行局部的跟踪与制图,并为回环检测中的位姿图优化提供结构。

3.1 Monocular, Close Stereo, and Far Stereo Keypoints

本系统经过如图Fig. 2(b)的图片预处理操作,提取出关键点的特征,系统后续的操作均是基于这些特征点(立体关键点和单目关键点)的,实现独立于所使用的传感器类型。后续的操作均基于立体关键点和单目关键点。

立体关键点使用三个坐标进行定义:$\mathbf{x}_s = (u_L, v_L, u_R)$ ,其中 $(u_L, v_L)$ 是特征点在左边图片中的坐标,$u_R$ 是特征点在右边图片的水平座标。对于RGB-D 相机,作者将深度值 d 转化为一个虚拟的右图坐标

f1

作者定义,如果一个关键点的深度小于基线长度的40倍,则被视为近点,否则视为远点。对于近点,可以使用一帧图片进行安全的三角化,因为其深度信息得到了准确估计,可以提供相应的尺度、平移和旋转信息;而对于远点,可以提供准确的旋转信息,但是尺度与平移信息较不可靠,只对多视角观测的远点进行三角化。

单目关键点使用左图的两个坐标进行定义 $\mathbf{x}_m = (u_L, v_L)$ ,是针对那些立体匹配失败或RGB-D 深度参数不可靠的点;这些点只通过多视角观测进行三角化,且不提供尺度信息,但会参与旋转与平移估计的解算。

3.2 System Bootstrapping

使用立体相机或RGB-D 相机的一个主要优势在于:可仅使用一帧图片获取深度信息,而不需要单目相机的动作初始化操作。系统启动后,使用第一帧作为关键帧,将其位姿定为原点,并利用所有的立体关键点创建一个初始地图。

3.3 Bundle Adjustment with Monocular and Stereo Constraints

BA 在本系统中的应用:

  • 在跟踪线程中优化相机位姿(motion-only BA)
  • 在局部制图线程中优化局部窗口内的关键帧和特征点(local BA)
  • 回环检测之后优化所有的关键帧与特征点(full BA)

Motion-only BA

对关键点 $\mathbf{x}_{(.)}^i$ (包括单目点 $\mathbf{x}_m^i \in \mathbb{R}^2$ 和立体点 $\mathbf{x}_s^i \in \mathbb{R}^3$ )进行最小化重投影误差,其中 $i\in \mathcal{X}$ 为所有匹配点集合:

f2

其中,$\rho$ 是鲁棒Huber 损失函数,$\sum$ 是关键点尺度参数对应的协方差矩阵。单目点和立体点的投影矩阵如下所示:

f3

Local BA

f4

其中,$\mathcal{K}_L$ 为一组共视关键帧;$\mathcal{P}_L$ 为这些共视关键帧中的所有点;至于其他观测到 $\mathcal{P}_L$ 中的点且不属于 $\mathcal{K}_L$ 的关键帧 $\mathcal{K}_F$ ,会参与损失函数的构建,但是在优化中保持固定;$\mathcal{X}_k$ 表示 $\mathcal{P}_L$ 中与关键帧 k 匹配的点列表。

Full BA

是一种局部BA 的特殊情况,除了初始关键帧是固定的,地图中其余的所有关键帧和点都参与优化过程。

3.4 Loop Closing and Full BA

回环检测包含两步:

  1. 回环的检测与验证;
  2. 通过位姿图优化来矫正回环。

3.5 Keyframe Insertion

本系统遵循ORB-SLAM 的关键帧插入策略,此外,基于立体远近点创建了一个新的关键帧挑选策略:如果跟踪的近点数量低于 $\tau_t = 100$,且可新增近点数量大于 $\tau_c = 70$ 时,将其作为新的关键帧进行插入。

fig3

3.6 Localization Mode

本系统引入了一个定位模式,可在已经制图的区域进行轻量级长期定位。该过程利用视觉里程计匹配点地图匹配点进行定位,其中视觉里程计匹配是基于当前帧的ORB 和历史帧创建的3D 点之间进行的,这些匹配可在无地图区域进行定位,但会存在累积漂移;而地图点匹配会得到与地图无偏的定位结果。