锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

ORB-SLAM: a Versatile and Accurate Monocular SLAM System

时间:2022-08-11 11:00:00 e0e1e2传感器h1141接近传感器ni4kl2v传感器

摘要

本文提出了ORB-SLAM,基于特征的单目SLAM该系统可在室内外大小环境中实时运行。该系统具有严重的运动噪声,允许宽基线闭环和重定位,并可自动初始化。基于近年来优秀的算法,我们设计了一个使用和其他一切的新系统SLAM同一系统的工作流程包括: 跟踪、构图、重定位和闭环矫正。选择重建的地图点和关键帧**适者生存战略**使得系统具有极好的鲁棒性,并生成仅在场景内容发生变化时才体积才增长的紧凑且可跟踪的地图,从而允许系统长时间运行。我们对从最广泛使用的公开数据集中的27个序列进行了详细的评估。ORB-SLAM与其他最先进的单目相比,SLAM该方法达到了前所未有的性能。

引言

众所周知,光束平差法提供了强大的匹配和良好的初始猜测(BA)可准确估计相机位置和稀疏几何重建[1]、[2]。这种方法长期以来被认为不能用于视觉同步定位和建图等实时应用(visual SLAM)。视觉SLAM目标是在重建环境的同时估计相机的轨迹。现在,我们知道,为了以可接受的计算成本算成本的准确结果SLAM具有以下内容的算法必须提供算法BA。

  1. 场景特征(地图点)的相应观测集中在选定帧的子集中(关键帧
  2. 随着关键帧数量的增加和复杂性的增加,其选择应避免不必要的冗余
  3. 强大的网络配置关键帧和地图点产生准确的结果,即一组分布良好的关键帧观察视差明显的地图点,并有大量的闭环匹配
  4. 非线性优化的关键帧位置和地图点位置初始估计
  5. 优化的重点是实现可扩展性
  6. 执行快速全局优化(例如位姿图)实时闭环矫正能力

BA第一次实时应用是Mouragonet等人[3]视觉里程计工作,然后是Klein和Murray[4]的ground-breaking SLAM工作称为平行跟踪和建图(PTAM)。虽然该算法仅限于小规模操作,但它为关键帧选择、特征匹配、三角形地图点、每帧相机定位和跟踪失败后的重新定位提供了简单有效的方法。不幸的是,有几个因素严重限制了它的应用闭环矫正和屏蔽处理不足、重定位视角不变性低、地图初始化需要人为干预。

在这项研究中,我们以PTAM主要思想,G?alvez-L?opez和Tard?os[5]位置识别工作,Strasdatet基于等人[6]的尺度感知闭环矫正和大规模操作中共视信息的使用[7]和[8],从零开始设计ORB-SLAM,也就是说,新单目SLAM该系统的主要贡献如下。

  1. 所有任务都具有相同的特点,包括跟踪、构图、重定位和闭环矫正。这使我们的系统更加高效、简单和可靠。我们使用它ORB特征[9]它不允许GPU实现实时性能,对视角和光线的变化具有良好的不变性。

  2. 保证了大环境实时性。由于使用了共视图,跟踪和构建图侧重于处理局部共视区域,与整个地图的大小无关。

    共视图:无向加权图。节点是关键帧。如果两个关键帧之间达到一定的共视关系,两帧将在共视图中连接到一个边缘。边缘的权重是共视地图点的数量

  3. 基于位姿图我们称之为优化实时闭环矫正本质图。它由生成树、闭环连接关系和共视图强边进行系统维护。

    生成树:当前的关键帧和父亲的关键帧,父关键帧共视程度最高的关键帧

  4. 实时相机对视角和光线具有显著的不变性重定位。这允许从跟踪失败中恢复,增强了地图的重用性。

  5. 基于模型选择的新型号鲁棒的自动化和初始化过程,允许在平面和非平面场景下创建初始地图。

  6. 选择地图点和关键帧的**适者生存战略**,在生成阶段,要求相对宽松,但在消除时要求非常严格。由于丢弃了冗余关键帧,该策略改进了跟踪鲁棒,允许系统长时间运行。

我们广泛评估了室内外环境中最流行的公共数据集,包括手持、车载和机器人序列。值得注意的是,我们实现了比最先进的直接方法更好的相机定位精度[10],直接优化像素强度,而不是特征重投影误差。我们在第一位IX-B本节讨论了基于特征的方法比直接方法更准确的可能原因。

这里介绍的闭环矫正和重定位方法是基于我们以前的工作[11]。[12]介绍了该系统的初始版本。在本文中,我们添加了初始化的方法本质图,并改进了所有相关的方法。我们还详细描述了所有的模块,并进行了详细的实验验证。

据我们所知,这是单目SLAM为了社区最可靠的解决方案,为了社区的利益,我们公开了源代码。在我们的项目网页上可以找到演示视频和代码。

相关工作

A. 位置识别

Williamset等人[13]的调查比较了几种位置识别方法,得出结论:基于外观的技术,即图像与图像的匹配,在一般环境下比地图到地图或图像到地图的方法更大。在基于外观的方法中,词袋技术[14],如概率方法FAB-MAP[15]因其高效率而脱颖而出。DBoW2[5]首次使用从BRIEF描述子[16]中获得的二进制单词向量,以及非常高效的FAST特征检测器[17]。以及目前在词袋中使用的词袋SURF[18]和SIFT[19]特征相比,这在几个数量级上减少了特征提取所需的时间。虽然该系统被证明是非常高效和鲁棒的,但由于使用不具有旋转和尺度不变性BRIEF该系统仅限于从相似的角度进行平面轨迹和闭环检测。在我们之前的工作[11]中,我们提出了一个基础DBoW2和ORB[9]字袋位置识别器。**ORB是对旋转和尺度(在一定范围内)具有不变性的二进制特征,因此是具有良好的视角不变性的快速识别器。**从10开始,我们将识别器的高召回率和鲁棒性集中在四个不同的数据上K在图像数据库中检索候选图像不到39ms(包括特征提取)。在这项研究中,我们使用改进的位置识别器,使用共视信息,并在查询数据库时返回多个假设,而不仅仅是最佳匹配。

B. 地图初始化

单目SLAM创建初始地图需要一个过程,因为深度无法从单个图像中恢复。一种解决这个问题的方法是跟踪已知结构[20]。逆深度参数化可用于过滤方法的情况下(inverse depth parameterization)[21]初始化高度的深度不确定性,希望稍后收敛到其真实位置。Engelet al.[10]最近的半密度工作采用了类似的方法,将像素深度初始化为高方差的随机值。

两个视图的初始化方法要么假设局部场景的平面[4]和[22],并使用Faugeras和Lustman[23]恢复相对相机位置或使用[23]的方法Nist计算平面和一般场景的基本矩阵[24]和[25]的五点算法需要多个解。这两种重建方法对低视差没有很好的约束。如果平面场景的所有点都靠近其中一个相机中心,就会出现双重歧义[27]。另一方面,如果你看到视差的非平面场景,你可以使用8点算法[2]来计算唯一的基本矩阵,并在没有歧义的情况下恢复相机的相对位置。

在第IV在节日期间,我们提出了一个新的基于平面场景的单应矩阵与非平面场景的基本矩阵之间的自动化方法。Torr等人[28]提出了模型选择的统计方法。基于类似的原理,我们开发了一种启发性的初始化算法,考虑了在近似退化(即平面、近平面和低视差)中选择基本矩阵的风险,并倾向于选择单应矩阵。为了安全操作,如果解决方案具有双重歧义性,我们将避免初始化,因为我们可能会选择错误的解决方案。在这种方法产生视差明显的唯一解之前,我们将延迟初始化。

C. 同时定位和构图单目

单目SLAM最初通过滤波法[20]、[21]、[29]、[30]解决。在这种方法中,滤波器处理每一帧,共同估计地图的特征位置和相机位置。其缺点是在处理几乎没有新信息的连续帧时浪费计算量,并积累线性误差。另一方面,基于关键帧的方法[3]和[4]只使用所选帧(关键帧)来估计地图,因为地图与帧速率无关,允许更高但更准确的执行成本BA优化。Strasdatet等人[31]证明,基于关键帧的技术情况下,基于关键帧的技术比滤波方法更准确。

基于关键帧最具代表性的SLAM系统可能是Klein和Murray的PTAM[4]。这是在并行线程中首次引入相机跟踪和绘图的想法,并被证明在小环境中实时增强实际应用是成功的。后来通过边缘特征、跟踪期间的旋转估计步骤和更好的重新定位方法,改进了原版[32]。PTAM通过块相关性匹配地图点FAST角点。这使得点仅用于跟踪,而不是位置识别。事实上,PTAM大闭环不会被检测到,重定位是基于关键帧低分辨率缩略图的相关性,导致视角不变性低。

Strasdatet等人[6]提出了规模单目SLAM基于前端的系统GPU上实现的光流,然后是FAST特征匹配和只运动BA,后端基于滑动窗BA。闭环矫正具有相似的约束[7个自由度(DoF)]解决位置图优化问题,可以纠正单目SLAM尺度漂移出现在中间。在这项工作中,我们采用了7自由位置图优化的闭环矫正思想,并将其应用于第一位III-D节中定义的本质图。

Strasdatet等人[7]7]PTAM前端,但只跟踪从共视图中检索到的地图。他们提出了一个双窗口优化后端,它连接到内部窗口执行BA,在有限大小的外部窗口中连续执行位姿图优化。但是,只有当外部窗口的大小大到足以包含整个闭环时,闭环矫正才有效。在我们的系统中,我们利用了使用基于共视信息的局部地图和从共视图构建位姿图的优秀思想,但将其应用于完全重新设计的前端和后端。另一个区别是,与使用特定特征进行闭环检测(SURF)不同,我们使用和跟踪以及建图相同的特征执行位置识别,获得鲁棒的帧速率重定位和闭环检测。

Pirkeret al.[33]提出了CD-SLAM,即一个非常复杂的系统,包括闭环矫正、重定位、大规模操作以及在动态环境中工作的努力。但是,没有提到地图初始化。由于缺乏公开的实现,我们无法对准确性、鲁棒性或大规模运行的能力进行比较。

Songet al.[34]的视觉里程计使用ORB特征进行跟踪,并在后端使用时间滑动窗口BA。相比之下,我们的系统更通用,因为它们没有全局重定位、闭环矫正并且它们不重用地图。它们还使用从相机到地面的已知距离来限制单目尺度漂移。

Limet等人[25],在我们提交这项工作的初步版本[12]后发表的工作,也使用相同的特性进行跟踪、建图和闭环检测。然而,BRIEF描述子的选择将系统限制为平面内的轨迹。他们的系统只跟踪最后一个关键帧的点;因此,如果重新访问之前的地点(类似于视觉里程计),地图不会被重用,并且存在无界增长的问题。在第VIII-E节中我们将我们的结果与这种方法进行定性比较。

Engelet al.[10]最近的工作被称为LSD-SLAM,可以使用直接方法(即,直接对图像像素强度进行优化)而不是对特征进行BA,来构建大规模半稠密地图。他们的结果非常令人印象深刻,因为该系统能够在没有GPU加速的情况下实时运行并构建一个半稠密地图,与基于特征的SLAM生成的稀疏输出相比,该方法在机器人方面有更多潜在的应用。然而,它们仍然需要特性用于闭环检测,并且它们的相机定位精度明显低于我们的系统和PTAM,正如我们在第VIII-B节中的实验结果所示。这一令人惊讶的结果在第IX-B节中讨论。

在直接方法和基于特征的方法之间,处于中间位置的是Forsteret等人[22]的半直接视觉里程计SVO。由于不需要在每一帧中提取特征,它们能够在高帧速率下运行,并在四旋翼中获得令人印象深刻的结果。然而,它没有执行闭环检测,并且当前的实现主要考虑向下看的相机。

最后,我们要讨论关键帧选择。文献中所有的视觉SLAM工作都认为使用所有的点和所有的帧运行BA是不可行的。Strasdatet al.[31]的工作表明,最具成本效益的方法是保留尽可能多的点,同时只保留非冗余关键帧。PTAM方法是非常谨慎地插入关键帧,以避免计算复杂性的过度增长。这种限制性的关键帧插入策略使跟踪在困难的探索条件下失败。我们的适者生存策略通过尽可能快地插入关键帧,然后删除多余的关键帧来避免额外的成本,在困难的场景中实现了前所未有的成功。

系统概述

请添加图片描述

图1

A. 特征选择

系统的主要设计思想之一是将建图和跟踪所使用的相同特征用于位置识别,实现帧速率的重定位和闭环检测。这使得我们的系统效率更高,并且避免了像以前的工作[6],[7]那样,需要从近SLAM特征中插入识别特征的深度。我们需要特征在每幅图像的提取时间远小于33毫秒,这就排除了流行的SIFT(∼300毫秒)[19],SURF(∼300毫秒)[18],或最近的A-KAZE(∼100毫秒)[35]。为了获得通用的位置识别能力,我们需要旋转不变性,这排除了BRIEF[16]和LDB[36]。

我们选择了ORB特征点,它是一种具有256位关联二进制描述子的多尺度FAST角点。它的计算和匹配速度非常快,并且对视角具有良好的不变性。这使得在系统中可以在宽基线情况下来匹配它们,从而提高BA的准确性。我们已经在[11]中展示了ORB用于位置识别的良好性能。虽然我们当前的实现使用ORB,但提出的技术并不局限于这些特征。

B. 三个线程:跟踪、局部建图和闭环矫正

我们的系统如上图所示,包含三个并行运行的线程:跟踪、局部建图和闭环矫正。

跟踪线程负责定位每一帧的相机,并决定何时插入一个新的关键帧。我们首先执行与前一帧的初始特征匹配,并使用仅运动BA优化位姿。如果跟踪失败(例如,由于遮挡或突然移动),则使用位置识别模块执行全局重定位。一旦有了相机位姿的初始估计和特征匹配,使用系统维护的关键帧共视图检索局部可见地图[见图2(a)和(b)]。然后,通过重投影方法搜索当前帧与局部地图点对应的匹配点,并使用所有的匹配关系再次优化相机位姿。最后,跟踪线程决定是否插入新的关键帧。第V节详细介绍了所有跟踪步骤。第IV节介绍了创建初始地图的新过程。

图2

**局部建图线程处理新的关键帧并执行局部BA,以实现相机位姿周围的最佳重建。**在共视图的连通关键帧中搜索新关键帧中未被匹配的ORB特征的新的对应关系,以三角化新的地图点。在生成后的一段时间后,基于跟踪过程中收集到的信息,采用了一种严格的地图点剔除策略来剔除冗余地图点来保留高质量的点。局部建图线程还负责剔除冗余关键帧。我们将在第VI节详细解释所有的局部建图步骤。

闭环矫正线程搜索每个新关键帧的闭环关系。如果检测到一个闭环,则计算一个相似变换来获取在闭环中累积的漂移。然后,将闭环的两侧对齐,并融合重复的地图点。最后,通过相似性约束[6]下的位姿图优化来实现全局一致性。主要的创新点在于,我们对本质图进行了优化,即第III-D节中解释的共视图的稀疏子图。第VII节详细解释了闭环检测和校正步骤。

我们使用在g2o[37]中实现的Levenberg–Marquardt算法来执行所有优化。在附录中,我们描述了每个优化中涉及的误差项、代价函数和变量。

C.地图点、关键帧及其选择

每个地图点 p i p_i pi存储了以下内容:

  1. 在世界坐标系下的3D位置 X w , i X_{w,i} Xw,i
  2. 地图点的观测方向 n i n_i ni,为归一化后的平均观测方向(指连接该地图点和其对应观测关键帧光心的的单位方向向量的均值)
  3. 一个具有代表性ORB描述子 D i D_i Di,与其他所有能观测到该点的关键帧中的ORB描述子相比,该描述子的汉明距离中值最小
  4. 根据ORB特征的尺度不变性获取到的可以观察到这个地图点的的最大 d m a x d_{max} dmax和最小 d m i n d_{min} dmin距离。

每个关键帧 K i K_i Ki存储了以下内容:

  1. 相机的位姿 T i w T_{iw} Tiw,这是一种刚体变换,将点从世界坐标系变换到相机坐标系;
  2. 相机内参,包括主点和焦距
  3. 在当前帧中提取的所有ORB特征,可以已经与地图点关联或不关联,如果提供了畸变模型,则其坐标为去畸变后的坐标。

地图点和关键帧是用一个宽松的策略创建的,之后一个非常严格的剔除机制负责检测冗余的关键帧和错误匹配或不可跟踪的地图点。这允许在探索过程中进行灵活的地图扩展,从而提高在恶劣条件下(例如旋转、快速移动)的跟踪鲁棒性,同时其大小在不断重访相同环境(即长期操作)时受到限制。此外,与PTAM相比,我们的地图包含的外点非常少,但代价是包含的点更少。第VI-B节和第VI-E节分别说明了地图点和关键帧的剔除程序。

D. 共视图和本质图

关键帧之间的共视信息在我们系统的多个任务中非常有用,并表示为无向加权图,如[7]所示。每个节点都是一个关键帧,如果两个关键帧共享相同地图点的观测值(至少15个),则两个关键帧之间存在一条边,边的权重 θ \theta θ为公共地图点的数量。

为了矫正闭环,我们执行了一个位姿图优化[6],该优化将闭环误差沿图进行分布。为了不包含共视图提供的所有边(可能非常密集),我们建议构建一个保留所有节点(关键帧)但不包含所有边的本质图,仍然保留产生准确结果的强网络。系统从初始关键帧以增量方式构建生成树,该生成树提供具有最少边数的共视图的连通子图。插入新的关键帧时,它将包含在树中并与共享最多地图点观测的关键帧进行链接,并且当通过剔除策略删除关键帧时,系统将更新受该关键帧影响的链接。本质图包含生成树、具有高共视关系( θ m i n = 100 \theta_{min}=100 θmin=100)的共视图的边子集和闭环边,从而形成强大的相机网络。图2显示了共视图、生成树和对应的本质图的示例。如第VIII-E节中的实验所示,在执行位姿图优化时,该解决方案是如此精确,以至于额外的全局BA优化几乎无法进一步提升精度。在第VIII-E节末尾展示了本质图的效率和 θ m i n \theta_{min} θmin的影响。

E. 基于词袋的位置识别

系统嵌入了基于DBoW2[5]的位置识别模块来实现闭环检测与重定位。视觉词汇是一个离散化的描述子空间,被称为视觉词典。视觉词典通过从大量图像中提取的ORB描述子进行离线创建。如果图像集足够通用,那么同一部视觉词典在不同的环境下也能获得很好的性能。系统增量式地构建一个数据库,其中包含一个逆向索引,该索引存储词汇表中每个视觉单词被观测到的关键帧,因此可以非常高效地查询数据库。当剔除过程删除关键帧时,数据库也会更新。

由于关键帧之间存在视觉重叠,因此在查询数据库时,可能不会存在唯一的高分关键帧。原始DBoW2考虑了这种重叠,将时间相近的图像的分数相加。这有一个限制,即不包括查看同一位置但在不同时间插入的关键帧。取而代之的是,我们将那些在共视图中连接的关键帧进行分组。此外,我们的数据库返回所有关键帧匹配项,这些关键帧匹配项的得分高于最佳得分的75%。

文献[5]报道了将词袋表示用于特征匹配的另一个好处。当我们想要计算两组ORB特征之间的对应关系时,我们可以仅对属于词汇表树中某一层级的同一节点的特征进行暴力匹配,从而加快搜索速度。在搜索匹配以三角化新点、闭环检测和重新定位时,我们使用此技巧。我们还通过方向一致性测试(详见[11])来完善对应关系,该测试丢弃了外点,确保所有对应关系的一致旋转。

自动化的地图初始化

地图初始化的目的是计算两帧之间的相对位姿来三角化一组初始的地图点。这种方法应该独立于场景(平面场景或通用场景),并且不需要人为干预来选择良好的初始化场景,即两帧之间具有显著视差。在系统中并行计算两个几何模型:适用于平面场景的单应矩阵和适应于非平面场景的基本矩阵。然后使用一种启发式方法来选择一个模型,并尝试用一种特定的方法来使用所选模型恢复相对位姿。我们的方法仅在确定两帧视角配置安全时进行初始化,检测到低视差情况和众所周知的两部分平面歧义[27]时,我们避免去初始化一个损坏的地图。我们的算法步骤如下。

  1. 查找初始的匹配关系:在当前帧 F c F_c Fc上提取ORB特征点,并且在参考帧 F r F_r Fr中搜索匹配关系 x c ↔ x r x_c \leftrightarrow x_r xcxr。如果没有找到足够的匹配关系,则重置参考帧。

  2. 并行地计算两种几何模型:在两个线程中并行地计算单应矩阵 H c r H_{cr} Hcr和基础矩阵 F c r F_{cr} Fcr

    x c = H c r x r , x c T F c r x r = 0 (1) x_c = H_{cr}x_r, x_c^TF_{cr}x_r = 0 \tag{1} xc=Hcrxr,xcTFcrxr=0(1)

    分别使用正则化DLT和八点算法,如RANSAC方案中的[2]所述。为了使两个模型的过程同质化,提前设置两个模型的迭代次数,并且在每次迭代中使用相同的点:基本矩阵使用八对点,其中四对点用于单应矩阵。在每次迭代中,我们为每个模型 M M M计算一个分数 S M S_M SM( H H H代表单应矩阵, F F F代表基本矩阵)

    S M = ∑ i ( ρ M ( d c r 2 ( x c i , x r i , M ) ) + ρ M ( d r c 2 ( x c i , x r i , M ) ) ) ρ M ( d 2 ) = { Γ − d 2 i f d 2 < T M 0 i f d 2 ≥ T M (2) S_M=\sum_{i}{(\rho_M(d_{cr}^2(x_c^i,x_r^i,M))+\rho_M(d_{rc}^2(x_c^i,x_r^i,M)))} \\ \rho_M(d^2)=\begin{cases} \Gamma-d^2 & if & d^2 < T_M \\ 0 & if & d^2 \geq T_M\end{cases} \tag{2} SM=i(ρM(dcr2(xci,xri,M))+ρM(drc2(xci,xri,M)))ρM(d2)={ Γd20ififd2<TMd2TM(2)

    式中, d c r 2 d_{cr}^2 dcr2 d r c 2 d_{rc}^2 d

相关文章