书读百遍其义自见,为了日后能方便快速回顾ORB-SLAM2的原理和思想,这里本人将论文翻译成中文母语,网上也有其他的翻译版本,诸君也可参照。本文不求诸君全信,但求无误导之嫌疑。小经验:研究源码以及修改源码之前一定要先仔细看论文(反复多看几遍,之后互为验证),不看论文容易误判,坑很大(自己想)。
我们提出的ORB-SLAM2是一个完整的SLAM系统,它支持单目、双目和RGB-D相机。它包括地图重用、闭环和重定位功能。这个系统可以实时运行在标准版的CPU上,适应于各种场景,从小的便携设备拍摄的室内环境到工业环境和城市的汽车驾驶环境。我们的后端是利用单目和双目的观测,基于BA实现的,这可以用于带有尺度的高精轨迹估计。我们的系统包括一个轻量级的定位模块,它用于非建图(已经建好,保存加载)的视觉里程计追踪。我们的系统通过地图点的匹配,可以产生零漂移定位。我们在29个流行的图像序列评估我们的系统,结果表明,我们的方法获得的精度最好,在大多数情况下,我们的系统是最精确的解决方案。我们开放源代码不仅为了促进SLAM社区,也是为在其他领域研究者的一个开箱即用的SLAM解决方案。
最近二十年,在计算机视觉和机器人领域,同时定位与建图(SLAM)已经是一个研究热点,并且最近已经引起高科技公司的注意。 SLAM技术在建立一个未知环境地图和在地图中定位传感器位置的时很关注实时性。在不同传感器设备中,摄像头是便宜的,能够提供丰富的环境信息,它能够用于鲁棒的和高精度的位置识别。因此,视觉SLAM解决方案,主要的传感器是摄像头,是目前主要的研究兴趣点。位置识别是一个关键的SLAM模块,例如对于闭环来说,在探索时,检测到返回的一个地图区域(之前见过)用于矫正累计误差,对于由于遮挡、快速运动,或系统重新初始化而导致追踪失败后相机重定位,位置识别也同样重要。
视觉SLAM可以用仅仅一个单目摄像头来实现,这种方案是最便宜的,也是最小的传感器设备。然而,由于仅用一个摄像头,深度是不能观测的(直接获得深度),这导致地图尺度和轨迹估计结果是不明的。并且,系统自举时,需要多视角或者滤波技术提供初始化地图,然而这不能从第一帧三角化获得。最后,单目SLAM还有尺度漂移、在探索运动中纯旋转可能导致失败。通过使用一个双目或RGB-D相机,全部的问题都能避免,是最可靠的视觉SLAM解决方案。
在这篇论文,我们以我们的单目ORB-SLAM [1]为基础,又提出的ORB-SLAM2有以下新的内容:1. 这是第一个开源的能同时用于单目、双目和RGB-D摄像头的SLAM系统,包括闭环、重定位、地图重用。2.我们的RGB-D实验结果表明:BA(捆集调整)的方法相比于最先进的基于ICP或者光度和深度误差最小化的方法获得的精度更高。3.通过使用近和远的双目点和单目观测,我们的双目方法比最先进的直接双目SLAM方法精度更高。4.一个轻量级的定位模式能更高效重用地图,此时建图模块是关闭的。
图1展示的示例是双目和RGB-D作为输入时ORB-SLAM2的输出结果。双目情况展示的最终轨迹和稀疏重建其图像序列来自KITTI的00号[2]。这是一个城市环境下的图像序列,有多个闭环道路,ORB-SLAM2能全部成功检测出来这些闭环。RGB-D情况展示的关键帧位姿估计所用的图像序列来自fr1_room,它是TUM的RGB-D数据集,同时,除了关键帧位姿估计,还有稠密点云,这些点云是通过关键帧估计的位姿,反投影传感器(相机)深度图,渲染出来的。注意,我们的SLAM没有执行任何像KinectFusion那样的融合或类似操作,但是良好的定义表明关键帧位姿准确性。
图1 ORB-SLAM2 处理双目和RGB-D输入去估计相机轨迹以及建立一个环境地图。这个系统能使用闭环、重定位、地图重用,这些都可以在标准CPU上运行,并有着高的精度和鲁棒性。
论文其余的章节,是这样安排的,第二节我们将讨论有关工作成果,第三节描述系统,然后在第四节展示实验评估结果,最后的结论在第五节。
在这个部分,我们讨论双目和RGB-D SLAM 的有关工作成果。我们的讨论以及在第四部分的评估仅仅关注SLAM方法。
A. 双目 SLAM
一个早期出众的双目SLAM系统是由Paz等人所做的工作[5]。在那时与其他方法相比基于有条件独立的分而治之的EKF-SLAM能够在大环境中运行。最重要的,它是第一个利用近和远点的双目SLAM(例如双目相机中由于小的视差而不可靠地估计出深度的那些点),后者用了一个参数化的反向深度[6]。他们的实践经验表明,如果深度小于40倍基线,那么这些点能被可靠的三角化。在本论文的研究工作中,我们将遵循这种区别对待近点和远点的方法策略,这将在第三节进行阐述。
大部分现代双目SLAM系统是基于关键帧[7]和执行局部区域BA优化获得可测性(能用的位姿结果)。Strasdat等人[8]的工作,执行一个联合的优化,在关键帧的内部窗口的BA(点-位姿约束),在外部窗口的位姿图(位姿位姿约束)。通过限制这些窗口大小的方法获得常数时间复杂度,付出不保证全局一致性的代价。Mei等人的RSLAM[9],使用一个路标和位姿相对表示以及执行在一个在活动区域执行相对BA,能被限制在常数时间。RSLAM能够闭合回环,它允许在回环两侧扩展活动区域,但是不能强制全局一致。最近Pire等人的S-PTAM[10]执行局部BA,然而它缺乏大的闭环。类似于这些方法,我们在局部关键帧集执行BA,以便复杂度独立于地图大小,能运行在大的环境中。然而,我们的目标是建立一个全局一致地图。当闭合一个回环,类似于RSLAM,我们的系统首先对齐两边,以便追踪能继续使用旧地图进行定位,然后执行一个位姿图优化用来最小化在回环中的累计漂移,接着是全局BA。
最近,Engel等人[11]的双目LSD-SLAM是一个半稠密直接法,它是利用最小化在高灰度的大区域光度误差实现。然而,作为一个直接法,它的性能是严重退化,这是由于不能建立模型的影响,例如像对于卷帘快门或者非朗伯反射(朗伯反射是与角度无关的漫反射)。
B. RGB-D SLAM
最早最著名的RGB-D SLAM系统之一是Newcombe等人的KinectFusion[4],这种方法融合来自传感器的深度数据到稠密容积模型,它是用ICP方法来追踪相机的位姿。这种系统被限制在小的工作空间,因为它的容积表示与闭环缺失。Whelan等人[12]的Kintinuous是能够运行在大的环境的,通过使用滚动周期缓存,并且使用位置识别和位姿优化进行闭环。
可能第一个流行的开源系统是Endres等人的RGB-D SLAM[13]。这是一个基于特征的系统,它的前端通过特征匹配和ICP计算帧间运动。后端通过来自启发式搜索限制的闭环执行位姿图优化。类似Kerl 等人[14]的DVO-SLAM后端,它优化来自视觉里程计(最小化光度和深度误差)计算的关键帧间约束的位姿图。DVO-SLAM通过在之前的全部帧启发方式进行闭环候选搜索,而不是依赖位置识别。
最近,Whelan等人[15]的ElasticFusion建立一个基于surfel的环境地图。这是一个中心地图方法,忽略位姿,用对地图的一个不严格形变执行闭环,而不是标准的位姿图优化。这个系统的细节重建和定位精度给人深刻印象,但是当前被限制在房间大小地图运行,复杂度随地图surfels数量而变化。
正如Strasdat等人提出的,在图像上提取特征,我们的ORB-SLAM2使用深度信息去合成一个双目坐标。我们系统的这种方式是不必关心输入是双目还是RGB-D。不同上文的所有方法,我们的后端是基于BA和建立一个全局一致的稀疏地图重建。因此我们的方法是轻量的,能运行在标准的CPU上。我们的目标是建立长期且全局一致定位而不是建立最多细节的稠密重建。然而,高精度的关键帧位姿和深度图融合能获得高精度局部区域动态重建,或者对部关键帧深度图进行后处理,全BA后获得精确的全场景三维模型。
用于双目和RGB-D相机ORB-SLAM2是建立在我们基于特征的单目ORB-SLAM[1]基础之上,它的主要组成总结在这里,方便读者查看。一个总体系统概要展示在图2。这个系统有三个主要的平行线程:1).追踪用于定位相机,利用每一帧,通过局部地图找到匹配特征以及最小化重投影误差(应用仅运动BA)来实现 。2).局部地图用于局部建图并优化局部地图,执行局部BA。3).闭环用于检测大的回环并通过执行位姿图优化矫正累计漂移。在位姿图优化之后,这个线程开启第四个线程执行全BA,去计算最优结构和运动解。
图2. ORB-SLAM2 由三个主要的平行线程组成:追踪、局部地图、闭环,闭环在一个闭环检测之后会开启第四个线程执行全BA。追踪线程预处理会处理双目或者RGB-D输入,因此,系统其他操作相对于输出传感器是独立的。尽管单目输入没有展示在这个图中,但是ORB-SLAM2对单目输入也是适用的,正如图1所示。
这个系统已经基于DBoW2[16]嵌入了一个位置识别模块,万一追踪失败(例如一次碰撞)、一个已经建图场景重新初始化或回环检测,位置识别模块都可工作。这个系统维护一个共视图(连接观测到共同点的任何两个关键帧)以及一个连接全部关键帧的最小生成树。这些图结构可以被用来检索局部关键帧窗口,使得追踪和局部建图操作是局部的,可以工作在大的环境,这些图结构还可以作为在闭环时执行位姿图优化的结构。
这个系统使用相同的ORB特征用于追踪、建图和位置识别任务。 这些特征对于旋转和尺度是鲁棒的,对相机自动增益、自动曝光和光照改变,表现出好的不变性。此外,ORB特征提取快,可以实时匹配,在用词袋位置识别时,有好的精度/召回性能。在这节其余部分,我们描述怎么样利用双目/深度信息,哪一个系统元素被影响。对于每一个系统模块细节描述,我们推荐读者参阅我们的单目文献[1]。
A. 单目、近双目和远双目关键点
ORB-SLAM2 作为一个基于特征的方法,对输入图像预处理,在显著的关键点位置去提取特征,展示在图2b。然后,输入图像方式是被忽略的,全部的系统运行视基于这些特征,使得系统对双目或者RGB-D传感器是独立的。我们的系统处理单目和双目关键点,会进一步区分为近点和远点。
双目关键点被三个坐标定义,xs=(uL,vL,uR),(uL,vL)是左目图像坐标,uR是右目图像的水平坐标。对于双目相机,我们在两幅图像提取ORB,我们在右图搜索匹配。假如是极限水平的双目矫正图像,这种操作能够很有效。然后,通过左目ORB坐标和右目匹配的水平坐标,我们生成双目关键点,右目匹配的水平坐标是块匹配细化拟合的亚像素。对于RGB-D相机,我们在RGB图像提取ORB特征,对于每一个特征(uL,vL),我们转化它的深度值d到虚拟的右目坐标(Strasdat等人提出):
这里fx是水平焦距,b是结构光投影器和红外相机之间的基线,我们用于Kinect和Asus Xtion的大约有8厘米。深度传感器的不确定性是被虚拟右目坐标描述。用这种方式,来自双目和RGB-D输入特征被系统其他部分等同处理。
如果一个双目关键点相关的深度低于40倍的双目/RGB-D基线,它被区分为close(近点),其他的被区分为far(远点),这在[5]中被建议使用。近关键点能可靠从一帧进行三角化,此时深度是精确的被估计,提供尺度、平移和旋转信息。另一方面,远点提供精确的旋转信息,但是较弱的尺度和平移信息。当从多个视角认为那些点是远点,我们三角化远点。
单目关键点被左目图像的两个坐标定义Xm =(uL,vL),相应的全部那些用于双目匹配的ORB,不能被找到或在RGB-D情况有一个无效的深度值。这些点仅仅从多视角进行三角化,不提供尺度信息,但是贡献于旋转和平移估计。
B. 系统自举
使用双目或RGB-D相机的主要好处之一是,由于能从仅一帧图像获取深度信息,我们不必像单目情况一样,需要从运动初始化获得一个特殊结构。在系统启动时,我们用第一帧创建一个关键帧,设置位于原点的位姿,从全部的双目关键点创建一个初始地图。
C. 单目和双目限制BA
我们的系统在追踪线程(仅运动BA)执行BA去优化相机位姿,在局部地图线程(局部BA)去优化一个局部关键帧窗口和点,在一个闭环之后优化全部关键帧和点(全BA)。在g2o[19]实施中,我们使用LM方法。
仅运动BA优化相机旋转R∈SO(3),和位置t∈R^3,最小化匹配的世界坐标3D点X^i∈R^3和关键点x^i#(.)重投影误差,无论是单目x^i#m∈R^2或是双目x^i#s∈R^3,i∈χ全部匹配数据集(这里^表示上标,#表示下标):
这里ρ是鲁棒Huber核函数,Σ是关键点尺度相关的协方差矩阵。投影函数是π #(.),单目π #m,双目π #s,被定义如下:
这里(f#x,f#y)是焦距,(c#x,c#y)是主点,b是基线,从矫正都可获得。
局部BA优化一组共视关键帧K#L以及在那些关键中看到的全部点P#L。全部其他关键帧K#F(非K#L),观测点在P#L,对成本函数有贡献,但是在优化时保持固定。定义χ#k作为在P#L的点和在关键帧的关键点k的一组匹配,优化问题是属于:
全BA是局部BA的特殊情况,在地图中的全部关键帧和点是被优化,除了固定的原点关键帧用于消除测量自由度。
D.闭环和全BA
闭环用两步去执行,首先一个闭环必须被检测和确认,第二,通过优化一个位姿图去矫正闭环。对比单目ORB-SLAM,尺度漂移或许出现[20],双目/深度信息使得尺度可观测,几何验证和位姿图优化不再要求处理尺度漂移,且基于刚体变换而不是相似变换。
在ORB-SLAM2的位姿图之后,我们已经包含一个全BA优化,获得优化解。这个优化或许非常耗时,因此我们在一个分出的线程执行它,允许系统继续创建地图和检测回环。然而,这带来了将捆集输出和当前地图状态融合的挑战。当优化在执行,如果一个新的闭环被检测到,我们终止优化并关闭闭环,这将再次开启全BA优化。当一个全BA完成,我们需要将被全BA优化的关键帧和点的更新的子集和在优化运行时插入的没有更新的关键帧和点进行融合。这视通过生成树,传播更新关键帧的矫正(例如非优化到优化位姿的变换)到非更新关键帧实现的。根据应用到非更新点的参考关键帧的矫正,非更新点被转换。
E. 关键帧插入
ORB-SLAM2遵循单眼ORB-SLAM中引入的策略,该策略非常频繁地插入关键帧,然后剔除多余的关键帧。区别远近双目点使我们能够为关键帧插入引入新的条件,这在充满挑战的环境中至关重要,在这种环境中,场景的大部分都远离立体声传感器,如图3所示。在这种环境下,我们需要有足够数量的近点来精确估计平移,因此,如果跟踪的近点的数量低于τ#t,并且此帧至少可以创建τ#c个新的近双目点,系统将插入一个新的关键帧。根据经验,我们在所有实验中都发现τ#t = 100和τ#c = 70效果很好。
F.定位模式
我们包含了一个定位模式,只要环境没有明显变化,该模式就可用于在地图良好的区域进行轻量级的长期定位在这种模式下,局部地图和闭环线程被停用,并且根据需要使用重定位的追踪来连续定位摄像机。 在此模式下,跟踪利用视觉里程计匹配和地图点匹配。 视觉里程计匹配是当前帧中的ORB与根据双目/深度信息在前一帧中创建的3D点之间的匹配。 这些匹配使定位对未建图区域具有鲁棒性,但会累积漂移。 地图点匹配可确保对现有地图进行无漂移的定位。 随附的视频中演示了此模式。
我们一直使用原始作者发表的结果和文献中的标准评估指标,在三个流行的数据集中评估了ORB-SLAM2,并将其与其他最新的SLAM系统进行了比较。 我们已经在具有16Gb RAM的Intel Core i7-4790台式计算机上运行ORB-SLAM2。 为了考虑多线程系统的不确定性,我们将每个序列运行5次,并显示中值结果以估计轨迹的准确性。 我们的开源实现包括校准标定和在所有这些数据集中运行系统的说明。
A. KITTI 数据集
KITTI数据集[2]包含在城市和高速公路环境中汽车记录的双目序列。 双目传感器的基线约为54厘米,并在10Hz下工作,校正后的分辨率为1240×376像素。 序列00、02、05、06、07和09包含闭环。 我们的ORB-SLAM2可以检测到所有闭环,并且以后可以重用其地图,但序列09除外,在闭环09中,闭环发生在序列末尾的帧很少。 表Ⅰ显示了11个训练序列的结果,这些序列发布有真实轨迹。我们与最先进的双目LSD-SLAM[11]进行对比,据我们所知,它是唯一一个显示所有序列详细结果的双目SLAM。我们使用两个不同的指标,[3]中提出的绝对平移RMSE t#abs和[2]中提出的平均相对平移t#rel和旋转r#rel误差。在大多数序列中,我们的系统均优于双目LSD-SLAM,并且总体而言,相对误差低于1%。序列01(见图3)是训练集中唯一的高速公路序列,平移误差稍差一些。由于高速和低帧速率,很少近点能被追踪,因此很难估计平移。 但是,由于可以跟踪许多远点,因此可以准确估计方向,实现每100米0.21度的误差。 图4示出了估计轨迹的一些示例。
与[1]中提出的单眼结果相比,所提出的双目版本能够处理单眼系统失败的序列01。 在此高速公路序列中,请参见图3,仅在几帧的情况下才能看到近点。 双目版本有仅从一个双目关键帧创建点的能力,在此序列中至关重要,它不会跟踪丢失。它不是在两个关键帧之间找到匹配项构成单眼延迟的初始化。而且,双目系统以米制估计地图和轨迹,并且不会受到比例漂移的影响,如图5所示。
B. EuRoC 数据集
最近的EuRoC数据集[21]包含11个双目序列,这些双目序列是从在两个不同房间和大型工业环境中飞行的微型飞行器(MAV)记录的。 双目传感器的基线为~11厘米,可提供20Hz的WVGA图像。 根据MAV的速度,照明和场景纹理,这些序列分为容易,中等和困难。 在所有序列中,MAV都会重新访问环境,并且ORB-SLAM2能够重用其地图,并在必要时关闭循环。 表Ⅱ显示ORB-SLAM2对全部序列的绝对平移RMSE,双目LSD-SLAM对比结果来自[11]。 ORB-SLAM2可以达到几厘米的定位精度,并且比双目LSD-SLAM更精确。 由于严重的运动模糊,在V2 03的某些部分中,我们的跟踪丢失了。 如[22]所示,可以使用IMU信息来处理该序列。 图6示展示了计算轨迹与真实轨迹的对比示例。
C. TUM RGB-D数据集
TUM RGB-D数据集[3]包含来自RGB-D传感器的室内序列,这些传感器分为几类,以评估在不同纹理,光照和结构条件下的对象重建和SLAM /里程计方法。我们以序列子集显示结果,其中通常会评估大多数RGB-D方法。在表III中,我们将精度与以下最新技术进行了比较:ElasticFusion [15],Kintinuous [12],DVO-SLAM [14]和RGB-D SLAM [13]。我们的方法是基于捆集调整的唯一方法,并且在大多数序列中都优于其他方法。正如我们在[1]中已经注意到的RGB-D SLAM结果,freiburg2序列的深度图具有4%的比例偏差,可能是由于校准不当所致,我们在运行中对此进行了补偿,并可以部分解释我们明显更好的结果。图7显示了四个序列从计算出的关键帧姿势反投影传感器深度图而得到的点云。书桌和海报的良好清晰度以及笔直的轮廓证明了我们方法的高精度定位。
D. 时间结果
为了完成对提出的系统的评估,我们在表IV中以三个序列显示了时序结果,这些序列具有不同的图像分辨率和传感器。 显示了每个线程任务的平均值和两个标准差范围。 由于这些序列包含一个闭环,因此完整的BA和闭环线程的某些任务仅执行一次,并且仅报告一次时间测量。每个帧的平均跟踪时间低于每个帧的相机帧速率的倒数。这意味着我们的系统能够实时工作。 由于双目图像中的ORB提取是并行的,因此可以看出,在双目V2_02的WVGA图像中提取1000个ORB特征类似于在fr3 office的单个VGA图像通道中提取相同数量的特征。
闭环关键帧的数量表现为与闭环有关的时间的参考。 虽然KITTI 07中的闭环包含更多关键帧,但室内fr3办公室构建的共视图更密集,因此闭环融合,位姿图优化和完整BA任务更加耗时。 较高密度的共视图使局部地图包含更多关键帧和点,因此局部地图跟踪和局部BA也更加耗时。
我们为单目,双目和RGB-D传感器提供了完整的SLAM系统,能够在标准CPU上实时执行重新定位,闭环并重用其地图。 如实验所示,我们专注于构建全局一致的地图,以在广泛的环境中进行可靠的长期定位。 所提出的具有系统重定位功能的定位模式可为已知环境提供一种非常健壮,零漂移和轻量级的定位方法。 此模式对于某些应用程序是有用的,例如在地图良好的空间中跟踪虚拟现实中的用户视点。
与最新技术的比较表明,ORB-SLAM2在大多数情况下都可以达到最高的精度。 在KITTI视觉里程计测试中,ORB-SLAM2是目前最佳的双目SLAM解决方案。 至关重要的是,与近年来蓬勃发展的视觉里程计相比,ORB-SLAM2在已经建图区域实现了零漂移定位。
出乎意料的是,我们的RGB-D结果表明,如果需要最精确的相机定位,则捆集调整的性能要优于直接方法或ICP,而且其优点是计算量少,不需要GPU处理实时运行。我们已经发布了系统的源代码,包括示例和说明,以便其他研究人员可以轻松使用。 就我们所知,ORB-SLAM2是第一个开源视觉SLAM系统,可以使用单目、双目、RGB-D输入。 此外,我们的源代码包含一个使用单眼相机的增强现实应用^2的示例,以展示我们解决方案的潜力。
举例来说,未来的扩展可能包括不重叠的多摄像机,鱼眼或全向摄像机支持,大尺度稠密融合,协作建图或增强的运动模糊鲁棒性。
翻译完。参考文件不再添加,可看原文。
ORB-SLAM2 论文与源码 github地址:https://github.com/raulmur/ORB_SLAM2
时至今日,ORB-SLAM3已经出来,效果更加强大,ORB-SLAM2/3来自西班牙萨拉戈萨大学(西班牙第三)实验室,它的视觉SLAM在不停深挖和拓展,并开源,值得拜读相关论文。ORB-SLAM2的实用的方式是,先全部开启三个主线程在实际环境中运行,建图,保存地图。之后,做里程计定位使用时,加载地图,即ORB-SLAM2的VO模式,此时只运行追踪线程,时间成本小,省内存,硬件成本低,精度高。
ORB-SLAM3 论文与源码 github 地址:https://github.com/UZ-SLAMLab/ORB_SLAM3
小技巧:github 仓库源码下载困难,可先添加到 码云 gitee,然后下载会比较快。