资讯详情

【论文翻译】ORB-SLAM: A Versatile and Accurate Monocular SLAM System

个人微信公众号专注于机器学习公式推导代码实现、计算机视觉、深度学习、步态识别、视觉slam、激光slam。 在这里插入图片描述

摘要

本文介绍了ORB-SLAM,基于特征的单目SLAM该系统可在大小场景和室内外环境中实时运行。该系统对复杂的剧烈运动具有鲁棒性,允许宽基线闭环和重定位,并包含完整的自动初始化。在近年来优秀算法的基础上,我们从零开始设计了一个新系统,在所有系统中SLAM在任务中使用相同的功能构图、重定位和回环。选择重建点和关键帧的适当策略具有良好的鲁棒性,并生成一个紧凑和可跟踪的地图,只有在场景内容发生变化时才会增加,允许长时间运行。我们从最流行的数据集中对27个序列进行了详细的评估。ORB-SLAM与其他最先进的单目相比SLAM与方法相比,实现了前所未有的性能。为了社区的利益,我们公开了源代码。

关键词:连续构图、定位、单目视觉、识别、定位和构图(SLAM)。

I. 介绍

(Bundle adjustment)BA由于提供了强大的匹配网络和良好的初始猜测,可以准确估计相机定位和稀疏几何重建[1]和[2]。这种方法长期以来被认为不能用于实时应用,例如VSLAM。VSLAM该系统的目标是在构建环境的同时估计相机的轨迹。现在,为了不以过高的计算成本实时获得准确的结果SLAM算法必须向BA提供以下信息。

  • 1)匹配候选图像帧(关键帧)中观测到的场景特征(地图点)
  • 2)由于关键帧数量的增加,需要筛选以避免冗余
  • 3)关键帧和点的网络配置可以产生准确的结果,即分布良好的关键帧集合有明显的视差和大量的回环匹配观测点。
  • 4)初步估计非线性优化关键帧位置和点位置
  • 5)在构建局部地图的过程中,优化的关键是获得良好的稳定性
  • 6)执行快速全局优化(如位姿图)以实时闭环回路。

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

我们基于这篇文章PTAM采用算法的主要框架Gálvez-López和Tardós提出的place recognition算法(场景/位置识别),Strasdat等人提出的scale-aware loop closing(具有规模感知的回环)算法和文献[7][8]大规模操作中共视信息的使用,一种新的单目重新设计SLAM系统ORB-SLAM,本文的贡献主要包括:

  • 1)在所有任务中使用相同的功能:跟踪、建图、重定位和回环检测。这使得我们的系统更加高效、简单和可靠。我们使用ORB它允许没有特征[9]GPU实现实时性能,为旋转和光的变化提供良好的不变性。
  • 2)算法支持广阔环境下的实时操作。由于共视图的使用,跟踪和构图集中在局部共视区,与整个地图的大小无关。
  • 3)利用本质图优化位置,实现回环检测。构建生成树,维护系统、回环检测链接和共视图的强边缘。
  • 4)算法的实时相机重定位具有明显的旋转和光不变性。这使得点跟踪丢失后可以恢复,增强了地图的重用性。
  • 5)基于模型选择的新的自动和强大的初始化过程允许创建平面和非平面场景的初始地图。
  • 6)提出了选择地图点和关键帧的适当方法。通过对关键帧和地图点的严格筛选,消除冗余信息,使特征点的跟踪具有更好的稳定性,从而提高算法的可持续可操作性。良好的筛选方法可以提高跟踪棒,放弃多余的关键帧,以加强系统的长期可操作性。

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

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

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

II. 相关工作

A. 位置识别

Williams等人[13]的调查比较了几种地方识别方法,得出结论:基于外观技术,即图像与图像的匹配,在环境中优于地图到地图或图像到地图。在基于外观的方法中,bags of words(词袋)[14]FAB-MAP[15]因其高效率而备受关注。DBoW从2[5]首次使用BRIEF描述子[16]中获得的二进制词袋,以及非常高效的FAST特征检测算法[17]。与SURF[18]和SIFT[19]到目前为止,词袋法中使用的特征提取时间至少减少了一个数量级。虽然该系统非常高效和稳定,但由于使用BRIEF,既没有旋转不变性和尺度不变性,系统只能在同一平面上运行(否则会导致尺度变化),回环检测只能从类似的角度进行。在我们之前的工作[11]中,我们提出了一个DBoW2和ORB[9]基于词袋位置识别程序。ORB它是旋转和尺度(在一定范围内)不变的二进制特征,从而产生了非常快的识别程序,对视角具有良好的不变性。我们在四个不同的数据个不同的数据集中证明了识别器的高召回率和鲁棒性K在图像数据库中检索回环不到39ms(包括特征提取)。在这项研究中,我们提出了一种改进版本的位置识别方法,使用共视信息,并在查询数据库时返回几个假设,而不仅仅是最佳匹配。

B. 地图初始化

单目SLAM创建初始地图需要一种策略,因为它不能从单个图像中恢复深度。一种解决这个问题的方法是跟踪已知结构[20]。在过滤方法的背景下,逆深度参数化[21]可以用于高度不确定性的深度初始化点,预计以后会收敛到它们的实际位置。Engel等人[10]最近的半密集工作采用了类似的方法,将像素深度初始化为高方差的随机值。

两个视图的初始化方法要么假设局部场景平面[4]、[22]并使用Faugeras和Lustman从单应矩阵恢复相对相机位置或使用[23]的方法Nistér5点算法计算模拟平面和一般场景的基本矩阵[24]和[25],但该方法存在多解问题。这两种重建方法对低视差没有很好的约束。如果平面场景的所有点都更接近其中一个相机中心,就会出现双模歧义[27]。另一方面,如果看到视差的非平面场景,可以用八点法[2]计算唯一的基础矩阵,在不模糊的情况下恢复相对相机的姿势。

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

C. 同时定位和构图单目

单目SLAM最初通过滤波[20]、[21]、[29]、[30]解决。在这种方法中,滤波器处理每一帧,共同估计地图特征位置和相机位置。其缺点是在处理连续帧图像上浪费计算资源,导致线性误差积累。另一方面,基于关键帧的方法[3]和[4]只使用少数筛选关键帧构建地图,以便更准确地构建地图BA优化,因为构建地图与帧速率无关。Strasdat等人[31]证明,在相同的计算成本下,基于关键帧的技术比滤波器更准确。

基于关键帧最具代表性的SLAM系统可能是Klein和Murray的PTAM算法[4]。它首次将相机跟踪和地图构建分为两个并行线程,并成功地用于小环境的实时增强。后来,文献[32]引入边缘特征PTAM改进了算法,在跟踪过程中增加了旋转估计步骤,实现了更好的重定位效果。由于PTAM通过图像块和FAST角度匹配只适用于特征跟踪,不适用于后期位置识别。事实上,PTAM回环不会被检测到,重定位于关键帧低分辨率缩略图的相关性,因此视角不变性较差。

Strasdat等人[6]提出了大规模目SLAM基于前端的系统GPU实现的光流算法,然后是FAST特征匹配和运动BA,后端基于滑动窗BA。回环检测问题采用相似约束(7个自由度)的位置图优化,可以纠正单目SLAM尺度漂移出现在系统中。在这项工作中,我们采用了7自由度位置图优化的回环思想,并将其应用于第三部分D节定义的本质图。

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

Pirker等人[33]提出了CD-SLAM,即一个非常完整的系统,包括回环检测、重定位、大尺度操作以及在动态环境中工作的改进。但是,没有提到地图初始化。由于缺乏公共实现,我们无法对准确性、鲁棒性或大规模功能进行比较。

Song等人[34]的视觉里程计使用ORB特征进行跟踪,并在后端使用BA滑动窗口。相比之下,我们的系统更通用,因为它们没有全局重定位、回环检测,并且地图也不能重用。他们还利用相机到地面的已知距离来限制单目SLAM算法的尺度漂移。

Lim等人在我们提交本文最初的版本[12]之后发表了论文[25],他们也采用相同的特征进行跟踪,地图构建和回环检测。但是,由于Lim等人的算法选择的BRIEF描述子不具备尺度不变性,因此其算法运行受限在平面轨迹上。他们的算法仅从上一帧关键帧开始跟踪特征点,因此访问过的地图不能重用,这样的处理方式与视觉里程计很像,存在系统无限增长的问题。我们在第三部分E小节里面与该算法进行了定性比较。

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

Forster等人[22]的半直接视觉里程计SVO介于直接方法和基于特征的方法之间。无需在每一帧中提取特征,它们就能够在高帧速率下运行,在四轴飞行器上获得令人印象深刻的结果。然而,不执行回环检测,并且当前的实现主要针对向下看的相机。

最后,我们要讨论关键帧选择。文献中所有的视觉SLAM工作都认为用所有的点和所有的帧运行BA是不可行的。Strasdat等人[31]的工作表明,最具成本效益的方法是保留尽可能多的点,同时只保留非冗余关键帧。PTAM方法非常谨慎插入关键帧避免运算量增长过大。然而,这种严格限制关键帧插入的策略在算法运行困难的情况下可能会导致追踪失败。通过尽可能快地插入关键帧,并在稍后删除多余的关键帧,我们的生存策略在困难场景中实现了前所未有的健壮性,以避免额外的成本。

III. 系统架构

A. 特征选择

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

我们选择了ORB[9],它是带方向向多尺度的FAST角点,有一个256位描述符关联。它们的计算和匹配速度非常快,同时对视点具有良好的不变性。这使我们能够将它们与宽基线相匹配,从而提高BA的准确性。我们已经在[11]中展示了ORB在位置识别方面的良好性能。虽然我们当前的实现使用ORB,但提出的技术并不局限于这些特性。

B. 三个线程: 追踪, 局部建图和回环检测

我们的系统,见图1的概述,包含了三个并行运行的线程:跟踪、局部建图和回环检测。跟踪线程负责对每一帧相机进行定位,并决定何时插入一个新的关键帧。我们首先与前一帧进行初始特征匹配,并使用运动的BA来优化位姿。如果跟踪丢失(例如,由于遮挡或突然运动),则使用位置识别模块来进行全局重定位。一旦有了对相机位姿和特征匹配的初步估计,就可以使用系统维护的关键帧的共视图来提取局部可视化地图[见图2(a)和(b)]。然后,通过重投影来搜索与局部地图点的匹配,并通过所有匹配点再次优化相机位姿。最后,跟踪线程决定是否插入一个新的关键帧。所有的跟踪步骤将在第五部分中详细解释。第四节将介绍创建初始地图的新方法。

图1.ORB-SLAM系统概述,显示跟踪、跟踪和回环检测线程执行的所有步骤。还显示了地点识别模块和地图的主要组成部分。

图2.TUM RGB-D基准[38]中fr3_long_of fice_household序列的重建和图形。(a) 关键帧(蓝色),当前相机(绿色),地图点(黑色,红色),当前局部地图点(红色)。(b) 共视图。© 生成树(绿色)和回环检测(红色)。 (d) 本质图。

局部地图构建模块负责处理新的关键帧,对周围的相机位姿进行局部BA以优化重构。在共视图已连接的关键帧中搜索新的关键帧中ORB特征的匹配点,然后三角化新的地图点。有时尽管已经创建了新的点,但基于跟踪线程过程中新收集的信息,为了保证点的高质量,可能会根据点筛选策略临时删除一些点。局部地图构建模块也负责删除冗余的关键帧。我们将在第6章详细说明局部地图构建的步骤。

对每个新的关键帧都要进行回环搜索,以确认是否形成回环。如果检测到一个回环,我们计算一个相似变换,该变换查看回环累积漂移。然后,将回环的两侧对齐,并融合重复的点。最后,在相似性约束[6]上进行位姿图优化,以实现全局一致性。主要新颖之处在于,我们对共视图(即第III-D节中解释的共视图的稀疏子图)进行了优化。第VII节详细解释了回环检测和校正步骤。

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

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

每个地图点 p i p_{i} pi​存储以下内容:

  • 1)它在世界坐标系中的三维位置 X w , i \mathbf{X}_{w, i} Xw,i​;
  • 2)视图方向 n i \mathbf{n}_{i} ni​,它是其所有视图方向的平均单位向量(连接点与观察它的关键帧的光心的射线)。
  • 3)代表性的ORB描述符 D i \mathbf{D}_{i} Di​,与其他所有能观测到该点的关键帧中ORB描述子相比,该描述子的汉明距离最小
  • 4)根据ORB特征的尺度不变性约束,观察点的距离中的最大 d max ⁡ d_{\max } dmax​和最小 d min ⁡ d_{\min} dmin​。

每个关键帧 K i K_{i} Ki​存储以下内容:

  • 1)相机姿态 T i w \mathbf{T}_{i w} Tiw​,是一种刚体变换,将点从世界变换到相机坐标系。
  • 2)相机内参,包括焦距和主点。
  • 3)从图像提取的所有ORB特征,不管其是否已经关联了地图点, 这些ORB特征点都经过畸变模型矫正过

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

D. 共视图和本质图

关键帧之间的共视信息在我们系统的一些任务中非常有用,它被表示为一个无向加权图,如论文[7]一样。每个节点是一个关键帧,如果两个关键帧共享相同的地图点(至少15个),那么它们之间就存在一条边,边的权重 θ \theta θ是共同地图点的数量。

为了矫正一个回环,我们进行了一个像论文[6]位那样位姿图的优化,优化方法延着位姿图将闭环回路的误差进行分散。为了不包括由共视图提供的所有边缘,这可能是非常密集的,我们建议建立一个本质图,保留所有的节点(关键帧),但减少边缘,仍然保留一个强大的网络,产生准确的结果。该系统从最初的关键帧开始逐步建立一棵生成树,它提供了一个边缘数量最少的连接的可视化图的子图。当插入新的关键帧时,它会包含在连接到共享最多点观察的关键帧的树中,并且当筛选策略删除某个关键帧时,系统会更新受该关键帧影响的连接。本质图包含生成树、具有高可见度( θ m i n θ_{min} θmin​ = 100)的共视图图中的边的子集,以及回环边,从而形成一个强大的相机网络。图2显示了一个可视度图、生成树和相关本质图的例子。如第VIII-E节的实验所示,在进行位姿图优化时,解决方案非常准确,以至于全局BA优化几乎不能提高解决方案。本质图的效率和 θ m i n θ_{min} θmin​的影响在第VIII-E节最后讨论。

E. 基于图像词袋模型的位置识别

系统嵌入了一个基于DBoW2[5]词袋位置识别模块,用于执行回环检测和重定位。视觉词汇只是描述空间的离散化,即视觉词典。词汇表是使用从大量图像中提取的ORB描述符离线创建的。如果图像足够通用,相同的词汇表可以用于不同的环境以获得良好的性能,如我们之前的工作[11]所示。系统以增量方式构建一个包含反向索引的数据库,该索引存储词汇表中每个可视单词的关键帧,因此可以非常高效地查询数据库。通过筛选过程删除关键帧时,数据库也会更新。

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

文献[5]中详细介绍了用于特征匹配的词袋表示的另一个好处。当我们想要计算两组ORB特征之间的对应关系时,我们可以暴力匹配视觉字典树上某一层(我们在6层里面选第2层)的相同节点(关键帧)里的特征,从而加快搜索速度。我们在搜索匹配以三角化新点时,以及在回环检测和重新位时使用此技巧。我们还通过方向一致性测试(详情参见[11])来细化对应关系,该测试丢弃了异常值,确保所有对应关系的一致旋转。

关键帧之间的共视信息在我们系统的一些任务中非常有用,它被表示为一个无向加权图,如论文[7]一样。每个节点是一个关键帧,如果两个关键帧共享相同的地图点(至少15个),那么它们之间就存在一条边,边的权重 θ \theta θ是共同地图点的数量。

IV. 地图自动初始化

地图初始化的目标是计算两个帧之间的相对姿态,以三角化一组初始地图点。该方法应独立于场景(平面或一般),并且不需要人为干预来选择良好的双视图配置,即具有显著视差的配置。我们建议并行计算两个几何模型:假设平面场景的单应矩阵和假设非平面场景的基础矩阵。然后,我们使用一种启发式方法来选择一个模型,并尝试用所选模型的特定方法恢复相对姿势。本文算法只有当两个视图之间的视差达到安全阈值时,才进行地图初始化。如果检测到低视差的情况或已知两视图模糊的情况(如论文[27]所示),则为了避免生成一个有缺陷的地图而推迟初始化。我们的算法步骤如下:

  • 1)查找初始对应关系:在当前帧 F c F_{c} Fc​中提取ORB特征(仅在最小比例),与在参考帧 F r F_{r} Fr​搜索匹配点对$\mathbf{x}{c} \longleftrightarrow \mathbf{x}{r} $。如果没有找到足够的匹配项,请重置参考帧。

  • 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) \mathbf{x}_{c}=\mathbf{H}_{c r} \mathbf{x}_{r}, \quad \mathbf{x}_{c}^{T} \mathbf{F}_{c r} \mathbf{x}_{r}=0 \tag{1} xc​=Hcr​xr​,xcT​Fcr​xr​=0(1)

    在文献[2]中详细解释了基于RANSAC的归一化DLT算法和8点算法计算原理。为了使两个模型的过程一致,两个模型的迭代次数都预先设置成一样,以及每次迭代使用的点:八个特征点用于基础矩阵,四个特征点用于单应矩阵。在每次迭代中,我们计算每个模型 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 ,  if  d 2 < T M 0 ,  if  d 2 ≥ T M (2) \begin{aligned} S_{M}=& \sum_{i}\left(\rho_{M}\left(d_{c r}^{2}\left(\mathbf{x}_{c}^{i}, \mathbf{x}_{r}^{i}, M\right)\right)\right.\\ &\left.+\rho_{M}\left(d_{r c}^{2}\left(\mathbf{x}_{c}^{i}, \mathbf{x}_{r}^{i}, M\right)\right)\right) \\ \rho_{M}\left(d^{2}\right)=&\left\{\begin{array}{lll} \Gamma-d^{2}, & \text { if } & d^{2}<T_{M} \\ 0, & \text { if } & d^{2} \geq T_{M} \end{array}\right. \end{aligned} \tag{2} SM​=ρM​(d2)=​i∑​(ρM​(dcr2​(xci​,xri​,M))+ρM​(drc2​(xci​,xri​,M))){ Γ−d2,0,​ if  if ​d2<TM​d2≥TM<

标签: 以外接传感器mq

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台