0%

论文记录 ORB-SLAM_A Versatile and Accurate Monocular SLAM System

Mur-Artal, Raul, J. M. M. Montiel, and Juan D. Tardos. “ORB-SLAM: A Versatile and Accurate Monocular SLAM System.” IEEE Transactions on Robotics 31, no. 5 (October 2015): 1147–63. https://doi.org/10.1109/TRO.2015.2463671.

1 Introduction

本文的贡献如下:

  1. 对所有任务使用相同的特性:tracking, mapping, relocalization and loop closing, 这使得我们的系统更加高效简单可靠;使用ORB 特征,可在CPU 上实现实时运行,且具有较好的视角、光照不变性
  2. 利用共视图使得跟踪与制图都聚焦于一个局部共视区域,从而实现在大规模环境中地实时操作,可不受全局地图尺寸地影响;
  3. 基于位姿图优化的实时回环检测(作者称其为 Essential Graph),其构建于系统维护的spanning tree、回环连接以及共视图中的线;
  4. 基于良好的视角和光照不变性实现的实时相机重定位,可在跟踪失败时进行重初始化,并增强了地图的重用性
  5. 提出一个基于模型选择的自动鲁棒的初始化程序,可为平面和非平面场景创建一个初始化地图
  6. 对于地图点和关键帧采取“适者生存” survival of the fittest 策略,在生成时非常宽松,而在剔除时非常严格,该策略提高了跟踪的鲁棒性,且由于冗余的关键帧被舍弃了,从而增强了 lifelong operation。

3 System Overview

3.1 Feature Choice

本系统的一个重要设计是:制图与跟踪所使用的同样特性会用于地点重识别,来进行帧级的重定位和回环检测。

3.2 Three Threads: Tracking, Local Mapping, and Loop Closing

系统整体架构如Fig. 1所示:

overview

3.3 Map Points, Keyframes, and Their Selection

每个地图点 $p_i$ 存储以下信息:

  1. 世界坐标系中的3D 位置信息 $\mathbf{X}_{w, i}$ ;
  2. 视角朝向 $\mathbf{n}_i$,是所有视角方向(观测到该点的关键帧的相机光心与该点的连线)的平均单位向量;
  3. 一个代表性的 ORB 描述子 $\mathbf{D}_i$ ,利用所有观测到该点的关键帧中的描述子计算一个最小汉明距离的ORB 描述子;
  4. 根据ORB 特征的尺度不变约束,计算该点可被观测到的最大距离和最小距离 $d_{max}, d_{min}$ 。

每个关键帧 $K_i$ 存储以下信息:

  1. 相机位姿 $\mathbf{T}_{iw}$ ,是从世界坐标系到相机坐标系的刚体转换关系;
  2. 相机内参,包含焦距和光心;
  3. 该帧图片中提取的所有ORB 特征,是否与地图点关联。

3.4 Covisibility Graph and Essential Graph

关键帧之间的共视信息对于本系统的许多任务而言至关重要,该共视信息使用无向加权图来表示,图中每个节点代表一个关键帧,如果两个关键帧之间的共视地图点超过15个,则进行节点间的连线,并使用共视地图点的数量来表示权重参数 $\theta$ 。

作者使用位姿图优化对回环检测到的位姿进行整体优化,为了避免包含共视图中所有的边(过于稠密),作者提出 Essential Graph只保留所有的节点与部分边,仍然可以保留强壮的网络结构来产生精确的结果。

系统会从初始帧开始构建一个增量式spanning tree,提供一个具有最小边数量的共视图的连接子图,当一个新的关键帧被插入时,被包含在该树中,并和与其有最多共视点的关键帧连接;当某个关键帧被剔除后,会更新相应的受影响的连线。

而Essential Graph 包含spanning tree共视图中共视点数超过100个的边,以及回环检测边,从而形成一个强壮的相机轨迹网络。

reconstruction

3.5 Bags of Words Place Recognition

系统集成了一个基于DBoW2 的词袋库地点重识别模块来进行回环检测和重定位,本系统创建一个增量式的数据集以进行查询和更新。

4 Automatic Map Initialization

地图初始化的目标是计算两帧图片之间的相对位姿三角化一组地图点,作者提出并行计算两种几何模型:平面场景下的单应矩阵(homography),及非平面场景下的基础矩阵。本系统的地图初始化步骤如下所示:

  1. 寻找初始关系:提取当前帧中的ORB 特征,并寻找与参考帧之间的匹配,如果没有找到足够的匹配,重置参考帧;
  2. 并行计算两个模型:分别计算单应矩阵和基础矩阵,并在迭代中计算相应的得分,最后保留得分最高的矩阵;
  3. 模型选择:若场景属于平面、近似平面或者存在较小的视差,可选用单应矩阵;如果是有足够视差的非平面场景,应当选用基础矩阵;
  4. 从移动恢复(motion recovery)中得到动作和结构:对于单应矩阵,作者直接对8组解进行三角化,并检查是否存在一个解使得大部分点位于相机前部且有着较低的重投影误差,如果不存在一个具有明显优势的解,则返回第一步重新开始初始化,该方法被认为是本系统鲁棒性的关键所在;对于基础矩阵,利用内参计算出本质矩阵,利用奇异值分解恢复出四个运动假设,然后采用与单应矩阵相同的方法进行求解;
  5. BA:最后,利用full BA 来优化初始重建。

一个初始化的例子如下图所示,PTAM 和 LSD-SLAM 初始化一个平面上的所有点,而本系统会等到有足够的视差后利用基础矩阵才进行正确的初始化。

initiallization

5 Tracking

5.2 Initial Pose Estimation From Previous Frame

如果上一帧跟踪成功,本系统使用一个固定速度运动模型来预测相机位姿,并对上一帧观测到的地图点进行一个引导式搜索,然后利用寻找到的关联对位姿进行优化。

5.3 Initial Pose Estimation via Global Relocalization

如果跟踪失败,则将该帧图片转换为词袋并进行词袋库搜索以实现全局重定位,对每个候选关键帧进行RANSAC 迭代并使用PnP 计算相机的位姿;若找到具有足够内点的相机位姿,则根据匹配关键帧的地图点搜寻更多的匹配以进行位姿优化。

5.4 Track Local Map

获取相机位姿的估计和一组初始化特征匹配后,将局部地图投影至当前帧中来搜寻更多的匹配。该局部地图包含与当前帧有匹配特征点的关键帧 $\mathcal{K}_1$ ,以及在共视图中 $\mathcal{K}_1$ 的邻接关键帧 $\mathcal{K}_2$ ,关键帧 $\mathcal{K}_1$ 、$\mathcal{K}_2$ 中的所有点进行以下搜索策略:

  1. 将点投影至当前帧中,舍弃掉超出图片界限的点;
  2. 比较当前帧中点和地图中点的视角朝向,舍弃小于60读夹角的点;
  3. 计算地图点到相机光心的距离,舍弃掉超范围的点 $d \notin [d_{min}, d_{max}]$ ;
  4. 计算尺度信息 $d/d_{min}$ ;
  5. 将地图点的代表性描述子与当前帧中未匹配的ORB 特征进行比较,寻找地图点的最佳匹配。

最终利用所有匹配的点对相机位姿进行优化。

5.5 New Frame Decision

新的关键帧需满足以下所有的要求:

  1. 距离上一次全局重定位不少于20帧(为了更好地重定位);
  2. 局部制图线程空闲,或者距离上次插入关键帧已超过20帧;
  3. 当前帧至少跟踪了50个地图点(为了更好地跟踪);
  4. 当前帧比参考帧少跟踪90%的点(限制最小的视角变化)。

6 Local Mapping

6.1 Keyframe Insertion

每当插入一个新的关键帧,进行一下操作:

  • 更新共视图,增加新的节点和边;
  • 更新spanning tree
  • 计算该关键帧的词袋表示

6.2 Recent Map Points Culling

地图点要想保留在地图中,需要在创建后的前三个关键帧中经过严格的测试:

  1. 跟踪线程需要在其被预测可见的关键帧中至少有25%的比例被观测到;
  2. 若该点创建后已经过了一个关键帧,那么至少需要被三个关键帧观测到。

6.3 New Map Point Creation

新的地图点通过共视图中的相连关键帧对ORB 特征点进行三角化来创建。

6.4 Local Bundle Adjustment

局部BA 的优化对象为:当前关键帧,共视图中与当前关键帧相连的所有关键帧,以及这些关键帧中的所有地图点。至于其余可观测到这些地图点但是未与当前关键帧相连的那些关键帧也会参与到优化过程中,但是其自身保持固定。

6.5 Local Keyframe Culling

之所以要控制关键帧的数量,是因为BA 的计算复杂度与该数量正相关,而且在lifelong operation 中,同一场景中的关键帧数量不能无限制增长。

本系统根据以下准则舍弃掉关键帧:其90%的地图点在其他至少三个关键帧中以相同或更好的尺度被观测到。这个尺度条件确保了地图点可以保留那些自身被最好精度观测到的关键帧。

7 Loop Closing

7.1 Loop Candidates Detection

首先,将当前帧和共视图中与其相连的所有帧(共视点数量不少于30个)计算BoW 向量的相似性,得到一个最低的阈值 $s_{min}$ ;然后再词袋库中进行匹配,舍弃掉低于该阈值的关键帧,此外,还需舍弃掉与当前帧直接相连的关键帧;只有当检测到连续三个一致的回环候选帧(在共视图中是相连的),才判定存在回环。

7.2 Compute the Similarity Transformation

在单目SLAM 中,地图有7自由度:旋转、平移,以及一个尺度因子。因此,为了闭合一个回环,需要计算一个从当前帧到回环帧之间的相似转换,以获取回环的累积误差;同时,该相似度计算也作为该回环的几何验证

首先计算当前帧与回环候选帧之间的地图点关联,然后为每个候选回环帧进行RANSAC ,若获取足够多的内点,则进行优化并进一步获取更多的关联,并进一步进行优化,此时若有足够的内点数量支持该相似度,则确定回环。

7.3 Loop Fusion

回环矫正的第一步是将重复的地图点进行融合,并在共视图中插入新的边以完成回环闭合。使用计算得到的相似转换来矫正当前关键帧的位姿,并将该矫正传递至与其邻接的关键帧,使得回环两侧进行对齐

7.4 Essential Graph Optimization

利用essential graph 将回环闭合误差分布至整个图上以进行优化;利用相似转换进行优化来矫正尺度偏移。