ORB-SLAM3: An Accurate Open-Source Library
for Visual, Visual-Inertial and Multi-Map SLAM
Carlos Campos∗, Richard Elvira∗, Juan J. Gómez Rodr´ ıguez, José M.M. Montiel and Juan D. Tardós
本文介绍了ORB-SLAM3系统,这是第一个能够执行视觉、视觉惯性和多地图SLAM的单目、立体和RGB-D相机的系统,使用针孔和鱼眼镜头模型。第一个主要的新特性是基于特征的紧密集成视觉惯性SLAM系统,它完全依赖于最大aposteriori (MAP)估计,甚至在IMU初始化阶段也是如此。其结果是,该系统在大大小小的室内和室外环境中都能稳定地实时运行,并且比以前的方法精度提高了2到10倍。
完全依赖MAP
第二个主要的新颖性是一个多地图系统,它依赖于一种新的地点识别方法,提高了回召率。多亏了它,ORB-SLAM3能够在长时间的视觉信息差的情况下生存下来: 当它追踪丢失时,它会开始一个新的地图,当它重新访问地图区域时,它将与之前的地图无缝地融合在一起。与只使用最后几秒信息的视觉测程系统相比,ORB-SLAM3是第一个能够在所有算法阶段重用所有之前信息的系统。这允许在bundle调整中包含共视的关键帧,这提供了高视差观察,提高了精度,即使它们在时间上被广泛分离,或者它们来自之前的mapping session。
我们的实验表明,在所有传感器配置中,ORBSLAM3与文献中最好的系统一样健壮,而且明显更准确。值得注意的是,我们的双目惯性SLAM在EuRoC无人机上实现了3.5厘米的平均精度,在tumi - vi数据集(AR/VR场景的一个代表设置)的房间内进行快速手持运动时实现了9毫米的平均精度。为了社区的利益,我们公开了源代码。
论文
代码
在过去的二十年中,对视觉同步定位和测绘系统(SLAM)和视觉里程测量系统(VO)的深入研究,无论是单独使用摄像机还是与惯性传感器结合使用,都产生了优秀的系统,具有越来越高的准确性和鲁棒性。现代系统依赖于最大后验概率(MAP)估计,在视觉传感器的情况下,这相当于束平差(BA),在基于特征的方法中最小化特征重投影误差的几何BA,或在直接方法中最小化一组选定像素的光度误差的光度BA。
随着近年来集成闭环技术的VO系统的出现,VO和SLAM之间的边界变得更加分散。视觉SLAM的目标是使用传感器在移动平台上建立环境地图,并实时计算该平台在该地图中的姿态。相比之下,VO系统将重点放在计算平台的位姿上,而不是构建地图。SLAM地图的最大优势是,它允许在BA以前的观测中匹配和使用三种类型的数据关联(扩展了[1]中使用的术语):
短期数据关联,匹配最近几秒获取的地图元素。这是大多数VO系统使用的唯一的数据关联类型,一旦环境元素离开视野,就会忘记它们,导致即使系统在同一区域移动时也会持续估计漂移。
中期数据关联,匹配距离相机较近且累计漂移较小的地图元素。与短期观测一样,这些数据可以在BA中匹配和使用,当系统在地图区域移动时,可以达到零漂移。它们是我们的系统比带回环检测的VO系统获得更高精度的关键。
长期数据关联,使用位置识别技术将观测值与以前访问过的区域中的元素进行匹配,而不管累积漂移(循环检测)、当前区域先前被映射到一个断开的地图中(地图合并)或跟踪丢失(重新定位)。长期匹配允许重置漂移,并使用姿态图(PG)优化,或更准确地说,使用BA校正地图。这是中、大型环形环境中SLAM精度的关键。
在这项工作中,我们建立在ORB-SLAM[2]、[3]和ORBSLAM visual-inertial[4]上,这是第一个能够充分利用短期、中期和长期数据关联的视觉和视觉-惯性系统,在地图区域达到零漂移。在这里,我们进一步提供了多地图数据关联,这允许我们在BA地图元素中匹配和使用来自以前的地图会话,实现了SLAM系统的真正目标:构建一个可以用于以后提供准确定位的地图。
这实质上是一篇系统论文,其最重要的贡献是ORB-SLAM3库本身[5],这是迄今为止最完整和准确的可视化、可视化-惯性和多地图SLAM系统(见表1)。
ORB-SLAM3的主要新颖之处是:
一种完全依赖最大后验(MAP)估计的单目和立体视觉惯性SLAM系统,即使在IMU(惯性测量单元)3初始化阶段也是如此。在[6]中已经提出了初始化方法。在这里我们增加了它与ORB-SLAM视觉惯性[4]的集成,对立体惯性SLAM的扩展,以及对公共数据集的全面评估。我们的结果表明,单目和立体视觉惯性系统是极其稳健的,而且明显比其他视觉惯性方法更准确,即使在序列(数据集)中没有环路。
Improved-recall 位置识别。最近许多视觉SLAM和VO系统[2],[7],[8]使用DBoW2包的词库[9]来解决位置识别(回环)。DBoW2要求时间一致性,在检查几何一致性之前,先将三个连续的关键帧匹配到同一区域,从而以召回为代价提高了精度。因此,系统在关闭循环和重用先前绘制的区域时速度太慢。我们提出了一种新的位置识别算法,该算法首先检查候选关键帧的几何一致性,然后检查在大多数情况下已经在地图上的三个共可见关键帧的局部一致性。这种策略提高了查全率,加强了数据关联,提高了地图的准确性,但代价是略高的计算成本。
ORB-SLAM地图集,第一个完整的多地图SLAM系统,能够处理视觉和视觉惯性系统,在单目和立体配置。Atlas可以代表一组断开的地图,并将所有的测绘操作顺利地应用于它们:位置识别、相机重新定位、回环闭合和精确无缝的地图合并。这允许自动使用和组合在不同时间构建的地图,执行增量多会话SLAM。[10]给出了用于视觉传感器的ORBSLAM图集的初步版本。在这里我们增加了新的地点识别系统,视觉惯性多地图系统及其在公共数据集上的评价。
一个抽象的相机表示,使SLAM代码不知道所使用的相机模型,并允许通过提供它们的投影、非投影和雅可比函数来添加新模型。我们提供针孔[11]和鱼眼[12]模型的实现。
所有这些创新,加上一些代码改进,使ORB-SLAM3成为新的参考可视化和可视化惯性开源SLAM库,与文献中最好的系统一样健壮,而且明显更准确,正如我们在第七节中的实验结果所示。我们还提供了单目、立体、单目惯性和立体惯性SLAM结果的比较,这可能是从业者感兴趣的。
表一总结了最具代表性的视觉和视觉惯性系统,显示了用于估计和数据关联的主要技术。表中所包含的定性准确性和稳健性评级是基于第七节的结果,以及[2]中报道的PTAM、LSD-SLAM和ORB-SLAM之间的比较。
单目SLAM首先在MonoSLAM[13],[14],[52]中使用扩展卡尔曼滤波(EKF)和ShiTomasi点来解决,这些点在后续图像中通过相关性引导搜索进行跟踪。使用保证特征匹配一致的技术,中期数据关联得到显著改善,实现手持视觉SLAM[53],[54]。
相反,基于关键帧的方法只使用少量选定的帧来估计地图,而忽略了来自中间帧的信息。这允许在关键帧速率下执行成本更高但更准确的BA优化。最具代表性的系统是PTAM[16],它将摄像头跟踪和映射拆分为两个并行线程。基于关键帧的技术在相同的计算成本下比滤波更精确,成为视觉SLAM和VO的黄金标准。[56]中使用滑动窗口BA实现了大规模单目SLAM,[57]中使用双窗口优化和共可见图实现了大规模单目SLAM。
在这些思想的基础上,ORB- slam[2],[3]使用ORB特性,其描述符提供短期和中期的数据关联,构建共可见图来限制跟踪和映射的复杂性,并使用词包库DBoW2[9]执行循环关闭和重定位,实现长期数据关联。是迄今为止唯一集成了三种数据关联的视觉SLAM系统,我们认为这是其卓越准确性的关键。在这项工作中,我们利用新的Atlas系统提高了它在纯视觉SLAM中的鲁棒性,该系统在跟踪丢失时开始一个新的地图,以及利用改进的召回率的新位置识别方法提高了它在模糊场景中的准确性。
直接方法不提取特征,而是直接使用图像中的像素强度,并通过最小化光度误差估计运动和结构。LSD-SLAM[20] 能够利用高梯度像素构建大尺度半密集地图。然而,地图估计降低到posegraph (PG)优化,获得的精度低于PTAM和ORB-SLAM[2]。混合系统SVO[23],[24]提取FAST特征,采用直接方法跟踪特征和任意帧间强度梯度非零的像素,利用重投影误差优化摄像机轨迹和三维结构。SVO是一种非常高效的方法,但作为一种纯粹的VO方法,它只进行短期的数据关联,限制了其准确性。Direct Sparse Odometry DSO[27]能够在点检测器性能较差的情况下计算精确的相机姿态,增强了在低纹理区域或对模糊图像的鲁棒性。它引入了局部光度BA,同时优化了7个近期关键帧的窗口和点的逆深度。这项工作的扩展包括双目[29],回环使用特征点和DBoW2[58][59],以及视觉惯性里程计[46]。直接稀疏映射DSM[31]在直接方法中引入了地图重用的思想,说明了中期数据关联的重要性。在所有情况下,由于缺乏短期、中期和长期数据关联的集成,导致准确性低于我们的建议(见第7节)。
表一:最具代表性的视觉(上)和视觉惯性(下)系统的概述,按时间顺序排列。
1 最后的源代码由不同的作者提供。[50]网站提供原始软件。
2 源代码仅供第一个版本使用,SVO 2.0不是开源的。
3 MSCKF是[51]专利,只有另一个作者的重新实现可以作为开放源码获得。
视觉和惯性传感器的结合提供了较差纹理、运动模糊和闭塞的鲁棒性,并且在单目系统的情况下,使scale可观测。
紧密耦合方法的研究可以追溯到MSCKF[33],其中通过特征边缘化避免了EKF在特征数量上的二次代价。初始系统在[34]中完善,在[35]、[36]中扩展到立体。第一个基于关键帧和束调整的紧密耦合视觉里程测量系统是OKVIS[38],[39],它也能够使用单目和立体视觉。虽然这些系统依赖于特征,但ROVIO[41],[42]使用直接数据关联提供了光度误差EFK。
ORB-SLAM-VI[4]首次提出了一种能够重用具有短期、中期和长期数据关联的地图的视觉惯性SLAM系统,将其用于基于IMU预积分[60]的精确局部视觉惯性BA中,[61]。但其IMU初始化技术太慢,耗时15秒,影响了鲁棒性和准确性。[62]、[63]中提出了更快的初始化技术,该技术基于一个封闭的解来联合检索尺度、重力、加速度计偏差和初始速度,以及视觉特征深度。至关重要的是,它们忽略了IMU的噪声特性,最小化了空间点的3D误差,而不是它们的重投影误差,这是基于特征的计算机视觉的黄金标准。我们以前的工作[64]表明,这将导致巨大的不可预测的错误。
VINS-Mono[7]是一个非常精确和健壮的单目惯性里程计系统,环路闭合使用DBoW2和4自由度姿态图优化,以及地图合并。特征跟踪使用Lucas-Kanade跟踪器,比描述符匹配略强一些。在VINS-Fusion[44]中,它已扩展到立体和立体惯性。
VI-DSO[46]将DSO扩展到视觉惯性里程计,提出了一种捆绑调整,将惯性观测与选定的高梯度像素的光度误差相结合,从而实现非常好的精度。随着高梯度像素信息的成功利用,增强了对纹理较差的场景区域的鲁棒性。他们的初始化方法依赖于视觉惯性BA,在2030秒内收敛在1%的尺度误差内。
最新的basalt[47]是一个立体惯性里程计系统,从视觉惯性里程计中提取非线性因素,将它们用于BA,并闭合匹配ORB特征,达到非常好的精确度。
Kimera [8]是一种新颖的度量语义映射系统,但它的度量部分由DBoW2的立体惯性测程加闭环和位姿图优化组成,实现了与VINS-Fusion相似的精度。
在本工作中,我们建立了ORB-SLAM-VI,并将其扩展到立体惯性SLAM。提出了一种基于最大后验概率(MAP)估计的快速初始化方法,该方法适当地考虑了视觉和惯性传感器的不确定性,在2秒内以5%的误差估计真实尺度,在15秒内收敛到1%的尺度误差。上面讨论的所有其他系统都是视觉-惯性里程计方法,其中一些扩展了回环检测,并且缺乏使用中期数据关联的能力。我们相信,这一点(指中期数据关联),加上快速和精确的初始化,是我们的系统始终获得更好的精度的关键,即使在没有循环的序列中。
在一种滤波方法中,[65]首次提出了通过地图创建和融合来增加跟踪损失的鲁棒性的想法。第一个基于关键帧的多地图系统是[66],但地图初始化是手动的,系统不能合并或关联不同的子地图。多地图功能是作为协同mapping 系统的一个组成部分进行研究的,它具有多个mapping agent和一个只接收信息的中心服务器[67],或者具有双向信息流,如C2TAM[68]。MOARSLAM[69]为协作式多设备SLAM提出了一种健壮的无状态客户机-服务器体系结构,但主要关注的是软件体系结构,没有报告准确性结果。
最近,CCM-SLAM[70]、[71]提出了一种基于ORB-SLAM的多无人机双向信息流分布式多地图系统。他们的重点是克服有限带宽和分布式处理的挑战,而我们的重点是准确性和鲁棒性,在EuRoC数据集上取得显著更好的结果。SLAMM[72]也提出了ORB-SLAM2的多地图扩展,但保持子地图作为分离的实体,同时我们进行无缝地图合并,构建更精确的全局地图。
VINS-Mono[7]是一个视觉里程测量系统,具有闭环和多地图功能,依赖于位置识别库DBoW2[9]。我们的实验表明,由于能够使用中期数据关联,在EuRoc数据集上的单目惯性单次操作中,ORB-SLAM3的精度是VINS-Mono的2.6倍。我们的Atlas系统也建立在DBoW2的基础上,但提出了一种新的高查全率的位置识别技术,并使用本地BA进行更详细和准确的地图合并,在EuRoC上的多会话操作中,比VINS-Mono的准确率提高了3.2倍。
ORB-SLAM3是在ORB-SLAM2[3]和ORBSLAM-VI[4]上构建的。它是一个完整的多地图和多会话系统,能够在纯视觉或视觉惯性模式下工作,with单眼、立体声或RGB-D传感器,使用针孔和鱼眼相机模型。图1显示了主要的系统组件,它们与ORB-SLAM2的组件平行,具有一些重要的新颖之处,下面将对其进行总结:
1、Atlas是由一组互不相连的地图组成的多地图表示。有一个激活的地图,跟踪线程定位传入的帧,并由本地mapping线程不断优化和使用新的关键帧增长。我们将Atlas中的其他地图称为非活动地图。该系统建立了一个独特的关键帧DBoW2数据库,用于重新定位,循环关闭和地图合并。
2、跟踪线程处理传感器信息,实时计算当前帧相对于激活地图(active map)的位姿,最小化匹配地图特征的重投影误差。它还决定当前帧是否成为关键帧。在视觉-惯性模式下,通过在优化过程中考虑惯性残差来估计物体的速度和IMU偏差。当跟踪丢失时,跟踪线程尝试在所有Atlas的地图中重新定位当前帧。如果重定位成功,将继续跟踪,并在需要时切换激活地图。否则,在一段时间后,激活地图将被存储为非激活地图,并从头初始化一个新的激活地图。
3、local maooing线程将关键帧和点添加到active map中,删除冗余的帧和点,并使用视觉或视觉惯性BA优化map,在接近当前帧的关键帧的局部窗口中操作。此外,在惯性情况下,IMU参数使用我们的新map估计技术由mapping线程初始化和细化(优化)。
4、Loop and map merging thread 线程以关键帧速率检测active map和整个Atlas之间的公共区域。如果公共区域属于active map,则执行回环校正;如果它属于不同的地图,两个地图就会无缝地合并成一个单独的地图,这就成为active map。在回环修正后,一个完整的BA将在一个独立的线程中启动,在不影响实时性能的情况下进一步完善地图。
ORB-SLAM假设所有系统组件都是针孔摄像机模型。我们的目标是通过将所有与相机模型相关的属性和函数(投影和非投影函数、雅可比矩阵等)提取到单独的模块中,从整个SLAM管道中抽象出相机模型。这允许我们的系统通过提供相应的摄像机模块来使用任何摄像机模型。
在ORB-SLAM3库中,除了针孔模型外,我们还提供了Kannala-Brandt[12]鱼眼模型。由于大多数流行的计算机视觉算法采用针孔摄像机模型,许多SLAM系统要么对整个图像进行校正,要么对特征坐标进行校正,以在理想的平面视网膜上工作。然而,这种方法对于鱼眼镜头是有问题的,因为鱼眼镜头可以达到或超过180度的视场(FOV)。由于边缘物体放大,中心物体分辨率较低,影响特征匹配,不能进行图像校正。特征坐标的校正需要使用小于180°的视场,这给许多计算机视觉算法带来了麻烦,这些算法假设沿图像的均匀重投影误差,而在校正鱼眼图像中,这一点远非真实。这迫使裁剪图像的外部部分,失去了大视场的优势:更快的环境映射和更好的遮挡鲁棒性。接下来,我们讨论如何克服这些困难。
一个健壮的SLAM系统需要在跟踪失败时重新定位摄像机的能力。ORB-SLAM通过设置一个基于ePnP算法的Perspective-n-Points求解器来解决重定位问题[73],该算法假设在其所有公式中都有一个校准的针孔摄像机。为了继续我们的方法,我们需要一个独立于所使用的相机模型的PnP算法。为此,我们采用了最大似然透视-n点算法(MLPnP)[74],该算法完全与相机模型解耦,因为它使用射影光线作为输入。相机模型只需要提供一个从像素到投影射线的非投影功能,就可以使用重新定位。
大多数立体SLAM系统都假设立体帧是矫正的,即两幅图像使用相同焦距转换为针孔投影,图像平面共面,并与水平极线对齐,这样一幅图像中的一个特征可以通过查看另一幅图像中的同一行来轻松匹配。
然而,立体图像校正的假设是非常限制性的,在许多应用中,既不合适也不可行。例如,校正发散的立体或立体鱼眼相机将需要严重的图像裁剪,失去了大视场的优势。
由于这个原因,我们的系统不依赖于图像校正,考虑到两个单目摄像机:
1)它们之间的一个常数相对SE(3)变换
和
2)可选地,观察场景相同部分的公共图像区域。
这些约束条件允许我们在对新地标进行三角测量和调整优化时,通过引入这些信息,有效地估计地图的scale。紧接着这个想法,我们的SLAM管道估计了一个6自由度刚体姿态,其参考系统可以位于一个摄像机或IMU传感器中,并根据刚体姿态表示摄像机。
如果两台相机都有一个重叠的区域,在那里我们可以进行立体观察,我们可以在它们第一次被看到时对真实scale的地标进行三角测量。其余两幅图像仍然有很多相关信息,在SLAM管道中用作单目信息。首先在这些区域看到的特征是从多个视图中三角化的(多个帧[第一次观测到landmark]进行三角化),就像在单目情况下一样。