ORB-SLAM于2015年提出,其具有基于特征点的视觉里程计、基于非线性优化的后端、基于词袋的回环检测功能,采用的三线程的SLAM框架非常经典,同时支持单目、双目、RGBD,具有良好的泛用性。因此成为SLAM初学者必学的方案之一。本文将对论文《ORB-SLAM: a Versatile and Accurate Monocular SLAM System》进行学习并整理相关重点。
首先简单讨论一下ORB-SLAM系统的优缺点,这部分参考我的博客视觉SLAM——特征点法与直接法对比以及主流开源方案对比 ORB LSD SVO DSO:
优点:
缺点:
本文提出的ORB-SLAM算法是一个基于特征点的单目SLAM系统,算法可以实时运行在狭小的室内环境和宽阔的室外环境中。该系统对剧烈运动具有鲁棒性,支持宽基线的回环检测和重定位,以及全自动初始化。该系统是我们基于近年来的优秀算法从头开始设计的一个全新算法,其中SLAM的所有环节:跟踪(Tracking)、建图(mapping)、重定位(relocalization)和回环(loop closing)都采用了相同的特征,并选用适合的策略来选择特征点和关键帧,使最终系统具有很好的鲁棒性,生成精简、可追踪的地图。且只有当场景的内容改变时,这个地图内容才增加,因此可以支持在同一个场景下的持续定位。在文章最后,我们选择通用图像库中的27个图像序列进行了测试。相比目前最新的单目SLAM算法,本文提出的ORB-SLAM性能优势明显。为了使更多人获益,我们在网站上开源算法。
提出了BA方法对实时SLAM的要求及需要提供的信息:
提出了ORB-SLAM的主要贡献:
ORB特征:具有256位BRIEF描述符的带方向的多尺度的FAST角点,对视角具有旋转不变性,对每张图像的特征提取少于33毫秒。
简单解释一下:
Oriented FAST关键点:尺度不变性由构建图像金字塔,并在每一层上检测角点实现;旋转不变性由灰度质心法表示特征的旋转。
BRIEF-256:二进制描述子,在特征点附近的256次像素比较。
需要用汉明距离(不同位的个数)度量。
跟踪(Tracking)线程:对每帧图像提取ORB特征点,通过局部可视化地图的重投影优化当前相机位姿,并决定什么时候插入新的关键帧。
局部地图(Local Mapping)线程:对周围相机位姿求解BA问题进行优化,包括局部空间内的特征点和相机位姿;
回环检测和全局优化(Loop Closing (and Full BA))线程:对每个新的关键帧进行回环检测,消除累计误差。利用相似性约束对只有相机位姿组成的位姿图(Essential Graph)进行优化。
地图点云 p i p_i pi:
关键帧 K i K_i Ki:
地图点云和关键帧的创建条件较为宽松,之后会通过删选机制检测冗余关键帧和匹配错误或不可跟踪的点云进行删除。
优势:地图在构建过程中具有一定弹性,在外界条件比较困难的情况下(比如:旋转,快速运动),算法仍然可以实现鲁棒的跟踪。同时当相机对同一个环境重访问时,地图的尺度大小是可控的,利于该系统的长期工作。
共视图(Covisibility Graph):每个节点代表一个关键帧,如果两个关键帧能同时观测到地图点云中至少15个点,则在这两个关键帧之间用一条边相连,同时权重θ表示两个关键帧能共同观测到的点云数量。
生成树:一个边数量最少的covisibility graph的子图。当插入新关键帧时,判断其与树上的关键帧能共同观测到多少点云,然后将其与共同观测点最多的关键帧相连;反之当一个关键帧被删除时,系统会重新更新与其相关的连接。
基本图(Essential Graph):包含了一个生成树,一个高共视关系(θmin=100)的covisibility graph边的子集,以及回环边。
采用DBoW2算法执行回环检测。通过从大量图像中提取ORB描述子离线创建视觉词典(一种离散化的特征描述子空间)。
同时SLAM系统增量式地构建一个数据库,该数据库中包含了一个反向指针,用于存储每个视觉词典里的单词,关键帧通过数据库查询视觉词典,从而实现高效检索。当一个关键帧通过筛选程序删除时,数据库也会相应更新。
此外还进行以下改进:
论文之后就主要讨论ORB-SLAM系统在地图初始化、跟踪、局部地图构建、回环检测各个阶段的具体流程。这里就只进行简单概括,具体的实现将在日后结合代码进行介绍。
主要目的是计算两帧图像之间的相对位姿来三角化一组初始的地图点云。只有当两个视图之间的视差达到安全阈值时才进行地图初始化。
主要功能为初步估计每帧的位姿,确定关键帧提供给局部地图构建线程
目的是确定更多的约束对关键帧的位姿和地图点云的位置进行优化。
主要目的是消除局部地图构建时不断累计的误差,解决尺度漂移问题。
本文提出了一种新的单目SLAM系统,并详细介绍了其组成模块。该系统是当时定位精度最高、最可靠最完整的单目SLAM系统。其中提出的生成和删除关键帧的策略可以在外界条件很差的情况下可以保证系统正常运行。同时ORB特征良好的识别能力,并被非常快速的提取和匹配。
本文最后还讨论了与直接法的对比:(有关特征点法和直接法的对比可以参考我的博客特征点法与直接法对比以及主流开源方案对比 ORB LSD SVO DSO)
直接法不需要特征提取,可避免人工匹配。对图像模糊,弱纹理环境和高频纹理环境的鲁棒性更好,并能构建稠密的地图。但是直接法假设真实场景中的物体的图像是由该物体本身的表面反射模型产生的,因此算法采用的光度一致性寻找匹配点的思路就限制了匹配点之间的基线距离,通常都比特征匹配点的基线要窄。这对重构的精度影响很大,因为重构需要较宽的基线来减少深度的不确定性。容易可能会受到快门、自动增益和自动曝光的影响。最后由于直接方法计算要求较高,为了满足计算速度,DTAM算法采用地图增量式扩张的方法,而LSD-SLAM则丢掉传感器测量信息,将地图优化降低为对位姿图的优化。