【ORB-SLAM论文笔记】ORB-SLAM: a Versatile and Accurate Monocular SLAM System(ORB-SLAM:精确多功能单目SLAM系统)

前言

ORB-SLAM于2015年提出,其具有基于特征点的视觉里程计、基于非线性优化的后端、基于词袋的回环检测功能,采用的三线程的SLAM框架非常经典,同时支持单目、双目、RGBD,具有良好的泛用性。因此成为SLAM初学者必学的方案之一。本文将对论文《ORB-SLAM: a Versatile and Accurate Monocular SLAM System》进行学习并整理相关重点。

首先简单讨论一下ORB-SLAM系统的优缺点,这部分参考我的博客视觉SLAM——特征点法与直接法对比以及主流开源方案对比 ORB LSD SVO DSO:

优点:

  1. 系统完整、具有良好泛用性;
  2. 在静态环境下定位准确,系统非常稳定, 单目和双目版本都可以达到实时;
  3. 代码可读性强,易扩展, 网上也有实现和imu融合的版本。\

缺点:

  1. 计算ORB特征耗时,三线程结构,cpu消耗大,难以移植到嵌入式设备;
  2. 稀疏特征点地图;
  3. 对动态物体很敏感,有动态物体时非常容易跟踪失败;
  4. 纯旋转也容易丢失。

摘要

本文提出的ORB-SLAM算法是一个基于特征点的单目SLAM系统,算法可以实时运行在狭小的室内环境和宽阔的室外环境中。该系统对剧烈运动具有鲁棒性,支持宽基线的回环检测和重定位,以及全自动初始化。该系统是我们基于近年来的优秀算法从头开始设计的一个全新算法,其中SLAM的所有环节:跟踪(Tracking)、建图(mapping)、重定位(relocalization)和回环(loop closing)都采用了相同的特征,并选用适合的策略来选择特征点和关键帧,使最终系统具有很好的鲁棒性,生成精简、可追踪的地图。且只有当场景的内容改变时,这个地图内容才增加,因此可以支持在同一个场景下的持续定位。在文章最后,我们选择通用图像库中的27个图像序列进行了测试。相比目前最新的单目SLAM算法,本文提出的ORB-SLAM性能优势明显。为了使更多人获益,我们在网站上开源算法。

引言

提出了BA方法对实时SLAM的要求及需要提供的信息:

  1. 对所选帧中点云的观测信息;
  2. 选择合适的关键帧;
  3. 关键帧的特征点需要有显著的视差和回环匹配;
  4. 提供非线性优化算法的初值;
  5. 构建局部地图时优化的可扩展性;
  6. 快速全局优化(位姿图)。

提出了ORB-SLAM的主要贡献:

  1. 对追踪、地图构建、重定位和回环检测都采用相同的特征(ORB)。且ORB特征具有良好的实时性、旋转不变性和光照不变性。
  2. 使用共视图(covisibility graph),特征点的跟踪与建图主要集中在局部共视区域,而与全局地图的大小无关。
  3. 使用基本图(Essential Graph) 优化位姿图实时回环检测。
  4. 实时相机重定位。
  5. 提出了基于模型选择(平面和非平面场景)的自动初始化方法
  6. 采用宽选取、严剔除的方法选择关键帧和地图点。

系统结构

A、特征选择

ORB特征:具有256位BRIEF描述符的带方向的多尺度的FAST角点,对视角具有旋转不变性,对每张图像的特征提取少于33毫秒。

简单解释一下:
Oriented FAST关键点:尺度不变性由构建图像金字塔,并在每一层上检测角点实现;旋转不变性由灰度质心法表示特征的旋转。
BRIEF-256:二进制描述子,在特征点附近的256次像素比较。
需要用汉明距离(不同位的个数)度量。

B、三线程:追踪、局部地图构建和回环检测

跟踪(Tracking)线程:对每帧图像提取ORB特征点,通过局部可视化地图的重投影优化当前相机位姿,并决定什么时候插入新的关键帧。

局部地图(Local Mapping)线程:对周围相机位姿求解BA问题进行优化,包括局部空间内的特征点和相机位姿;

回环检测和全局优化(Loop Closing (and Full BA))线程:对每个新的关键帧进行回环检测,消除累计误差。利用相似性约束对只有相机位姿组成的位姿图(Essential Graph)进行优化。

【ORB-SLAM论文笔记】ORB-SLAM: a Versatile and Accurate Monocular SLAM System(ORB-SLAM:精确多功能单目SLAM系统)_第1张图片

C、地图点云与关键帧

地图点云 p i p_i pi

  • 在世界坐标系的三维坐标 X w i X_{wi} Xwi
  • 视图方向 n i n_i ni,即所有视图方向的主单位向量
  • ORB特征描述子 D i D_i Di
  • 可观测点云的最大距离 d m a x d_{max} dmax和最小距离 d m i n d_{min} dmin(根据ORB特征尺度不变性约束)

关键帧 K i K_i Ki

  • 相机位姿 T i w T_{iw} Tiw,即世界坐标系转换到相机坐标系的变换矩阵
  • 相机内参
  • 从图像帧提取的所有ORB特征(经过畸变模型矫正)

地图点云和关键帧的创建条件较为宽松,之后会通过删选机制检测冗余关键帧和匹配错误或不可跟踪的点云进行删除。
优势:地图在构建过程中具有一定弹性,在外界条件比较困难的情况下(比如:旋转,快速运动),算法仍然可以实现鲁棒的跟踪。同时当相机对同一个环境重访问时,地图的尺度大小是可控的,利于该系统的长期工作。

D、位姿图 Covisibility Graph与Essential Graph

共视图(Covisibility Graph):每个节点代表一个关键帧,如果两个关键帧能同时观测到地图点云中至少15个点,则在这两个关键帧之间用一条边相连,同时权重θ表示两个关键帧能共同观测到的点云数量。

生成树:一个边数量最少的covisibility graph的子图。当插入新关键帧时,判断其与树上的关键帧能共同观测到多少点云,然后将其与共同观测点最多的关键帧相连;反之当一个关键帧被删除时,系统会重新更新与其相关的连接。

基本图(Essential Graph):包含了一个生成树,一个高共视关系(θmin=100)的covisibility graph边的子集,以及回环边。

【ORB-SLAM论文笔记】ORB-SLAM: a Versatile and Accurate Monocular SLAM System(ORB-SLAM:精确多功能单目SLAM系统)_第2张图片

E、基于词袋的位置识别

采用DBoW2算法执行回环检测。通过从大量图像中提取ORB描述子离线创建视觉词典(一种离散化的特征描述子空间)。
同时SLAM系统增量式地构建一个数据库,该数据库中包含了一个反向指针,用于存储每个视觉词典里的单词,关键帧通过数据库查询视觉词典,从而实现高效检索。当一个关键帧通过筛选程序删除时,数据库也会相应更新。
此外还进行以下改进:

  1. 将返回的在共视图中相连的关键帧进行分类;
  2. 数据库返回的分值高于最好分值75%的所有关键帧数据库返回的分值高于最好分值75%的所有关键帧;
  3. 强制匹配视觉字典树上某一层的相同节点(关键帧)里的特征,以加快搜索速度;
  4. 引入一个方向一致性测试来改进匹配点,以保证所有对应匹配点旋转方向一致。

论文之后就主要讨论ORB-SLAM系统在地图初始化、跟踪、局部地图构建、回环检测各个阶段的具体流程。这里就只进行简单概括,具体的实现将在日后结合代码进行介绍。

地图初始化

主要目的是计算两帧图像之间的相对位姿来三角化一组初始的地图点云。只有当两个视图之间的视差达到安全阈值时才进行地图初始化。

  1. 从当前帧和参考帧中查找初始匹配点对;
  2. 并行计算两种几何模型:面向平面视图的homography(单应性矩阵)和面向非平面视图的fundamental matrix(基础矩阵);
  3. 通过启发式算法(即比较评分)选择模型:对于平面、近平面或低视差情况采用单应性矩阵,反之采用基础矩阵;
  4. 从运动到结构的重构,三角化特征点并选择正解;
  5. 全局BA优化重构得到初始点云地图

跟踪

主要功能为初步估计每帧的位姿,确定关键帧提供给局部地图构建线程

  1. 提取ORB特征点,并计算描述子;
  2. 用运动速率恒定模型预测当前相机位置,搜索上一帧图像特征点在地图中的点云与当前帧图像的匹配点,优化当前帧位姿;
  3. 如果跟踪不到特征点则使用全局重定位初始化位姿;
  4. 将局部地图点云映射到当前帧图像上搜索更多的匹配点,并通过当前帧中的所有地图点云进行相机位姿优化;
  5. 决定当前帧是否可以作为关键帧。

局部地图构建

目的是确定更多的约束对关键帧的位姿和地图点云的位置进行优化。

  1. 添加关键帧:在共视图和生成树上添加节点和边,计算关键帧的词袋,用三角法生成新的地图点云;
  2. 筛选三角化的地图点云:在超过25%的预测可见的帧中找到该特征点,并确保其至少能被其他3个关键帧观测到;
  3. 创建新的地图点云:ORB特征点对三角化后,对其在相机坐标系中的深度信息、视差、重投影误差和尺度一致性进行审查,通过后则将其作为新点插入地图。将不满足对极约束的匹配点删除;
  4. 局部BA优化:对当前关键帧,以及在共视图中与其相连的其他关键帧,以及这些关键帧观测到的地图点云进行优化;
  5. 检测冗余关键帧并删除:如果关键帧中90%的点都可以被其他至少三个关键帧同时观测到,则认为是冗余的。

回环检测

主要目的是消除局部地图构建时不断累计的误差,解决尺度漂移问题。

  1. 计算当前关键帧的词袋向量与共视图中相邻图像的相似度,得到最小相似度Smin;在关键帧数据库中找到相似度不小于最小相似度的关键帧作为回环候选关键帧,通过连续三次的关键帧对应相同的候选回环帧,则认为该帧为回环帧;
  2. 当前关键帧到回环关键帧的相似变换,以获得回环的累积误差,也可以作为回环的几何验证。
  3. 在共视图中插入与回环相关的新边,通过相似变换矫正当前关键帧位姿,然后将回环关键帧及其近邻能观测到的所有地图点云都映射到当前关键帧及其近邻中,并在映射的区域附近小范围内追踪它的对应匹配点,对所有匹配的地图点云和计算Sim3过程中的有效数据进行融合;
  4. 对基本图(Essential Graph)进行全局位姿图优化,将回环闭合的误差分散到图像中,优化过程通过相似变换Sim3校正尺度偏移。

结论

本文提出了一种新的单目SLAM系统,并详细介绍了其组成模块。该系统是当时定位精度最高、最可靠最完整的单目SLAM系统。其中提出的生成和删除关键帧的策略可以在外界条件很差的情况下可以保证系统正常运行。同时ORB特征良好的识别能力,并被非常快速的提取和匹配。

本文最后还讨论了与直接法的对比:(有关特征点法和直接法的对比可以参考我的博客特征点法与直接法对比以及主流开源方案对比 ORB LSD SVO DSO)
直接法不需要特征提取,可避免人工匹配。对图像模糊,弱纹理环境和高频纹理环境的鲁棒性更好,并能构建稠密的地图。但是直接法假设真实场景中的物体的图像是由该物体本身的表面反射模型产生的,因此算法采用的光度一致性寻找匹配点的思路就限制了匹配点之间的基线距离,通常都比特征匹配点的基线要窄。这对重构的精度影响很大,因为重构需要较宽的基线来减少深度的不确定性。容易可能会受到快门、自动增益和自动曝光的影响。最后由于直接方法计算要求较高,为了满足计算速度,DTAM算法采用地图增量式扩张的方法,而LSD-SLAM则丢掉传感器测量信息,将地图优化降低为对位姿图的优化。

你可能感兴趣的:(【ORB-SLAM论文笔记】ORB-SLAM: a Versatile and Accurate Monocular SLAM System(ORB-SLAM:精确多功能单目SLAM系统))