ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras

1 摘要
我们为单眼,立体和RGB-D相机提供完整的SLAM系统ORB-SLAM2,包括地图重用,闭环检测和重定位功能。 该系统可在各种环境中的标准CPU中实时工作,从小型手持室内序列,到工业环境中飞行的无人机和城市周围的汽车。我们的后端基于捆绑调整,具有单眼和立体观察,可以使用公制尺度进行精确的轨迹估计。我们的系统包括一个轻量级的定位模型,利用未映射区域的视觉测距轨迹,并匹配允许零漂移定位的地图点。29个流行的公共视频序列中的评估表明,我们的方法实现了最好的准确性,在大多数情况下是最准确的SLAM解决方案。 我们发布源代码,不仅是为了SLAM社区的利益,而且还旨在为其他领域的研究人员提供开箱即用的SLAM解决方案。
2 引言
同步定位和映射(SLAM)在过去二十年中一直是计算机视觉和机器人领域的热门研究课题,最近引起了高科技公司的关注。 SLAM技术构建了未知环境的地图,并将传感器定位在地图中,重点关注实时操作。 在不同的传感器模态中,相机便宜并且提供丰富的环境信息,允许稳健和准确的位置识别。 位置识别是SLAM系统闭环检测的关键模块(即,检测传感器何时返回到映射区域并校正探测中的累积误差),并在跟踪失败后由于遮挡或侵略性运动而重新定位摄像机,或者在系统重新初始化。因此,主要传感器是相机的Visual SLAM在过去几年中得到了很大的发展。可以通过仅使用单眼相机来执行Visual SLAM,这是最便宜和最小的传感器设置。然而,由于仅从一个摄像机无法观察到深度,因此地图的比例和估计的轨迹是未知的。此外,系统自己需要多视图或过滤技术​​来生成初始地图,因为它不能从第一帧进行三角测量。最后,单眼SLAM受到水垢漂移的影响,如果在勘探中进行纯旋转,可能会失败。通过使用立体声或RGB-D相机,所有这些问题都得到了解决,并提供了最可靠的Visual SLAM解决方案。
在本文中,我们建立了单眼ORB-SLAM [1],并提出了ORB-SLAM2,其贡献如下:

  • 第一个用于单目,立体和RGB-D摄像机的开源SLAM系统,包括闭环,重定位和地图重用。
  • 我们的RGB-D结果表明,通过使用光纤束调整(BA),我们可以获得比基于ICP或光度和深度误差最小化的最先进方法更高的精度。
  • 通过使用近距离和远距离立体点以及单眼观察,我们的立体图像结果比最先进的直接立体图像SLAM更精确。
  • 轻量级定位给模型,可以有效地重用无法使用的地图。
    图1显示了了立体图像和RGB-D输入的ORB-SLAM2输出示例。立体情况显示了来自KITTI数据集[2]的序列00的最终轨迹和稀疏重建。这是一个具有多个循环闭包的城市序列,ORB-SLAM2能够成功检测到它。
    RGB-D案例显示了从TUM RGB-D数据集[3]在序列fr1房间中估计的关键帧姿势,以及通过从估计的关键帧姿势反向投影传感器深度图来渲染的密集点云。请注意,我们的SLAM不执行任何融合,如KinectFusion [4]或类似,但良好的定义表明关键帧姿势的准确性。更多示例显示在随附的视频2中。
    在本文的其余部分,我们讨论了第二部分的相关工作,我们在第三部分描述了我们的系统,然后在第四部分中给出了评估结果,在第五部分结束了结论。
    在这里插入图片描述
    3 相关工作
    最早和最着名的RGB-D SLAM系统之一是Newcombe等人的KinectFusion。 [4]。该方法将来自传感器的所有深度数据融合成体积密集模型,用于使用ICP跟踪摄像机姿势。由于其体积表示和缺少回环检测,该系统仅限于小型工作空间。
    Whelan等人的Kintinuous。 [12]能够通过使用滚动循环缓冲区在大型环境中运行,并使用位置识别和姿势图包括闭环优化。
    可能第一个流行的开源系统是Endres等人的RGB-D SLAM。 [13]。这是一个基于特征的系统,其前端通过特征匹配和ICP计算帧到帧的运动。后端使用来自启发式搜索的循环闭包约束来执行姿势图优化。类似地,Kerl等人的DVO-SLAM的支持。 [14]优化了一个姿势图,其中关键帧到关键帧约束是从视觉里程计算出来的
    最小化光度和深度误差。
    DVOSLAM还在所有先前帧上以启发式方式搜索循环候选,而不是依赖于位置识别。
    最近的Whelan等人的ElasticFusion。 [15]建立了一个基于表面的环境地图。
    这是一种以地图为中心的方法,它会忘记姿势并执行循环闭合,将非刚性变形应用于地图,而不是标准的姿势图优化。
    该系统的详细重建和定位精度令人印象深刻,但目前的实施仅限于房间大小的地图,因为复杂度随着地图中的表面数量而变化。
    正如Strasdat等人提出的那样。 [8]我们的ORB-SLAM2使用深度信息来合成图像上提取特征的立体坐标。
    这样我们的系统就不知道输入是立体声还是RGB-D。与上述所有方法不同,我们的后端基于束调整并构建全局一致的稀疏重建。
    因此,我们的方法是轻量级的,适用于标准CPU。 我们的目标是长期和全局一致的定位,而不是建立最详细的。
    4 ORB-SLAM2
    用于立体和RGB-D相机的ORB-SLAM2基于我们基于单眼特征的ORB-SLAM [1],其主要组件在此总结,以方便读者。 该系统的一般概述如图2所示。
    该系统有三个主要的并行线程:
    1)跟踪线程:通过找到与局部地图的特征匹配并使用仅运动的BA最小化重投影误差来在每帧定位摄像机,
    2)局部地图构建:管理定位地图并优化它,执行本地BA,
    3)循环闭合以检测大循环并通过执行姿势图优化来校正累积漂移。
    该线程启动第四个线程以执行完整的BA
    系统嵌入了基于DBoW2 [16]的场所识别模块,用于重新定位,在跟踪失败(例如遮挡)或在已经绘图的场景中重新初始化的情况下,以及用于循环检测。
    系统维护一个covisibiliy图[8],它连接观察公共点的任何两个关键帧和连接所有关键帧的最小生成树。
    这些图结构允许检索关键帧的局部窗口,以便跟踪和局部地图构建在本地运行,允许在大型环境中工作,并用作关闭循环时执行的姿势图优化的结构。
    系统使用相同的ORB功能[17]进行跟踪,映射和位置识别任务。
    这些功能对旋转和缩放非常稳健,并且对相机自动增益和自动曝光以及照明变化具有良好的不变性。
    此外,它们可以快速特征点提取和匹配,允许实时操作,并在词袋位置识别中显示出良好的精确度/召回性能[18]。
    在本节的其余部分,我们将介绍如何利用立体声/深度信息以及系统的哪些元素受到影响。
    有关每个系统块的详细说明,请参阅我们的单目出版物[1]。
  • A.单眼,近立和远立体图像关键点
    ORB-SLAM2作为基于特征的方法预处理输入以提取显着关键点位置的特征,如图2b所示。
    然后丢弃输入图像并且所有系统操作都基于这些特征,使得系统独立于传感器(立体或RGB-D)。
    我们的系统处理单眼和立体关键点,进一步分类为近或远。
    立体关键点由三个坐标xs =(uL; vL; uR)定义,其中(uL; vL)是左图像上的坐标,uR是右图像中的水平坐标。对于立体相机,我们在两个图像中提取ORB,对于每个左ORB,我们在右图像中搜索匹配。假设立体校正图像,这可以非常有效地完成,因此极线是水平的。然后,我们使用左ORB的坐标和右匹配的水平坐标生成立体关键点,其通过贴片相关性进行子像素细化。对于RGB-D相机,我们在图像通道上提取ORB特征,并且如Strasdat等人所提出的那样。 [8],我们使用注册的深度图通道中的相关深度值以及结构光投影仪和红外相机之间的基线合成每个特征的右坐标,对于Kinect和Asus Xtion相机,我们接近8cm。如果相关深度小于立体图像/ RGB-D基线的40倍,立体关键点被分类为接近,如[5]中所建议,否则它被分类为远。近关键点可以从一个帧安全地进行三角化,因为准确估计了depthis并提供了比例,平移和旋转信息。另一方面,远点提供准确的旋转信息但是缩放比例和翻译信息较弱。当多个视图支持它们时,我们对远点进行三角化。
    单目关键点由左图像上的两个坐标xm =(uL; vL)定义,并且对应于无法找到立体匹配或在RGB-D情况下具有无效深度值的所有ORB。这些点仅从多个视图中进行三角剖分,并且不提供比例信息,但有助于旋转和平移估计。
    在这里插入图片描述
  • B.系统引导
    使用立体或RGB-D相机的主要好处之一是,仅从一帧获得深度信息,我们不需要像单眼情况那样的运动初始化的特定结构。在系统启动时,我们使用第一帧创建一个关键帧,将其姿势设置为原点,并利用所有立体关键点创建初始化地图。
  • C Bundle Adjustment with Monocular and Stereo Constraints
    我们的系统执行束调整以优化跟踪中的相机姿势(仅运动BA),优化局部地图构建(局部BA)中关键帧和点的局部窗口,并在循环闭合后优化所有关键帧和点( 完全BA)。 我们在g2o中使用Levenberg-Marquadt实现[19]。
    Motion-only BA:优化相机位姿 R和t。最小化被匹配到世界坐标系下的3D点 X i X_i Xi和关键点 x ( . ) i x_{(.)}^i x(.)i的二次投影误差。
    在这里插入图片描述
    对公式的理解:
    在这里插入图片描述
    其中, ρ \rho ρ表示Huber鲁棒核函数:
    在这里插入图片描述
    在这里插入图片描述
    Local BA
    优化covisible关键帧集合和关键帧中的所有关键点。
    局部BA优化:局部的covisible关键帧序列 K L K_L KL,不在 K L K_L KL中的关键帧序列 K F K_F KF P L P_L PL表示 K L K_L KL中所有的ORB关键点。定义集合 X k X_k Xk是某一关键帧k中和 P L P_L PL中匹配到的关键点集合,利用二重投影误差进行局部BA优化。
    在这里插入图片描述
    Full BA
    是局部BA的特定情况,其中地图中的所有关键帧和点都被优化,除了固定的原始关键帧以消除测量的自由度。
  • D 闭环检测和full BA
    循环闭合分两步执行,首先必须检测并验证循环,然后校正循环以优化姿势图。 与单眼ORBSLAM(可能发生尺度漂移[20])相比,立体/深度信息使得尺度可观察,几何验证和姿势图优化不再需要处理尺度漂移并且基于刚体变换而不是相似性。
    在ORB-SLAM2中,我们在姿势图之后引入了完整的BA优化,以实现最佳解决方案。
    这种优化可能非常昂贵,因此我们在一个单独的线程中执行它,允许系统继续创建映射和检测循环。然而,这带来了将束调整输出与地图的当前状态合并的挑战。
    如果在优化运行时检测到新循环,我们将中止优化并继续关闭循环,这将再次启动完整的BA优化。
    当完整的BA完成时,我们需要合并更新的关键帧子集和由完整BA优化的点,以及在更新运行时插入的非更新关键帧和点。
    这是通过将更新的关键帧的校正(即,从非优化的姿势到优化的姿势的变换)传播到通过生成树的非更新的关键帧来完成的。
    根据应用于其参考关键帧的校正来变换未更新的点。
  • E 关键帧的插入
    ORB-SLAM2遵循单眼ORB-SLAM中引入的策略,经常插入关键帧并随后剔除冗余的关键帧。
    近距离和远距离立体点之间的区别允许我们为关键帧插入引入新条件,这对于场景的大部分远离立体传感器的挑战性环境是至关重要的,如图3所示。在这样的环境中,我们需要有足够的临近点来准确地估计平移,因此如果跟踪的临近点的数量下降到τt以下并且该帧可以创建至少τc新的闭合立体点,则系统将插入新的关键帧。我们凭经验发现τt= 100和τc= 70在我们所有的实验中都能很好地工作。
    -F 定位模型
    我们采用了一种定位模型,只要环境没有重大变化,它就可以用于良好被绘图的区域的轻量级长期的定位。
    在此模式下,局部建图和回环检测线程将被停用,并且如果需要,使用重定位通过跟踪连续定位摄像机。
    在此模式下,跟踪利用视觉里程计数匹配并匹配地图点。
    视觉里程计数匹配是当前帧中的ORB与前一帧中从立体声/深度信息创建的3D点之间的匹配。
    这些匹配使未建图区域的局部化稳健,但会累积漂移。
    地图点匹配确保现有地图的无漂移定位。
    此模式在随附的视频中进行了演示。
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页