前言
ORB-SLAM于2015年提出,其具有基于特征点的视觉里程计、基于非线性优化的后端、基于词袋的回环检测功能,采用的三线程的SLAM框架非常经典,并在其改进版ORB-SLAM2中同时支持单目、双目、RGBD,具有良好的泛用性。因此成为SLAM初学者必学的方案之一。本文将对ORB-SLAM2的论文进行学习并整理相关重点。
原文:ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras
ORB-SLAM2:一个开源的单目、双目和RGBD SLAM系统
摘要
ORB-SLAM2是一套基于单目、双目和RGB-D相机的完整SLAM方案,包括地图复用、回环检测和重定位功能。无论是室内的小型手持设备,还是工厂中的无人机和城市中行驶的汽车,ORB-SLAM2都能够在标准CPU上实时工作。后端采用基于BA的优化,可以得到公制尺度的精确轨迹估计。此外,ORB-SLAM2包含了一个轻量级的定位模式,该模式利用视觉里程计来追踪未建图区域,以及匹配地图点实现零漂移定位。29个公共数据集测试结果显示,在大多数情况下该方案比此前方案精度更高。我们开源了ORB-SLAM2源代码,不仅仅是为了整个SLAM领域,同时也希望能够为其他领域研究者提供一套SLAM的解决方案。
引言
ORB-SLAM2的贡献在于:
- 基于单目、双目和RGB-D的开源SLAM方案,方案还包括:回环检测、地图重用和重定位;
- RGB-D采用光束偏差法(BA)比ICP或者最小化光度和深度误差法更加精确;
- 双目采用近处和远处双目匹配点(close and far stereo points)和单目观测点,比直接使用双目更精确;
- 针对无法建图的情况提出一种轻量级定位模式。
ORB-SLAM2系统
ORB-SLAM2系统基于ORB-SLAM,主要有3个并行线程:
- Tracking:寻找局部地图特征点并进行匹配,运用纯运动BA最小化重投影误差,定位每帧相机位姿。
- Local Mapping:运用局部BA算法优化相机位姿和特征点云。
- Loop Closing:检测回环并通过位姿图优化消除累计漂移误差。在位姿图优化后会启动第4个线程执行全局BA算法。
对于系统中使用的ORB特征,位姿图如共视图、生成树和基本图,以及基于DBow2的回环检测等内容可参考
【ORB-SLAM论文笔记】ORB-SLAM: a Versatile and Accurate Monocular SLAM System。下文将主要介绍双目和RGB-D信息如何进行使用以及系统相对单目的改进。
近处和远处双目特征点
如图2(b)所示,ORB-SLAM2系统对双目或RGB-D相机的特征提取进行了预处理,并将特征点分成远特征点和近特征点,保证其系统的运行都是基于输入图像的特征点展开而不是图像。
对于双目相机,提取左右图像的ORB特征点,其通过 x s = ( u L , v L , u R ) x_s = (u_L, v_L, u_R) xs=(uL,vL,uR)定义,将每个左边的ORB特征通过水平的极线匹配到右边的图像中。
对于RGB-D相机,在RGB图像上提取ORB特征点,对每个特征点 ( u L , v L ) (u_L, v_L) (uL,vL),将其深度值转换为虚拟的右坐标: u R = u L − f x b d u_R=u_L- \frac{f_x b}{d} uR=uL−dfxb,其中fx为水平焦距,b为结构光投影器和红外相机之间的基线。以此双目相机和RGB-D相机的输入可由系统其余部分同等处理。
近双目特征点:匹配点的深度值小于40倍双目或RGB-D基线,否则为远双目特征点。近特征点能通过某一帧的三角化得到精确的深度值估计,并能提供尺度、平移和旋转信息;远特征点能提供精确的旋转信息,但尺度和漂移信息较少,当提供多视图时才能进行三角化。
单目特征点:通过左图坐标(uL,vL)定义,对应那些无法找到双目匹配或在RGB-D图上具有无效深度值的所有ORB特征点。这些点仅能够从多视图中三角测量化并且不能够提供尺度信息,但是可以提供旋转和平移的估计信息。
系统初始化时直接对第一帧的位姿进行初始化,从所有特征点云中构建初始化地图。
BA
BA采用g20中的LM方法,并用于以下三个过程:
- 纯运动BA:优化相机旋转矩阵R和位置t,通过最小化特征点xi和匹配的世界坐标系下的3D点Xi的重投影误差。
投影函数π(πm为单目,πs为处理后的双目): - 局部BA:优化了共视关键帧集合
K
L
K_L
KL以及这些关键帧中的所有可视点
P
L
P_L
PL。对于不在
K
L
K_L
KL中的其他关键帧
K
F
K_F
KF中在
P
L
P_L
PL中的观察点作用于代价函数,但是在优化过程中保持不变。定义
X
k
X_k
Xk为
P
L
P_L
PL中的点和关键帧k中特征点的匹配点集合:
- 全局BA:在位姿图优化后进行,采用一个独立线程,优化所有的关键帧和地图点,允许系统在优化同时进行建图和回环检测。如果在全局BA运行时检测到新的闭环,我们将中止全局BA并进行闭环,然后再次启动完整的全局BA优化。当全局BA结束时,将全局BA优化的关键帧和点的子集进行更新,并与在全局BA运行时未更新的关键帧和插入的点进行融合(通过生成树将更新关键帧的校正传递到未更新的关键帧中,未更新点根据参考关键帧的矫正进行变换)。
回环检测
回环检测:
- 回环信息的检测与确认;
- 利用回环修正累计误差和优化位姿图。
相比于单目SLAM,系统在几何校验和位姿图优化中不再处理尺度漂移问题,并且基于刚体变换而不是基于相似性。
关键帧
基本遵循单目ORB-SLAM的方法:宽松的关键帧插入策略并筛选剔除冗余的关键帧。
根据远近关键点的差异设置新的关键帧插入条件:
当跟踪的近关键点小于τt=100且该帧创造大于τc = 70个新的近关键点时,插入新的关键帧。(因为需要大量的近关键点用于精确估计平移)
定位模式
适用于轻量级以及在地图已知情况下长期的运行。
在定位模式中,停止局部建图和回环检测线程,始终通过追踪线程进行重定位。追踪模块使用视觉里程计匹配当前帧特征点和先前帧由双目或深度相机得到的3D点云。在未知地图区域会产生累计漂移,在已知地图中能实现零漂移定位。