田里的小粟读ORBSLAM


        记录下个人阅读的关于SLAM的第一篇文章——ORBSLAM,方便往后学习。内容将会包括论文的主要内容,个人一些见解,以及一些疑问。第一次写博客,以后有时间会不断改进。

摘要

翻译

        这篇论文提出ORBSLAM,这是一种可以实时运行的、适用大小范围、室内外场景的基于特征法的单目SLAM系统。这个系统对剧烈抖动的鲁棒性强,可以进行大范围的闭环检测和重定位,并且可以全自动初始化。借鉴这些年的优秀算法,我们设计了一种新的系统,这个系统对跟踪、建图、重定位和闭环检测这些slam中的任务全都使用相同的特征。选择点和关键帧来重建地图的策略具有很好的鲁棒性,只有当场景内容发生改变时系统生成紧凑并且可跟踪的地图,这种系统可以长时间工作。我们在最流行的数据集的27个场景中对我们的系统进行详细的评估。对比与目前单目slam最好的算法,ORBSLAM具有非常出色的表现。(Mur-Artal说:史无前例!!)为了slam社区(的粉丝们),我们将源代码开源。
        关键字:长时间建图定位单目视觉识别SLAM
概括
        ORBSLAM——一种全局同特征、实时、大小场景、室内外都适用的、特征点法的、长时间建图的、抗抖动的、高精度、单目SLAM系统。
见解
        ORBSLAM是开源单目SLAM中的优秀算法,现在作者已经将算法扩展到双目和深度相机,新算法即ORBSLAM2
疑问
        作者的创新点是全局同特征吗?还有哪些是作者的创新点?
        答:还有如宽松创建关键帧但在保留时使用严格的策略以及许多细节的改进。

I 介绍

翻译
        众所周知,假如有一个强大的匹配网络和良好的初始化估计,BUNDLE ADJUSTMENT(BA)可以对相机位置进行精确的估计并且可以进行稀疏地图重建。但是对于实时应用,如VSLAM,BA无法长时间运行。VSLAM的目标是在估计相机轨迹的同时重建环境。现今我们已经知道要在可接受的计算成本条件下实现精准的效果,实时SLAM算法必须使用这样的BA:

  • 考虑一部分帧(关键帧),整合帧中场景特征(地图点)的观测
  • 由于复杂性随着关键帧的增加而增加,所以关键帧的选择必须可以避免不需要的冗余
  • 针对关键帧和地图点的强大网络配置来得到精准的结果,关键帧观测到的点有较大的视差并且有很多闭环匹配。
  • 为了非线性优化,对关键帧的姿态和地图点的位置有一个初始值的估计
  • 有一个聚焦于实现可测量性优化的局部地图
  • 可以实时地进行闭环来进行快速全局优化

        第一个BA的实时应用是Mouragon et. al [[3]]的视觉里程计,基于这个Klein和Murray提出突破性的SLAM算法——PTAM。PTAM适用于小尺度的场景,对关键帧选择、特征匹配、点的三角化、每一帧相机定位、追踪失败后的重定位提供了简单又高效的方法。但是很多因素限制了它的应用,这些因素包括缺少闭环、对融合的处理不够好、重定位时要求视角变化很小、需要人为进行地图启动。
这次的工作借鉴了PTAM的主要思想、借鉴了[5]中关于位置识别的工作、借鉴了[6]中可观测尺度的闭环工作、借鉴了[7][8]中对大尺度操作的共视图信息的使用方法,提出了一种新的单目SLAM系统——ORBSLAM,这次工作的主要贡献如下:

  • 对跟踪、建图、重定位和闭环使用相同的特征。这让我们的系统更加高效、简单和可靠。我们使用的是ORB特征,这种特征可以在不带GPU的设备上实时处理、对与视角和光照的变化具有较好的鲁棒性。
  • 可以在大范围的环境中实时操作。由于使用了共视 图,跟踪和建图都聚焦于局部共视区域,可以不用考虑全局的地图尺寸。
  • 基于对姿态图(文中叫Essential Graph)的优化,闭环可以实时进行。Essential Graph来源于系统维持的生成树和闭环连接以及共视图的边。
  • 对视角变化和光照变化鲁棒性较强的相机重定位可以实时进行。这允许系统从跟踪失败中恢复过来同时提升地图的利用率。
  • 一种新的自动的、鲁棒的初始化方法。这种方法基于模型选择,可以对平面和非平面场景创建初始化地图。
  • 一种合适的地图点和关键帧的选择方法。这种方法在生成地图点和关键帧时较为宽松,在剔除时很严格。这个方法可以提升跟踪的鲁棒性,同时由于冗余的关键帧被剔除使得系统可以更加长时间地工作。

        我们是使用常见的数据集对我们算法进行评估,评估范围包括室内室外环境,包括手持、车载、机器人三种情形。显而易见的是,我们比直接法得到了更为精确的定位结果。其中直接法是指直接优化光度差而不是重投影误差来处理的方法。我们在IX-B部分解释了特征法比直接法更精确的可能原因。
闭环和重定位的方法是基于我们之前的工作[11]。整个系统的初步版本在[12]中被提出。在最近的论文中,我们加入初始化方法,Essential Graph,优化之前的方法。我们详细描述了各个模块并且坐了详细的实验评估工作。
据我们所知,这是单目SLAM解决方法中最完整、最可靠的方法。为了整个社区,我们将源代码开源了。介绍视频和代码可以在我们的网站上找到。

概括
        主要是在引出ORBSLAM,首先介绍的是BA,传统的BA可以对相机位置进行精准的估计,但是无法实时运行。后来经过前人的验证,发现为满足实时性要求,BA需要有这样的限制——考虑一部分帧(关键帧)、关键帧必须可以不断剔除冗余项、需要有强大的网络通过关键帧和地图点来估计相机位置、关键帧姿态和地图点位置需要初始化、有局部地图优化、可以实时地进行闭环。
接着有BA引出最早利用BA实现实时的视觉里程计[[3]],再接着引出最早利用BA实现的实时slam——PTAM,PTAM的贡献是对关键帧选择、特征匹配、点的三角化、每一帧相机定位、追踪失败后的重定位提供了简单又高效的方法,但是具有如下缺点:只适用于小场景、缺少闭环、对融合的处理不够好、重定位时要求视角变化很小、需要人为进行地图启动。由此也引出ORBSLAM,ORBSALM的创新点有:全局同特征且ORB特征在没有GPU的情况下也可以实时处理、可以适用大场景、基于对Essential Graph的优化且闭环可以实时进行、具有对视角变化和光照变化鲁棒的实时相机重定位、自动的鲁棒的初始化方法、地图点和关键帧选择宽进严留。
见解
        宫殿不是一天就可以建成的,ORBSLAM在提出之前已经做了很多的工作、同时也借鉴了很多其他人的工作。所以做科研不可以好高骛远,因为很多东西需要积累,orbslam没有太多的理论创新,更多的是理论的应用,在应用过程中作者做了许多的优化使得算法性能很好、鲁棒性也很好。
罗马不是一天就能建成的
疑问
        闭环(loop closure,loop closing, close loop、又称回环检测)、重定位(relocalizaion)的关系是什么?
        答:闭环是指识别曾经到过的场景,将其与当前帧对应;重定位指的是当跟丢之后重新找回当前的姿态。二者的目的不同,闭环是为了解决漂移问题,提升全局精度,而重定位主要是为了恢复姿态。之所以容易混淆,可能是因为重定位通常也需要找到与之前帧的对应关系来解出姿态,而这可以通过闭环来完成。也就是说二者在匹配帧上可以共享一些算法。

II 相关工作

A 位置识别

翻译
        William等人[13]比较了位置识别的多种方法后得出,基于图像与图像匹配的方法(也即基于外观的方法)要好于地图与地图的匹配方法以及图像与地图的匹配方法。在基于外观的方法中,词袋技术,例如FAB-MAP,是十分高效的方法。DBoW2是首个由BRIEF描述子获得二进制词袋、并带有非常高效的FAST特征检测器的方法。FAST特征提取时间相对比于常用与词袋模型的SURF和SIFT特征可以减少超过一个量级。虽然这种系统非常高效和鲁棒,但是由于使用BRIEF,既没有旋转不变性也没有尺度不变性,这使得这种系统只能估计平面内的轨迹并且回环检测只能通过相似的方向。在我们之前的工作[11]中,我们提出使用ORB特征的DBoW2的词袋位置识别器。ORB是二进制特征并且具有旋转与尺度不变性(在一定范围内),因此使得识别器既非常快速又能对不同的视角保持特征的不变性。我们通过在4个不同数据集测试说明了这种识别器具有很高的召回率和鲁棒性,从1万张图片的数据库中检索处候选者(包括特征提取)所需时间少于33ms。在这次的工作中,我们使用改进版的位置识别器,利用共视图信息并且返回几个候选者而不是仅仅返回最匹配的结果。
概括
        位置识别方法中基于外观的方法表现好,基于外观的方法中基于词袋模型的方法表现好,其中代表为DBoW2,它使用FAST特征,速度快,但是由于使用BRIEF描述子,不具有尺度和方向不变性。因此引出基于ORB特征的DBoW2方法——速度快又具有尺度和方向不变性。
见解
        基于地图的匹配方法之所以差于基于外观的匹配方法是因为地图本身依靠SLAM算法生成,本身具有漂移的问题,而位置识别就是为了解决这个问题,所有基于地图的方法有点倒果为因的感觉。而基于外观的方法与SLAM算法本身没有关系,因此表现更加好。
疑问
        词袋模型如何提升处理的速度?
        词袋模型提升处理速度的原因在于K叉树等数据结构的方法来加快寻找单词的速度。

B 地图初始化

翻译
        单目SLAM由于不能从单幅图像中恢复深度信息因此需要创建一个初始地图。解决这个问题的一个方法是在初始化时跟踪一个已经结构。在滤波方法当中,地图点可以使用逆深度参数化的方法使用精度很差的深度初始估计值,并期望在之后可以收敛到它们的真值。在最近半深度的工作[10]当中,作者使用类型的方法使用方差很大的随机值来初始化像素的深度。
初始化的方法可以从两个角度来进行。其中一个角度假设局部场景平滑然后利用[23]中的方法从单应矩阵中恢复相对相机姿态,另外一个角度通过对平面和一般场景建模,计算本质矩阵,这就有了多种解决方法。两种重建方法对于视差小的情形都不能很好地收敛而且如果所有平面上的点都接近一个相机的中心时将存在二值问题。另一方面对于非平面的场景,可以使用八点法计算唯一的基础矩阵而且相对相机姿态也可以被唯一地恢复出来。
        我们在IV部分提出一种新的自动初始化方法。这种方法基于两种模型选择,对于平面场景使用单应矩阵的方法,对于非平面场景使用基础矩阵的方法。[28]提出了基于概率的模型选择方法。基于相似的原理我们提出了启发式的初始化方法,这种方法考虑了在平面、接近平面、低视差场景中基础矩阵的退化情况,而在这些场景中更倾向于选择单应矩阵的方法。在平面场景中,为了系统稳定,我们避免了由于使用不好的方法而导致的二值性问题。在这种情况下,我们将延迟初始化直到出现显著的视差可以得到唯一解的情况出现。

概括
        论述地图初始化的方法,最终作者认为可以在平面或接近平面的场景使用单应矩阵的方法,在非平面的场景使用基础矩阵的方法。
见解
        借鉴了许多前人的工作,作者也做了一些改进。
疑问
        单应矩阵的方法是怎么样的?基础矩阵的方法是怎么样的?
        单应矩阵通常描述处于共同平面上的一些点在两张图像的变换关系,自由度为8的单应矩阵可以通过4对匹配特征点解出;基础矩阵描述了非共同平面或者说一般情况下的空间点在两张图像的变换关系,一般通过8点法求出。两种方法最终都可以求得两帧图像之间相机的位姿变化。不过使用范围不一样,单应矩阵适用于空间点处于同一平面,基础矩阵适用于空间点不处与同一平面。如果处于同一平面的空间点通过基础矩阵来求解通过受到噪声的干扰比较大。所以在实际工程中一般同时计算单应矩阵和基础矩阵,然后通过比较重投影误差来确定最终使用哪种方法。

C 单目SLAM

翻译
        单目SLAM最直接的方法是使用滤波的方法。这种方法中每一帧都被滤波器用来联合估计地图特征位置和相机姿态。它的缺陷是在处理很少有新的信息的连续帧时浪费计算资源并且现行误差会不断累计。另外一种方法是基于关键帧的方法,因为建图并不需要实时进行,而这种方法通过选定的一部分帧来估计地图,所以可以使用较费计算资源但是更加精准的BA优化来处理。[31]证明了在相同的计算资源下基于关键帧的方法要比滤波的方法更加精准。
最具代表性的基于关键帧的方法可能是PTAM[[4]],它是首个提出要将相机跟踪和建图分成两个线程并行处理的工作,并且成功在小范围的环境中实现的AR的应用。[32]中使用边缘特征、在跟踪时使用旋转估计步骤和更好的重定位方法对PTAM进行了改进。PTAM的地图点通过斑块矫正来进行快速角点匹配,这使得这些地图点只能在跟踪时使用而无法在位置识别时使用。实际上PTAM无法检测大的回环,重定位是基于低分辨率的关键帧的匹配,因此要视角变化并不鲁棒。
        [6]中提出了一种大范围的单目SLAM方法,它的前端利用FAST特征匹配和仅运动的BA在GPU上利用光流法来实现,在后端使用基于滑窗的BA。回环检测利用7个自由度的姿态图优化来处理,它能够在单目SLAM中校准尺度漂移。从这项工作中我们借鉴了7个自由度姿态图优化的方法并将它应用在III-D部分中的Essential Graph定义中。
        [7]中使用了PTAM的前端,但是仅在跟踪时局部地图仅检索共视图。他们提出双窗口优化的的后端。在内层窗中进行连续的BA,在外层窗中处理姿态图。然而这样的方法中只有当外层窗大到包含整个回环,回环检测才可能高效地进行。在我们的系统中我们借鉴使用共视图的局部地图,从共视图求解姿态图的方法,但是将他们应用在重新设计的前端和后端当中。另外一个不同是,我们并非在回环检测中使用其他的特征(如SURT),而是在跟踪、建图和位置识别都使用相同的特征,这使得我们的系统可以实时地进行鲁棒的重定位和回环检测。
        [33]中提出了CD-SLAM,这是一个非常完整的的系统包含了回环检测、重定位,并且可以在动态环境中进行大尺度的运动。但是他们没有谈及如何进行初始化。由于缺少开源的实现,我们没办法在精度、鲁棒性和大尺度环境中和它进行对比。
        [34]中的视觉里程计利用ORB特征来进行跟踪并且在后端使用时序滑窗BA。但是对比来看,我们的系统更加通用,因为他们的系统没有全局重定位、回环检测和地图重利用。并且他们利用了相机到地面的已知距离来限制单目SLAM中的尺度漂移。
        [25]的工作是我们提交这次工作的先前版本[12]后提出的,它也在跟踪、建图和回环检测中使用相同的特征。但是由于使用BRIEF因此他们的系统只能估计平面内的轨迹。而且他们的系统只跟踪关键帧的最后一帧,所以当再次经过同一个环境时地图不能被重复利用(类似于视觉里程计)而且地图将无限制地增长。我们在VIII-E部分定量地对比了这种方法和我们的方法。
最近提出的LSD-SLAM[10]可以构建大尺度的半稠密地图,使用直接法而不是特征的BA。他们的的结果是非常出色的,在没有GPU加速的情况下可以实时地构建半稠密地图,这比基于特征法的SLAM构建的稀疏地图可以有更多潜在的应用。不过他们在回环检测仍然需要特征,而且他们的相机定位精度明显低于我们的系统和PTAM。我们将在VIII-B中展示实验结果并在IX-B中讨论这个实验结果。
        介于直接法和特征法之间有一种半直接的时间里程计——SVO[22],它不需要在每一帧中提取特征因此高速运行并且在四轴飞行器上得到出色的结果。然而由于没有回环检测当前的实现主要适用与往下运动的相机。
        最后我们想要讨论关键帧的选择。所有的视觉SLAM文献中都认为在所有的点和所有帧上运行BA是不可行的。[33]展示了尽可能让BA处理足够多的点的最高效的方法,但是它仅仅保留没有冗余的关键帧。PTAM中对关键帧的插入是非常谨慎的以此来保证计算复杂度不会过快地增长。这种谨慎的关键帧插入策略在复杂的环境中容易导致跟踪失败。我们的最佳方法是尽可能快速地插入关键帧然后再之后删除冗余的关键帧来降低计算成本,这种方法可以在复杂场景中依然表现不错。
概括
        这部分先是对比分析了滤波的方法和基于关键帧的方法,得出基于基于关键帧的方法在相同计算资源下表现更好的结论。之后作者分析现今存在的一些代表算法的优缺点。
        PTAM的贡献是首次提出将跟踪和建图分成两个线程并行处理,但是存在无法进行大尺度的回环检测,重定位对于视角变化不鲁棒的缺陷。
        作者从大尺度单目SLAM[6]中借鉴了7个自由度姿态图优化的方法并应用到Essential Graph定义当中。
        作者从[7]中借鉴了在共视图中局部建图、在共视图中求解位姿的方法,但是作者的方法不同点在于跟踪、建图、回环检测都使用相同的特征。
        CD-SLAM是包含回环检测、重定位的、可以在大范围环境中运行的非常完整的SLAM方法,但是他们没有谈及初始化、没有开源。
        [34]中同样使用了ORB,但是他们的方法是视觉里程计而不是SLAM
        [25]中的方法同样在跟踪、建图和回环检测中使用相同的特征,但是由于使用BRIEF,他们的系统不具有视角和方向不变性,而且不能对地图进行重利用。
        LSD-SLAM是可以在没有GPU的情况下进行实时半稠密建图的方法,效果也很出色。但是它的相机定位精准比较低。
        半直接法SVO在四轴飞行器上效果不错但是没有回环检测。
        最后作者讨论了关键帧的选择并提出自己的最佳方法是在插入是尽可能快速地插入关键帧,但是在保留时使用严格的策略。
见解
        作者对其他论文的优缺点分析是比较定位的,科研来不断向前就是在不断地发现现有工作存在的问题,并针对这些问题不断地改进。
疑问
        现有的关键帧的方法即使在地图尺度规模增大时可以较为缓慢地增长计算量,但是但地图增长时,关键帧数量还是要增加或者关键帧之间的间隔将进一步降低,这也就使得SLAM很难在很大范围的环境中进行,有没有改进的方法?
从本质来看SLAM始终估计的是相机的相对运动,以此来求出相机的位置,这种方法天生会带来不断累计误差的问题,目前存在的回环检测的方法可以一定程度降低这种误差,但是如果地图没有回环的话这种方法也并不可用。在室外条件下可用考虑加入GPS来进行定位,但是GPS的定位精度低会对系统的精度产生较大的影响。
        但是换个角度想,我们从SLAM的最终目标出发,例如SLAM应用在导航过程中。对比我们人类我们在未知环境中同样需要在大脑中存储一些地图的信息,同时我们可能并不知道我们当前所处的绝对位置,但是我们对当前的相对位置可以较为精准地估计。
        因此或许我们可以以一些显著路标构建一个路标地图,这些路标的位置可以 通过GPS来进行判断(这些路标应该是GPS信号很好的地方)并以这个路标为中心利用SLAM构建相对于这些中心的更为精准的地图。在构建关键帧时可以利用树的层级思想构建分层关键帧。由粗到细。更进一步来说,我们还可以利用已经用GPS构建的地图信息来对最终结果进行融合。

III 系统概述

A 特征选择

翻译
        我们系统的主要设计想法是在建图和跟踪时使用相同的特征,同时这些特征也将用于位置识别来实现实时地重定位和回环检测。这让我们的系统更加高效而避免了像在之前的工作[6] [7]那样需要从附近的SLAM特征中内插识别到的特征的深度。我们要求每张图片特征提取的时间低于33ms,而SIFT特征需要约300ms,SURF特征需要约300ms,最近提出的A-KAZE需要约100ms。为了获得更加通用的位置识别能力,我们要求特征具有旋转不变性,这就排除了使用BRIEF和LDB。
        我们使用的是ORB,它是带方向的多尺度FAST角点并使用256位的描述子。它们可以非常快速地计算和匹配而且具有视角不变性。这使得可以在大范围内对它们进行匹配同时可以使用更加精准的BA。我们已经在[11]中显示了ORB在位置识别任务中的优秀表现。我们当前的实现使用的是ORB,但是我们的系统不仅仅局限于使用这些特征。

概述
        在特征选择方面作者主要的思想是全局同特征来加速,同时特征选择速度较快而且具有视角不变性的ORB特征。
见解
        特征选择可以不局限于ORB,这意味这变换使用的特征也是一种可以改进的方法。
疑问

B 三个线程:跟踪、局部建图、回环检测

翻译
ORBSLAM系统总览
        我们的系统,正如上图所示,解释了三个并行运行的三个线程:跟踪、局部建图和回环检测。跟踪线程负责定位相机的位置并且决定在什么时候插入新的关键帧。我们首先和之前的帧进行特征匹配然后使用单独的运动模型BA进行优化。如果跟踪失败了(例如因为遮挡或者剧烈的抖动),位置识别模块将用于全局重定位。一旦相机位姿得到初始的估计以及完成了特征匹配,由系统维持的基于关键这共视图的局部地图将开始工作。正如下图所示:
关键帧,当前帧,地图点,当前局部地图,共视图
        接着局部地图的匹配对将使用重投影进行搜索,最终相机的位姿将使用所有的匹配对进行优化。最终所有跟踪的细节步骤将在V部分中被解释。IV部分介绍了创建初始化地图的新方法。

        局部地图将处理新的关键帧并使用局部BA在当前相机周围实现最优的地图重建。新的关键帧中未匹配的的ORB特征点将在共视图中的关键帧进行搜索匹配点并进行三角化产生新的地图点。在新的关键帧创建一段时间后,根据跟踪中获取的信息,将使用严格的策略对地图点进行筛选以此来保证留下来的地图点具有很高的质量。局部地图同样负责使用严格的策略来对新的关键帧进行筛选。我们将在VI部分详细介绍局部地图模块。

        闭环搜索将对每个新的关键帧进行检测。如果回环被检测出来,我们将计算表明回环中的尺度漂移的相似变换。然后回环中的两条边将被对准并且重复的地图点将被融合。最终基于相似性限制的姿态图优化将被用于实现全局的连续性。我们的主要创新是在优化时使用使用共视图中更加稀疏的子集——Essential Graph,这将在III-D中解释。VII部分将对回环检测和整合的细节步骤进行解释。

        我们使用在g2o中被实现的LM算法来完成所有的优化。在附录部分,我们说明了误差项、代价函数和在优化中涉及的变量。
概述
        这部分作者解释了ORBSLAM三个主要线程——跟踪、局部地图和回环检测的主要功能。跟踪主要是定位相机并且决定在什么时候插入关键帧;局部地图主要是利用重投影误差对局部地图内的相机位姿进行优化;回环检测主要是进行回环检测和融合。
见解
疑问

C 地图点,关键帧和它们的选择

翻译
每个地图点pi包含:

  • 它在相对与世界坐标的3D位置Xw,i
  • 所有观测方向(地图点和关键帧光学中心的连线)的平均单位向量ni
  • 代表性的ORB描述子Di,它是可以观测到该地图点的关键帧描述子中汉明距离最小的一个
  • 根据ORB特征的尺度不变性,可以观测到该地图点的最小距离dmin最大距离dmax

每个关键帧存储了:

  • 描述了世界坐标系地图点到相机坐标系刚体变换的相机位姿Tiw
  • 相机内参,包括了焦距和焦点坐标
  • 所有帧内的ORB特征,包括了和地图点关联的和没关联的特征,如果提供了预畸变模型那么这些坐标将是矫正过的

        地图点和关键帧的创建将使用宽松的策略,接着将使用严格的筛选机制对冗余的关键帧误匹配或者未匹配的地图点进行剔除。这种方法允许在探索时弹性地进行地图的扩展,这使得系统在恶劣条件下也能保持比较好的鲁棒性(旋转、剧烈运动)而且当重复经过一个环境时地图的尺度也将被限制在一定范围内。对比与PTAM,我们的地图异常点更加少,当然代价是包含更少的地图点。VI-B和VI-E部分将解释地图点和关键帧剔除的策略。

概述
        主要描述了地图点和关键帧里面存放的内容以及介绍了对应地图点和关键的生成和剔除采用宽生严除的策略。
见解
问题
        这样的方法中是否意味这系统只能在一定范围内的环境中运行而不可能永久地运行?

D 共视图和基本图(Essential Graph)

翻译
        关键帧的共视图信息在我们系统的多个任务中都非常有用,在[7]中它被表示为非直接的权重图。每个节点就是关键帧,如果两个关键帧可以共同观测到超过一定数量(至少15)的地图点,那么它们之间存在边,而边的权重就是它们共同观测到的地图点的数量。
        为了校准回环,我们进行姿态图优化,这个优化将中图中的闭环误差进行处理。共视图的边数量非常多,为了不包含所有共视图的边,我们构建了Essential Graph,它包含了所有的关键帧作为节点但是更少的边。而且这个网络依然可以得到精确的结果。这个系统从初始关键帧开始就逐渐地生成树,生成的树包含了共视图中相互连接的子图并且边的数量较少。当有关键帧插入时,这个树将连接这个关键帧和其他与这个关键帧有足够多相同的观测到的地图点的关键帧;当关键帧被剔除时,与这个关键帧相关联的边也将被删除。Essential Graph包含的生成树的边是共视图中相同观测到的地图点超过 θ \theta θmin=100个的边还有回环检测的边,这是个强大的网络。下图就是共视图、生成树以及Essential Graph的一个例子。
地图点,关键帧,共视图,Essential Graph
        正如VIII-E部分的实验显示,当进行姿态图优化时,我们的方法非常的精确以至于增加全BA优化很少提升实验的精度。VIII-E将说明Essential Graph的高效率以及 θ \theta θmin对结果的影响。
概述
        主要介绍了Essential Graph如何生成
见解
问题
        生成树的具体包含了哪些内容?

E 词袋模型的位置识别

翻译
        这个系统植入了基于DBoW2的位置识别词袋模型,可以用于回环检测和重定位。视觉单词就是描述空间或者说视觉词汇的离散化。词汇是由从大量图片中提取的ORB描述子所创建的。正如之前的工作所展示的[11],如果图片的数量足够多,相同的词汇可以被应用在不同的环境中还有不错的性能表现。这个系统不断扩充一个数据库,这个数据库存放了每个关键帧可以看到的视觉词汇,所以访问这个数据库将是非常高效的。当关键帧被删除时数据库也将对应地进行更新。
        因为关键帧之间存在重叠的视觉信息,因此查询数据库时将不止得到一个唯一的高分的关键帧。传统的DBoW2将重叠部分考虑进来,将在时间上接近的图片的分数加起来。但是这样将不会包含在相同位置但是在不同的时间段看到的关键帧。我们采用的方法是将在共视图中相连接的关键帧分成一个组,而且我们的数据库将返回高于最好匹配得分75%的关键帧。
        [5]中讨论了使用词袋模型进行特征匹配的另外一个好处。当我们想要计算两个ORB特征集合的关联时,我们可以仅考虑特定层级词汇树中属于相同节点的特征来进行暴力匹配,以此来加速搜索。我们在利用匹配点三角化产生新的地图点、回环检测和重定位中使用这个技巧。我们也对方向不变性测试进行了优化,丢弃外点来保证方向的可靠性,详见[11]。
概述
介绍了基于词袋模型的位置识别,以及作者一些改进的技巧。
见解
问题

IV 自动地图初始化

翻译
        地图初始化的目标是计算两帧之间的相对位姿并进行三角化得到地图点的初始值。这个方法应该对场景独立(不管是平面场景还是一般场景)而且不应该有人为的干扰,例如选择视差明显的图片。我们提出并行计算两个几何模型,单应矩阵假设用于平面场景,基础矩阵假设用于非平面场景。然后我们将使用一种启发式的方法来选择其中一种模型并计算相机的相对位姿。当另个视图的配置是合理的,检测低视差的情况,以及检测双面平面的歧义,然后才进行初始化,以此来避免产生不好的初始化地图。算法的步骤如下:

  • 1)发现初始化的关联
            在当前帧提取ORB特征(只在最合适的尺度)并在参考帧FC中寻找匹配对Xc<->Xr。如果没有发现足够的匹配对,那么重置参考帧。
  • 2)并行计算两个模型
            利用RANSAC中的直接线性变换和8点法并行计算单应矩阵Hcr和基础矩阵Fcr:
    公式1
    为了使得计算两个模型的步骤相统一,两个模型将设置相同的迭代次数,而且计算基础矩阵时使用8组匹配点,计算单应矩阵时使用4组匹配点。在每次迭代中我们将计算两种模型M(H代表单应矩阵模型,F代表基础矩阵模型)的得分SM
    公式2
    其中d2cr和d2rc代表从一帧到另一帧的对称转化误差。TM是通过95%的X2分布测试得到的拒绝的外点的阈值(TH=5.99且TF=3.84,这是假设在测量误差中有1像素的偏差)。 Γ \Gamma Γ与TH相等以使得当在内点区域有相同的d时两个模型的得分相同,这也是为了使得两个模型的处理更加一致。我们将确保单应矩阵和基础矩阵模型可以得到较高的分数,如果没有足够的内点来确定选择哪个模型,我们将重新进行第一步。
  • 3)模型选择
            如果场景是平面的或者接近平面的或者视差很小,那么将使用单应矩阵的方法。而基础矩阵虽然可以计算,但是从矩阵矩阵恢复相机的运动会得到错误的结果。我们在平面场景中使用单应矩阵的方法进行初始化而如果检测到视差很小的情况就不进行初始化。另一方面,对于视差大想非平面场景只可以用基础矩阵来进行解释,虽然如果匹配点的一部分是在平面中或者他们具有很小的视差也可以计算处单应矩阵。我们发现可以使用启发式的方法来计算
    公式3
    如果RH>0.45(这种情况对应平面中或者视差小的情况),我们选择使用单应矩阵的方法;否则,我们将使用基础矩阵的方法。
  • 4)从运动模型中进行动作和结构恢复
            一旦模型被选定,我们将使用相关联的运动假设。在较为理想的情况下我们使用[23]的方法考虑8中运动假设。这个方法通过一个测试来选择有效的方法。但是如果是视差小的情况由于地图点可能在相机前面或者后面,这使得测试可能将得到错误的结果。我们提出的方法是直接对这8个假设进行三角化,然后判断哪种解决方法可以看到最多都在相机前面的重投影误差低的地图点。如果没有一个明显胜出的解决方法,我们不进行初始化并且返回第一步。这种方法将消除我们方法的歧义并使得我们的初始化读低视差和双歧义值的情况更加鲁棒,这也是我们方法鲁棒性的关键。
            在基础矩阵的方法中,我们通过内参举着将它转化为本质矩阵:
    公式4
    然后我们将使用[2]中介绍的奇异值分解的方法恢复处4个运动假设。我们对4个假设进行三角化并如上面所做选择一种假设。
  • BA
            最后我们将使用全BA对初始化进行优化,详情见附录。
            一个极具挑战性的室外场景的初始化例子NewCollege robot 序列[23]展示在图3中。从中可以看到PTAM和LSD-SLAM都从平面场景中进行初始化,然而我们的场景一直等到有足够的视差了才进行初始化并使用基础矩阵的模型得到正确的初始化结果。
    图3
    概述
            主要介绍了ORBSLAM初始化的方法,包括了使用特征匹配,然后并行计算单应矩阵模型和基础矩阵模型的得分,进而选择一种模型作为初始化的方法,最后根据选择的模型恢复中初始状态。本文主要的贡献是初始化的选取策略较为合理可以应对较为复杂的环境。
    见解
    疑问

V 跟踪

翻译
        在这部分我们主要介绍了对相机中每一帧进行处理的跟踪模块。相机位姿优化在包括纯运动BA在内的很多步骤中被提及,详情见附录。

  • A ORB提取
            我们使用1.2的尺度因子从8个尺度层次中提取FAST角点。对于分辨率为512×384到752×480的图片我们提取1000个角点,对于更高的分辨率如KITTI的1241*376的分辨率,我们提取2000个角点。为了保证角点可以更加均匀地分布在各个区域,我们在各个层级上画了网格图,并要求每个网格图的子方块中至少要有5个角点。然后我们将检测每个子方块的角点,如果角点太少我们将调整检测器的阈值。如果一些字块中没有角点每个字块中角点的数量将同样做出调整。然后将用调整后的FAST角点来计算ORB描述子的方向。ORB描述子将用于特征匹配,而不是像PTAM那样使用块的关联和进行搜索。

  • B 从前面的帧中对姿态进行初始地估计
             如果最后一帧的跟踪成功,我们将使用速度不变的运动模型来预测相机姿态并利用在最后一帧观测到的地图点之间的关联匹配来搜索新帧中匹配点的位置。如果没有足够的匹配特征点,我们将在上一帧中扩大搜索范围。然后姿态图将跟踪已知的关联进行优化。

  • C 初始姿态图估计 VS 全局重定位
             如果跟踪失败了,并将帧转化成词袋中的单词并在关键帧数据库中进行检索候选关键帧来进行全局重定位。正如III-E解释的那样,我们将使用ORB计算每一帧关键帧对应地图点之间的关联。然后我们将对每一关键帧分别使用RANSAC迭代并且使用PnP的方法来求解相机姿态。如果我们发现相机姿态可以对应足够多的内点,我们将利用候选关键帧中更多的匹配点对应的指导信息来优化位姿。最后如果有足够的内点支持,那么相机的位姿将再次被优化。

  • D 跟踪局部地图
             一旦我们对相机姿态有一个估计并且有特征匹配初始的集合,我们可以将地图点投影到帧上这样就可以获得更多的匹配点。为了限制大地图的计算量,我们仅在局部地图中进行投影。局部地图包含了和当前帧共享地图点关键帧集合K1以及在共视图内和关键帧相邻的帧的集合K2。具有地图有一个属于K1的参考帧Kref,它和当前帧共享最多的地图点。在当前帧,每一个在K1和K2的地图点将被搜索:

    • 计算地图点在当前帧的投影x。如果超过图形的边界则丢弃
    • 计算当前视角方向v和地图点平均视角方向n的夹角n,如果v*n<cos(60度)则丢弃
    • 计算地图点到相机中心点的距离d,如果d不属于[dmin,dmax],则丢弃
    • 通过比率d/dminZ计算帧的尺度
    • 在尚未匹配的ORB特征中,在预测的尺度下,在接近x的地方,对地图点的最佳匹配,计算地图点的代表性描述子
              相机位姿最终将用所有在帧中发现的地图点进行优化。
  • E 选择新的关键帧
            最后一步就是决定是否将当前帧作为关键帧。由于在局部地图中有一个筛选关键帧的机制,我们在这里将尽可能快速地插入关键帧,因为这样将使得跟踪对于富有挑战性的相机运动尤其是旋转有更强的鲁棒性。为了插入新的关键帧,必须满足以下条件:

    • 1)末尾必须超过20帧没有进行全局重定位
    • 2)局部地图没有工作或者已经超过20帧没有插入关键帧
    • 3)当前帧至少跟踪了50个地图点
    • 4)当前帧跟踪的地图点栈参考帧地图点的比例不能超过90%
              不像在PTAM中使用和其他关键帧的距离来插入新的关键帧,我们提出四个最小的视觉变化也是是条件4。条件1确保了好的重定位条件3确保了好的跟踪。如果插入关键帧时局部地图正在工作(也就是条件2),这个信号将用于停止局部BA,这样就可以尽可能快速地插入关键帧。

概述
        跟踪模块主要是在处理新的帧并估计相机相对位姿变换并且决定是否插入新的关键帧
见解
疑问
        跟踪局部地图的原理还不是很明白?

VI 局部地图

翻译
        在这部分我们描述了局部地图对每一个新的关键帧处理的局部地图的步骤。

  • A 关键帧插入
            一开始我们更新共视图是通过将关键帧Ki当做新的节点并更新在局部地图中各个关键帧之间的边。然后我们更新生成树中Ki和与它有最多相同地图点的关键帧。然后我们计算代表这些关键帧的词袋模型并通过数据关联来三角化产生新的地图点。

  • B 最近地图点剔除
            为了保证可以用地图点来优化地图,在创建3个关键帧之后必须让这些地图点通过一个严格的测试,以此来确保它们可以被跟踪以及没有因为错误的数据关联而错误地进行三角化。地图点必须满足以下两个条件:

    • 1)跟踪线程必须在25%以上预测可以观测到的关键帧中看到这些地图点
    • 2)如果一个新的关键帧被创建,那么地图点至少要可以被3个以上关键帧观测到
              一旦地图点被创建,只有当少于3个关键帧可以观测到它的情况下才可以删除它。这可能发生在剔除关键帧或者局部BA剔除外点的时候。这种策略让我们的地图包含更少的外点。
  • C 新的地图点创建
            新的地图点通过在共视图中相互关联的关键帧之间ORB特征匹配来创建。对应在关键帧Ki中的ORB特征,我们将在其他关键帧搜索尚未匹配的特征点。匹配正如III-E做的那样,如果不满足限制条件匹配将被删除。ORB匹配对可以进行三角化,为了接受新的地图点,两个相机中地图点都具有正的深度,视差,重投影误差和尺度不变性这些条件都将被检查。开始时地图点只可以被两个关键帧观测到但是它和其他关键帧的相互匹配因此可以投影到相关联的关键帧中。V-D部分详细了这种关联。

  • D 局部BA
            局部BA优化当前处理的关键帧Ki以及在共视图中可这个关键帧相互关联的其他关键帧,以及这些关键帧所有看到的地图点。所有可以观测到这些地图点但是没有和当前关键帧相连接的关键帧被被当做不变值来进行处理。被标记为外点的观测将在优化的中间和最后被删除。附录部分详细讨论了优化部分。

  • E 局部关键帧剔除
            为了维持一个小型的重建,局部地图尝试检测冗余的关键帧并删除它们。这将有利于当关键这数量增长时BA的复杂性不会增加那么快,而且由于只有当视觉信息发生变化时关键帧的数量才会增加这就使得系统可以长时间工作。我们删除了那些90%的地图点都可以被其他关键帧在相同或更加合适的尺度观测到的关键帧。尺度条件确保维持的关键帧是被精准测量的。这个方法是受到了[24]的启发,这篇文章中在改变检测后有删除关键帧的操作。

概述

描述了对新的关键帧的处理以及对地图点的处理

VII 闭环(LOOP CLOSING)

翻译
        回环检测线程对局部地图中的最后一个关键帧进行检测和闭环。

  • A 回环候选检测
            一开始我们计算词袋模型向量Ki和它在共视图的邻居( θ \theta θmin=30)的相似性并且优化它的最小分数smin。然后我们在识别数据库中查找并删除所有分数低于smin的关键帧。这和DBoW2中正则化得分来增强鲁棒性的原理类似,不过DBoW2利用前一张图像的信息,我们这里利用共视图信息。接着所有直接和Ki相连接的关键帧被删除。为了接受回环候选帧,我们必须连续地检测三个回环候选帧。如果有几个地方和Ki外观很像将会出现多个回环候选者。
  • B 计算相似性变化
            在单目SLAM中将存在7个自由度,包括三个平移维度,三个旋转维度,一个尺度因子。因此为了闭环我们需要计算当前关键帧Ki和回环关键帧Kl之间的相似度变换,它将告诉我们回环累计的误差。相似性的计算也将作为回环的几何验证。
            根据在III-E部分解释的那样,我们首先计算当前帧和回环关键帧的地图点的ORB特征关联。对于回环候选者我们有3D到3D的关联。我们有选择的使用RANSAC迭代来对候选者进行处理,并利用[42]中的Horn方法来找到相似度变换。如果我们用足够的内点找到相似性变换Sil,我们将对它进行优化并将它看做更多关联的指导数据。如果Sil有足够多的内点支持并且回环Kl被接受,我们将对它再次进行优化。
  • C 回环融合
            回环校准的第一步是融合重复的地图点和在将和回环建立联系的共视图中插入新的边。一开始当前的关键帧姿态Tiw将使用相似变换Sil来进行校准之后校准信息被传播到相邻的关键帧以此来整合变换信息,这样回环的边就可以被融合。所有在回环关键帧被看到的地图点和它相邻的关键帧将被投影到Ki以及它的相邻关键帧,匹配信息将在投影区域的附近进行搜索(正如V-D说的那样)。所有匹配的地图点和那些在计算Sil时的内点将被融合。所有相关联的关键帧将在共视图中更新它们的边。
  • D Esssential Graph优化
            为了高效地进行闭环,正如III-D部分所示,我们将使用Essential Graph来对姿态图进行优化,Essential Graph将描述在图中的回环误差。优化将通过相似变换和校准尺度漂移。附录中详细描述了误差项和代价函数。每个地图点将根据观察到它的关键帧进行校准。

VIII 实验

翻译
        我们在NewCollege机器人序列上测试了我们系统的整体性能;我们在16个手持TUM RGB-D序列中评估了系统的定位精度、重定位和长时运行的能力;在10个车载室外序列KITTI上评估系统在大尺度范围的实时性、定位精度和姿态图优化的效率。
        我们的系统可以实时地运行。我们实验的硬件环境是i7-4700MQ(4核心,2.4GHz)以及8GB的内存。ORB-SLAM有三个主要的线程,它可以在ROS或者其他操作系统上并行地运行,这可能会使得结果有一定的随机性。出于这个原因,我们将在多次运行后取结果的中值。

  • A NewCollege数据集上系统的表现
            NewCollege数据集包含了在校园和邻近的公园机器人移动的2.2公里的序列。拍摄时使用20帧分辨率为512*382分辨率的立体相机拍摄。它包含了几个回环以及快速旋转使得对单目SLAM机具挑战性。据我们所知,目前在学术上没有可以在整个序列完整运行的单目SLAM系统。[7]中的工作尽管可以进行回环和在大尺度的环境中运行,但是只能在这个数据集的少数序列运行单目算法。
            我们在图4中展示了使用内点进行回环检测的例子。
    图4
    图5展示了回环前后地图的重建效果,红色表示局部地图,局部地图在回环检测后扩展成为回环检测的两边。
    图5
    图6展示了在实时处理所有序列后的地图。在右边的大回环没有很少的融合因为它是按照相反的方向运行的,位置识别器不能发现回环检测。
    图6
            我们已经统计了实验中各个线程花费的时间。表1展示了跟踪和局部地图线程的结果。跟踪线程以25-30Hz的速度在进行,在局部地图中跟踪是跟踪线程中最花费计算资源的任务。可以通过限制局部地图中关键帧的数量来减小这部分花费的时间。在局部地图线程最花费计算资源的任务是局部BA。如果系统在已经建好图的环境中运行局部BA的时间将会变化,因为在探索时插入关键帧会打断局部BA。在不需要关键帧的局部BA处理大量的迭代。
    表1
    表二展示了6个回环检测的每一个。可以看到回环检测如何使得关键帧的数量呈现亚线性增长。这是因为数据库的高效率查找。这种方法仅比较图片中共同的单词。我们的稀疏图Essential Graph数量大概是关键帧的5倍。
    表2
  • B TUM RGBD定位精度实验
            TUM RGBD是一个评估相机定位精度的优秀数据集。它的真值通过额外的运动传感器采集。我们已经将不适合纯单目SLAM的序列去掉,因为这些序列包含了很大的旋转,没有纹理或者没有动作。
            我们和新的半直接法的半稠密的LSD-SLAM和PTAM对比。我们也和在网上公布的RGBD-SLAM的轨迹做对比。为了用真值比较ORB-SLAM,LSD-SLAM和PTAM,由于尺度是未知的,我们对这些算法产生的轨迹做相同的变换。对应RGBD-SLAM的情况,我们使用刚体变换来调整轨迹,同样回去检测尺度是否被正确恢复了。LSD-SLAM使用随机深度值来初始化并且要花时间进行收敛,因此我们在和真值比较时去掉了前面的10个关键帧。对于PTAM我们手动选择两个帧来进行比较好的初始化。表3展示了16个序列运行5次的中值结果。
    表3
            可以看到除了fr3_nstr_tex_far外,ORB-SLAM可以处理剩下所有的序列。这是一个平面的场景,相机的轨迹对于平面来说会存在两个解,[27]解释了这种双歧义。我们的初始化方法检测出这种歧义并拒绝进行初始化。PTAM初始化有时会选择正确的解有时会选择误差无法接受的错误的解。我们没有发现LSD-SLAM对这个序列会有双解的歧义,但是LSD-SLAM对这个序列的误差很大。对于其他剩下的序列,PTAM和LSD-SLAM都比不上我们的方法,前者跟丢了8个序列,后者跟丢了3个序列。在定位精度上ORB-SLAM和PTAM差不多,但是当检测到大的回环时ORB-SLAM的精度要高于PTAM如fr3_nostructure_texture_near_withloop(fr3_nstr_tex_near)。一个令人吃惊的结果是PTAM和ORB-SLAM的精度都要比LSD-SLAM和RGBD-SLAM要高。一个可能的原因是他们将地图优化退化为姿态图优化,这样传感器的测量数据将会被丢弃;而我们使用BA来通过传感器测量的数据联合优化相机位姿和地图,而这是SFM的黄金算法。我们将在IX-B部分进一步讨论这个结果。另外一个有趣的现象是LSD-SLAM和我们的系统相比对于运动的物体鲁棒性更差,如序列fr2_desk_with_person和fr3_walking_xyz。
            我们注意到RGBD-SLAM处理fr2序列时存在一个尺度的偏差,因为融合7个自由度的轨迹将可以减小误差。最后应该注意到[10]中提到PTAM处理fr2_xyz时精度低于LSD-SLAM,但是这篇论文没有给出实现这个结果的详细细节,我们没办法复现这个结果。
  • C TUM RGBD上的重定位实验
            我们在TUM RGBD上进行了两个重定位实验。在第一个实验中我们用序列fr2_xyz的前30秒并对接下来的帧都使用全局重定位并评估预测的姿态图的精确度。作为对比我们对PTAM进行相同的实验。图7展示了用于创建初始化地图的关键帧、从定位帧的姿态、以及这些帧的真值。可以发现PTAM只有当关键帧的变换非常小时才可以进行重定位。表IV展示了召回率以及与真值对比的误差。ORB-SLAM比PTAM可以更加精准地重定位2倍多的帧。在第二个实验中我们使用fr3_sitting_xyz序列来创建初始化地图然后尝试从fr3_walking_xyz序列中进行重定位。这是一个具有挑战性的实验因为有人在这些场景中走动而造成很大的遮挡。正如表IV所示,PTAM不能发现重定位而我们的系统可以对78%的帧进行重定位。图8展示了我们的系统在进行这些富有挑战性的重定位的实验时的一些例子。
    表IV
    图8
  • D 在TUM RGBD上进行长时间的实验
            先前的实验显示我们的系统可以从非常不同的视角中定位地图并且对适度的动态变化有一定的鲁棒性。这个性质加上我们的关键帧剔除策略让我们的系统可以在视角不同,具有动态变化的环境中长时间地运行。
            在完全稳定的场景中我们的系统即使相机看场景的视角不同我们的系统也可以将关键帧的数量限制在一定范围内。我们的解释是在93秒的场景中相机一直看到了桌子同时在处理轨迹所以视角是一直在变化的。在图9我们比较了PTAM和我们系统中关键帧的进行情况。可以看到PTAM总是在插入关键帧而我们的机制是剔除冗余的关键帧来限制关键帧的数量。
    图9
             在一个稳定不变的场景中长时间的工作应该是任何SLAM系统的要求,但是我们更关心的是在动态变化的情况下系统的表现。我们通过以下连续动态序列来测试我们的系统在动态变化的环境中的表现:fr3中的sitting_xyz,sitting_halfsphere,sitting_rpy,walking_xyz,walking_halfsphere以及walking_rpy。所有的序列中相机聚焦与相同的书桌但是有一些物体会发生变化比如当有人在里面运动时。图10(a)展示了地图中关键帧数量的变化;图10b展示了每一个关键帧的创建和销毁,它表明了关键帧可以在地图中存在多久。可以看到在前面两个序列中地图的尺度在不断地增长因为所有看到的视图都是第一次看到。通过图10b我们看到头两个序列中创建的关键帧在整个实验中一直存在地图中。在序列sitting_rpy和walking_xyz中地图尺度并没有增长因为已经创建的地图已经可以很好地解释当前的场景。作为对比,在最后两个序列中,更多的序列被创建了表明场景中一些新奇的地方因此可能存在的动态变化而不具有代表性。最后图10c显示的是根据关键帧存活的时间而构建的关键帧的直方图。可以看到大多数的关键帧在剔除程序中被剔除只有少部分的关键帧存活在整个实验的结束。一方面,这表明我们的系统有一个非常宽松的关键帧生成策略,这对于在探索时剧烈的运动处理是非常有帮助的。另一方面,系统最终能够选择很少的具有代表性的关键帧。
    图10a
    图10b
    图10c

         在长时间运行的实验中表明了我们的地图将随着场景规模的增长而扩大而不是随着时间的增加而增大,而且它能够存储对于一些场景理解的任务会很有帮助。

  • 在KITTI上的大尺度、大回环检测

         KITTI上包含了11个车载居民区的序列,真值由GPS和雷达扫描器获得。这对于单目SLAM是一个非常具有挑战性的数据集,它存在快速的旋转、带有大量树叶的区域这让数据关联很难生效、而且具有相对较高的汽车速度,记录的帧率为10帧。我们的系统除了很少有可跟踪物体的高速路场景序列,其他序列都可以实时地进行处理。序列00,02,05,06,07,09包含了回环这也让我们系统正确检测了出来。序列09只在少数序列中存在回环,我们的系统不能总是检测出回环。
         图11和12展示了我们的轨迹和真值的对比。正如在TUM RGBD数据集那样,我们根据真值对我们的轨迹做了相似变换。图11和12展示了在序列00,05,06,07和08上和[25]的方法对比的结果。ORB-SLAM除了在序列8由于漂移导致跟踪失败外,其他序列都有更高的精度。
图11
图12
         表V展示了在每一个序列上执行了5次得到的中值。我们也使用相对地图尺寸的相对误差,我们系统平均的相对误差大概是1%,最好的是序列03误差是0.3%,最差是序列08误差是5%。在序列08中没有回环而导致了累计误差比较大。
表V
         在实验中我们也研究了加入20次迭代的全局BA会对结果有怎样的提升,细节见附录。我们可以看到对于有回环的场景全局BA可以提升定位的精度,但是对于开环的场景全局BA甚至会降低精度,这意味这我们的系统已经达到足够高的精度了。我们的系统提供了精度的特征匹配,强大的相机网络以及初始化值,这样全局BA很快就收敛了。
         最后我们想要展示回环的效果以及 θ \theta θmin的影响。我们在一个非常长的在末尾带有回环检测的09序列进行测试,使用两中不同的回环策略。在表VI展示了关键帧的RMSE以及不同的方法花费的时间。包含4种情况:不带回环;直接使用全局BA(20或100次迭代);仅使用姿态图优化(对不同的边进行10次迭代);利用姿态图优化后进行全局BA。结果清晰地表明了在回环前结果和真值相差较远;而且BA存在收敛性问题。另一方面Essential Graph展示了更快的收敛和更加精确的结果。可以看到 θ \theta θmin的选择对精度没有太大的影响但是会影响处理的时间。姿态图优化后使用BA来优化能轻微地提升精度但同时也增加了处理时间。
表VI
图13

结论与讨论

翻译

  • A 结论
            我们提出一种新的单目SLAM方法并且详细描述了它的各个模块以及在公开数据集上进行评估。我们的系统可以处理室内外、来自汽车、机器人、手持运动的场景。我们系统在室内的精度小于1cm在室外的精度为几米(如果将生成的轨迹和真值进行对齐的话)。
            目前PTAM被认为是实时单目SLAM中精度最高的系统。这并不令人意外,因为PTAM使用的BA方法被认为是SFM问题的黄金解决方法。PTAM以及[3]中的主要贡献是为机器人SLAM社区建立理论体系并且PTAM可以实时运行。我们的贡献时扩展了PTAM难以处理的环境。为了达到这个目的,我们不仅创新地设计了新的单目SLAM系统,并且整合了很多近些年来的优秀工作,如[5]中的回环检测、[6][7]中的闭环和共视图、[37]中g2o的优化框架、[9]中的ORB特征。据我们所知,目前没有其他的系统可以在大量不同的场景中取得这样的精度。因此我们的系统是当前最可靠和最完整的单目SLAM系统。我们的创新还在于我们对关键帧的创建和删除,宽松创建,严格筛选留下。弹性的地图扩展对于处理恶劣的环境是非常重要的,例如对于纯旋转或者快速运动来说。当对相同的环境进行处理时,只有当场景的内容发生变化地图的尺度才会增加,地图存储了不同外观的历史信息。有趣的长期建图结果可以被提取用来分析这个结果。
            最后我们证明ORB特征可以应对剧烈视角变化的场景识别。而且它们可以快速提取和匹配以满足实时跟踪和建图的任务。
  • B 稀疏/基于特征 VS 稠密/直接 方法
            最近的单目SLAM方法例如DTAM和LSD-SLAM能够对环境进行稠密或者半稠密的建图,而且定位是通过像素光度来进行的。直接法不需要提取特征因此避免了误匹配的问题。它们对于模糊、弱纹理、平滑场景(如沥青路)更加鲁棒。它们构建的更加稠密的地图相对比与我们和PTAM生成的稀疏地图对应相机定位会更加有用。

        然而直接法也有它的缺陷。首先,这些方法中假设的平面反射模型在真实场景中会带来一些问题。光度连续的条件使得匹配的范围将比特征法更加小。这对于要求使用基线观测来减小深度不确定性的重建精度会有比较大的影响。如果没有准确地建模,直接法很容易受到果冻效应、自动增益和自动曝光的影响。最后因为直接法非常消耗计算资源,DTAM中地图尺度将不断增大;LSD-SLAM中将地图优化退化成姿态图优化而丢弃了很多传感器的测量值。

        作为对比特征法由于特征对于视角和光度变换有比较好的鲁棒性,它可以在更大的基线上匹配特征。BA联合优化相机姿态图和传感器数据。对于SFM,[46]已经指出基于特征法对比于直接法的优势。这次的工作中我们也为特征法精度更高提供了实验证据。我们认为基于特征法的单目SLAM融合了前面两者的优势。

  • C 未来工作

        我们系统的精度可以通过增加跟踪时相关联的地图点来提升。这些点中没有足够的视差而且我们的系统不会将它包含在地图中,但是它对应相机旋转运动的处理是非常有帮助的。
        另外一个可能的方向是升级我们的离散地图成为更加稠密更加有用的地图。多亏了特征选择,关键帧包含了高精度的姿态以及共视图中丰富的信息。因此ORB-SLAM可以用于初始化,这样稠密而精确的地图将被构建。这些方法的初步工作在[47]中被提及。

附录 非线性优化

  • BA
            3D位置的地图点Xw,j以及关键帧位姿Tiw;w代表世界参考帧,这些也通过最小化重投影误差来进行优化。匹配的关键点xi,j。关键帧i上观测到地图点j的误差项如下
    公式5
    其中投影函数为
    公式6
    其中Riw是Tiw的旋转矩阵,tiw是Tiw的平移矩阵。(fi,u,fi,v)和(ci,u,ci,v)是相对于相机i的焦距和焦点。最小化的代价函数如下:
    公式7
    其中 ρ \rho ρh表示Huber鲁棒代价函数, Ω \Omega Ωi,j= σ \sigma σ2i,jI2*2表示关键点被检测的尺度的协方差矩阵。在全局BA中我们优化了除第一个关键帧外的所有关键帧和地图点。在局部BA中局部地图的地图点被优化,而关键帧的子集被固定。在姿态图优化中或者说纯运动BA中,所有的地图点被固定只有相机位姿被优化。

  • 基于Sim(3)的姿态图优化
            给出一个双边的姿态图,我们定义误差如下
    公式8
    Si,j是指在姿态图优化前将尺度因子设置为1的两个关键帧之间的Sim2变换。在回环检测的情况下相对变换使用Horn的方法来计算相对变换。logSim3是对应一个正切空间,所以误差项是一个7个自由度的向量。姿态图优化的代价函数是
    公式9
    Λ \Lambda Λi,j是边的信息矩阵,我们设置为密度。我们将回环检测改造成7个自由度的。虽然这种方法和全局BA具有相似的复杂度,但是我们通过实验证明这种方法比BA更快而且更加容易收敛。

  • 相对Sim(3)优化
    给定在关键帧1和2之间的n个匹配对,i-》j(关键点和它们的3D地图点),我们想要优化相对Sim(3)变换S12,这就是要最小化两张图像的重投影误差
    公式10
    代价函数为
    公式11
    其中 Ω \Omega Ω1,i Ω \Omega Ω2,i是和尺度相关联的协方差矩阵,在这个尺度下图片1和图片2 的关键点被检测到。在这个优化中地图点是被固定的。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值