ORB-SLAM: A Versatile and Accurate Monocular SLAM System 笔记(一)
ORB-SLAM: A Versatile and Accurate Monocular SLAM System
Abstract
这篇文章提出了 ORB-SLAM,一个基于特征的单目SLAM系统,这个系统在室内和室外同样适用。该系统对严重的运动杂波(motion clutter)很稳健,允许宽基线闭环和重定位,并且包含了全自动的初始化。基于近些年的优秀的算法,我们重新设计了一个新的系统:他对所有的任务都使用了相同的特征包括跟踪、映射、重定位和循环闭环。一种选取重建过程中点和关键帧的策略有着出色的稳健性,并且生成紧凑和可以跟踪的地图。我们对最流行的27个数据集进行了详尽的评估,ORB-SLAM在单目方法中达到了史无前例的性能。
Introduction
Bundle adjustment(BA) 是提供精确相机位置估计和稀疏几何重建的的著名方法,在很长时间内,这个方法对即时的系统来说是不可行的。视觉SLAM的目标是在重建环境的时候估计相机的轨迹。现在,我们知道要以非禁止的计算成本获得准确的结果,实时的SLAM算法必须为BA提供一下的条件:
- 在所选帧的自己中对场景特征进行相应的观察;
- 在复杂性随着关键帧的数量增加而增加的时候,它们的选择应该可以避免不必要的冗余;
- 关键点和关键帧的强大网络配置来产生准确的结果,即一组具有明显的视差和大量闭环匹配的关键帧和观察点;
- 一个非线性优化的关键帧和点位置的初始估计;
- A local map in exploration where optimization is focused to achieve scalability.
探索中的一个局部地图,其中优化是为了实现可伸缩性。 - 实现全局快速优化以实时闭环的能力。
PATM 技术能够在小规模的操作上提供对每个帧简单但高效的关键帧选取,特征匹配,三角点测量和相机定位,以及跟踪失败之后的重定位。然鹅,有几个因素限制了它的应用:缺少闭环和对遮挡的充分处理,对重定位的观点具有低不变性,以及需要人工干预地图。
文中提出的单目SLAM系统有如下的主要贡献:
- 对所有的任务使用相同的特征,系统更加高效,简单和可靠。使用ORB特征,能够在没有GPU的情况下实现实时的表现,同时为视点和光照的变化提供良好的不变性。
- 在大的环境中实现实时的操作,由于使用了covisibility graph,跟踪和映射都可以集中在本地可见的区域,从而与全局地图的大小无关。
- 基于姿态图优化的实时循环闭合,称为Essential Graph。它是由系统维护的生成树,循环闭包链接和Covisibility 图的强边构建的。
- 实时的相机重定位对视点和光照具有不变性,这使得从跟踪失败中恢复并且还增加了地图的重用。
- 基于模型选择的新的、自动的、稳健的初始化过程,允许创建平面和非平面的初始映射。
- 一系列技巧用于提高鲁棒性和去除冗余。
文中方法的相机定位精度比目前直接用像素强度的方法更加精确。
Related Work
A. 地点识别
由图片到图片的匹配在大环境中比地图到地图的匹配更容易扩展,DBoW2 的用到了 BRIEF 描述符和 FAST 特征值,虽然它们的速度相比较很快,但是没有旋转和尺度不变性。作者提出了 ORB 特征,一种具有旋转和尺度不变性的二元特征,来做图片匹配和闭环检测。
B. 地图初始化
单目SLAM需要一个地图初始化的过程,因为深度信息不能从一张图片中获取。一个方法是在已知的结构中做初始化,在这种滤波的方法中,初始化的点的精度特别低,但是在后续的操作中会变高。一些半稠密的方法就是先用高方差的随机值来初始化这些像素点的深度。还有一种方案是假设初始化的场景是平面的,使用 homography 或 five-point algorithm 计算 essential matrix。这两种方案在低视差下约束性不好,并且当平面中所有的点更靠近摄像机中心时,就会遇到 twofold ambiguity solution。在非平面的场景中,可以通过 eight-point algorithm计算基本矩阵。
文中提出了一种启发式(heuristic)方法来选择模型,会对平面场景采用 homography 和对非平面的场景采用 fundamental matrix 。
C. 单目SLAM
单目SLAM由两种方案,一种是对全部的帧进行估计特征位置和相机姿态,这个方案计算量大,冗余度高还容易累计误差。还有一个方案是 keyframe-based 方法,仅使用关键帧可以允许使用开销大但是精确的BA优化,因为映射过程和帧率没有关系。
System Overview
A. 特征选择
一个主要的思想就是映射和跟踪使用的特征会用于地点识别来实现帧速率重定位和闭环检测(frame-rate relocalization and loop detection)。这个方案要求提取每张图片的时间小于33ms,并且为了获取普适的位置识别能力,要求位置不变性(rotation invariance)。
ORB 特征可以进行快速计算和匹配,同时具有视点不变性。利用ORB特征可以提升BA的精度。
B. 三个线程:跟踪、本地映射和闭环
tracking, local mapping, and loop closing 这三个进程是并行的。
Tracking 负责定位每个帧的相机位置和决定何时插入新的关键帧,首先对上一帧进行特征匹配同时使用BA估计相机的位姿。如果 tracking 丢失,位置识别模块将进行全局的重定位。一旦对相机位姿和特征匹配有了初始的估计,就会使用由系统维护的关键帧的 covisibility graph 来检索局部可见地图(local visible map)。然后,与局部地图点的匹配将使用重投影(reprojection)来检索,相机位姿也会针对所有的匹配来重新优化。最后,跟踪线程还需要决定是否需要插入新的关键帧。
Local mapping 产生新的关键帧和执行局部 BA 来在相机位姿周围实现最佳重建。通过covisibility graph 已建立连接的关键帧来检索在每个新的关键帧内未匹配的ORB,以对新点进行三角测量。在创建之后,通过结合之前tracking中的信息,会剔除一些低质量的点。Local mapping 也负责剔除的冗余的关键帧。
Loop closing 检测新的关键帧的环, 如果检测到了环,会计算一个相似变换?,然后,环的两侧会被对齐然后复制的点被融合,最后执行相似性约束的位姿估计实现全局一致性。
C. 点云和关键帧的选取
每个点云(map point)\(p_i\)包括:
- 在世界坐标系中的3-D坐标 \(\bf X_{w,i}\);
- 观察方向 \(n_i\);
- 一个 ORB 描述符 \(\text{D}_i\),和观察点的汉明距离最近的描述子;
- 可观测点的最远和最近距离 \(d_{max},d_{min}\)。
每个关键帧 \(K_i\) 包括:
- 相机位姿 \({\bf T}_{iw}\) 它是将世界坐标转到相机坐标的一种 rigid body transformation;
- 相机的内参:焦距和(principal point);
- 从帧中提取的所有 ORB 特征
点云和关键帧的产生较为宽松,但是剔除冗余的机制将会很严格。
D. Covisibility Graph and Essential Graph
Covisibility Graph:顶点是一个关键帧,顶点之间的权重就是两个帧中相同点的数目,权重的大小反映了关键帧之间的相似度。
Essential Graph:Covisibility Graph 中的边可能十分密集,Essential Graph 保留了所有的顶点,但是削减了edges。
E. DBoW2
系统嵌入了a bags of words place recognition 模块 ,执行闭环检测和重定位的任务。
首先离线创建了 vocabulary (字典),系统会逐步构建一个包括反转索引的数据库,这个反转索引包含了字典中的每个 visual word ,其中包含已经检查过的关键帧,这样数据库的查询变得十分高效。
使用 covisibility graph 对相邻帧进行组合。
计算两个集合ORB特征关联性的时候,通过字典树进行了暴力匹配。