摘要:前端
ORB-SLAM2是基于单目,双目和RGB-D相机的一套完整的SLAM方案。它可以实现地图重用,回环检测和从新定位的功能。不管是在室内的小型手持设备,仍是到工厂环境的无人机和城市里驾驶的汽车,ORB-SLAM2都可以在标准的CPU上进行实时工做。ORB-SLAM2在后端上采用的是基于单目和双目的光束法平差优化(BA)的方式,这个方法容许米制比例尺的轨迹精确度评估。此外,ORB-SLAM2包含一个轻量级的定位模式,该模式可以在容许零点漂移的条件下,利用视觉里程计来追踪未建图的区域而且匹配特征点。git
咱们用29个普遍使用的公共数据测试的结果显示,在大多数状况下,本文方案比此前方案精度更高,此外,咱们开源了ORB-SLAM2源代码,不只仅是为了整个SLAM领域,同时也但愿可以为其余领域研究者提供一套SLAM的解决方案。github
引言:算法
SLAM(同时定位与地图重建)在过去的20年中,一直是计算机视觉和机器人领域的热门话题,同时也吸引了不少高科技公司的关注。SLAM技术是在未知的环境当中创建一个地图而且可以在地图当中实时的定位。在不一样类型的传感器当中,相机十分廉价,而且可以提供丰富的环境信息,受到研究者的青睐。相机提供的图像信息能够用做鲁棒的和精确的位置识别。位置识别是SLAM系统中回环检测的关键模块(例如,当传感器检测到一个已经建好图的位置的时候,能够进行修正在探索过程当中的偏差)以及,可以修正因为剧烈的震动或者在系统进行初始化的时候在相机跟踪失败后的从新定位。所以以相机为核心的视觉SLAM在过去的一年中获得快速的发展。 数据库
视觉SLAM仅仅经过一个单目相机就可以完成。单目相机也是最便宜也是最小巧的传感器设备。然而深度信息没法从单目相机中观测到,地图的尺度和预测轨迹是未知的。此外,因为不能从第一帧当中进行三角测量化,单目视觉SLAM系统的启动每每须要多个视角或者滤波技术才能产生一个初始化的地图。最后,单目SLAM可能会形成尺度漂移,以及在探索的过程当中执行纯旋转的时候可能会失败。经过使用一个双目或者RGB-D相机将会解决这些问题,而且可以成为一种更加有效的视觉SLAM的解决方案。后端
在这篇文章当中,咱们在单目ORB-SLAM[1]的基础上提出ORB-SLAM2,有如下贡献:微信
1. 这是首个基于单目,双目和RGB-D相机的开源SLAM方案,这个方案包括,回环检测,地图重用和重定位。多线程
2. 咱们的RGB-D结果说明,光速法平差优化(BA)比ICP或者光度和深度偏差最小方法的更加精确。框架
3. 经过匹配远处和近处的双目匹配的点和单目观测,咱们的双目的结果比直接使用双目系统更加精确。ide
4. 针对没法建图的状况,提出了一个轻量级的定位模式 ,可以更加有效的重用地图。
(a)双目输入:带有屡次回环检测的城市环境轨迹和稀疏重建
(b) RGB-D输入:房间关键帧和稠密点云已经一次回环检测图,这些点云经过对深度图的关键帧的位姿进行映射获得,不进行渲染(融合)
图1 是ORB-SLAM2处理双目和RGB-D输入评估相机的轨迹并建图。这个系统可以保证在高精度和鲁棒性的前提下,作到在标准CPU上进行实时的,回环检测,重定位以及地图重用。
图a中显示的是双目和RGB输入下的ORBSLAM2的输出。双目例子显示的是最后轨迹和稀疏重建的地图。这里的数据集来源于KITTI的Sequence00数据集。这个城市数据集是ORB-SLAM2屡次成功提取特征,而且回环检测而来。
RGB-D例子是来源于TUM 的RGB-D 数据库中的fr1_room的数据集,而且进行关键帧的位姿评估而来。经过评估关键帧的位姿,映射深度图,最终造成一个稠密的点云图。指的注意的一点是,ORB-SLAM2虽不像Kinect Fusion同样进行数据融合,可是却可以很精确的估计关键帧的位姿。更多的例子在附件视频中展现。在余下的篇章当中,咱们将会在第二部分讨论相关的工做。在第三部分谈论ORB-SLAM2系统框架。第四部分评价ORB-SLAM2,第五部分得出结论。
2、相关工做
在这个章节,咱们将会讨论双目和RGB-D SLAM的相关工做。评估部分咱们放在第四部分,本章咱们主要讨论的是SLAM的方法。
2.1双目SLAM
最先研究双目SLAM方案的是Paz 等人[5],基于条件独立分割和扩展SLAM,其显著特色是可以在大场景中运行。更重要的是,这是第一个使用近特征点和远特征点(例如,因为双目相机差别较小,致使点的深度不能准确的估计)的双目SLAM系统,使用一个逆深度参数进行估计。经验值代表若是深度小于40倍双目的基线,那么这个点就能被三角测量化。咱们就是跟随的这样思想来处理远近不一样的特征点,具体解释放在第三部分。
目前大多数双目系统都是基于特征匹配和局部BA优化的方式,来得到尺度。Strasdat等人[8]采用在一个输出窗口的关键帧[7]和位姿的BA联合优化算法。在全局不一致性的状况下,经过限制窗口的大小的方式,实现了约束了时间的复杂程度的目的。Mei等人[9]在限定时间复杂度的条件下,使用路标和位姿相关性的方式的实现了RSLAM解决方案,而且提出和实现了在活动的区域的BA优化算法。即便在全局不一致的条件下,RSLAM也可以进行闭环,同时会扩大回环两侧的活动区域。
Pire等人[10]把局部的BA运用到了邻近S-PTAM上面来,可是,这种方法缺乏大量的回环检测。与此类似的是,咱们对局部关键帧采用BA优化,所以,这个地图的大小和复杂程度的大小是独立的,进而,咱们能够在一个大场景当中运行。然而,咱们目标是创建一个全局不变的地图。所以,咱们的系统首先在回环的两端执行。这与RSLAM很类似,以便于可以使用旧的地图进行定位,以后进行位姿估计,即将回环产生的累积漂移最小化。
Engel等人[11]提出邻近双目LSD-SLAM方案,采用的是一种直接的半稠密方法,最小化高梯度的图像区域中的光度偏差。这种方法但愿可以在不依赖特征提取的条件下,可以在纹理不清或者模糊运动的过程当中得到更高的鲁棒性。然而,直接法的性能会因为滚动(卷帘)快门,或者非朗伯反射的未建模的因素影响而降低。
2.2 RGB-D SLAM
最先和最著名的RGB-DSLAM系统是有Newcombe等人[4]提出的KinectFusion,这种方法将深度数据进行融合,深度数据来源于传感器到深度模型,经常使用ICP算法来跟踪相机的位姿。因为体积的表现形式和缺少回环检测,这种算法只能工做在小的工做空间。Whelan 等人[12]提出的Kintinuous可以在大环境中运行。它经过使用一个滚动循环缓冲器和包括使用位置定位和位姿优化来达到回环检测的目的。
第一个开源的RGB-DSLAM方案是由Endres[13]提出的,这是一种基于特征点提取的系统,他的前端采用提取和匹配特征点和ICP来计算帧与帧之间的运动。
后端采用位姿图优化的方式,回环检测约束条件来源于一个启发式搜索。类似的是,Kerl 等人[14]提出的DVO-SLAM,是在关键帧与关键帧之间的优化位姿图,视觉里程计经过计算最小化光度和深度偏差来计算约束条件。DVO-SLAM同时在之前的全部帧当中,搜索回环的候选者,而不依赖于位置识别。
Whelan等人[15]提出的邻近ElasticFusion算法,是创建在基于肯定环境的地图。这是一种以地图为中心的方法。这种方法忽略了非刚性形变地图的位姿和回环检测的性能,也是否是一个标准的位姿图优化。这种方法在重建和定位的精度都是十分优秀的,可是目前的应用十分有限对于一个房间大小的地图,因为在地图当中面元的数量影响计算的复杂程度。
Strasdat等人[8]提出ORB-SLAM2这种方法,这个方法使用深度信息去合成一个三维坐标,可以精确的提取到一副图像的信息。ORB-SLAM2可以处理来自双目和RGB-D的图像,与上述方法不一样的是,咱们的后端是用的BA算法,来创建一个全局的稀疏的地图重建,所以咱们的方法更加轻量级而且可以在标准的CPU上面运行。咱们的目标是长时间而且全局精准定位,而不是创建一个有不少细节的稠密地图。然而,高精度的关键帧的位姿,可以融合深度图像以及在计算中获得精准的重建,或者可以处理全部的关键帧和深度图,以及全部的BA而且获得一个精准的3D模型。
3、ORB SLAM2
针对双目相机和RGB-D相机的ORB-SLAM2创建在单目ORB-SLAM的基础上,它的核心组件,如图2所示。
图2 ORB-SLAM2由三个平行的线程组成,跟踪,局部建图和回环检测。在一次回环检测后,会执行第四个线程,去执行BA优化。跟踪的线程在双目或者RGB-D输入以前进行,所以剩下的系统模块可以跟传感器模块独立运行。单目的ORB-SLAM2工做图也是这幅图。
这个系统主要有3个并行的线程:
一、经过寻找对局部地图的特征,而且进行匹配,以及只运用BA算法来最小化重投影偏差,进行跟踪和定位每帧的相机。
二、运用局部的BA算法设置局比地图而且优化。
三、回环检测检可以经过执行位姿图的优化来更正累计漂移偏差。在位姿优化以后,会启动第四个线程来执行全局BA算法,来计算整个系统最优结构和运动的结果。
这个系统是一个基于DBoW2[16]的嵌入式位置识别模型,来达到重定位,防止跟踪失败(如遮挡),或者已知地图的场景重初始化,和回环检测的目的。这个系统产生关联可见的图[8],链接两个关键帧的共同点,链接全部关键帧的最小生成树方面。这些关键帧的图结构可以获得一个关键帧的局部的窗口,以便于跟踪和局部建图,而且在大型的环境当中的回环检测部分,做为一种图优化的结构。
这个系统使用相同的ORB特征进行跟踪,建图和位置识别的任务。这些特征在旋转不变和尺度不变性上有良好的鲁棒性,同时对相机的自动增益,曝光和光线的变化表现出良好的稳定性。而且可以迅速的提取特征和进行匹配,可以知足实时操做的需求,可以在基于词袋的位置识别过程当中,显示出良好的精度[18]。
在本章的剩下的部分当中,我将会展现双目或者深度信息是如何利用,和到底会影响系统中的那些部分。对每一个系统块更详尽的描述,可参见论文[1]
3.1 单目、近处双目和远处双目特征点
ORB-SLAM2做为一种基于特征提取的方法,在一些关键的位置上的提取进行预处理,如图2b所示,系统的全部运行都是基于输入图像的特征展开,而不依赖于双目或者RGB-D的相机。咱们的系统处理单目或者双目的特征点,分红远处特征点和近处特征点两类。
双目特征点 经过三个坐标定义当中,是这个左边图像的坐标,是右图当中的水平坐标。对于双目相机而言,咱们提取两幅图像当中的ORB特征,对于每一个左边的ORB特征咱们对其匹配到右边的图像中。这对于建设双目图像校订十分有效,所以极线是水平的。以后咱们会在左边的图像产生双目的ORB特征点,和一条水平的线向右边的图像进行匹配,经过修补相关性来从新定义亚像素。对于RGB-D相机,正如Strasdat等人[8]所言,咱们提取在图像通道上提取ORB特征点,。咱们将深度值和已经处理的深度地图,和基线在结构光投影器和红外相机进行匹配,对每一帧的图像与右边图像的坐标系进行融合。这是kinect和华硕 Xtion 精度大约是8cm。
近双目特征点的定义是:匹配的深度值小于40倍双目或者RGB-D的基线,不然的话,是远特征点。近的特征点可以从一帧的深度值可以三角测量化,是精确的估计,而且可以提供尺度,平移和旋转的信息。另一方面,远的特征点,可以提供精确的旋转信息,可是不多的尺度和平移信息。当提供多视图的时候,咱们才能三角化那些远的点。
单目的特征点经过右边图像的两个坐标当中的定义,必须保证全部的ORB特征是一致的,不然双目特征点的提取将不可以完整,或者在RGB-D的状况下,有产生一个无效的深度值。这些点仅可以从多视图中三角测量化而且不可以提供尺度信息,可是能够提供旋转和平移的估计信息
3.2 系统引导
使用双目和RGB-D相机的主要优点在于,咱们能够直接得到深度信息,咱们不须要像单目状况中那样作一个特定的SFM初始化。在系统初始化的时候,咱们就创造了一个关键帧(也就是第一帧),将他的位姿进行初始化,从全部的立体点中创造一个初始化地图。
3.3 使用单目或者双目光束优化法
咱们的系统采用光束优化法(BA),优化在跟踪过程(纯运动BA)中相机的位姿,优化本地窗口的关键帧和局部地图的特征点(局部BA),而且在回环检测以后优化全部的关键帧和特征点(全局BA)。咱们在g2o当中使用Levenberg-Marquadt方法[19]。
纯运动BA,优化相机旋转矩阵和位置
,最小化世界坐标系下匹配3D点云
和
特征点(单目的
或双目的
,其中
)的重投影偏差:
在这个式子当中,是强健的Huber的cost函数,
是协方差矩阵,关联对于特征点的尺度。这个投影函数
,单目的时候使用
,修正双目的时候用
,他们的定义以下:
在这个式子当中是焦距,
是主要点(象点),b是基线,全部的这些参数都是经过标定得到。
局部BA 采用一系列可用的关键帧和全部在关键帧可观点
,全部的其余关键帧是
,而不是
,观察
当中全部的特征点用于代价函数,可是在优化中是固定的。定义
为
中关键帧k的一系列匹配特征点,这个优化问题以下:
全局BA是 局部光束法的一个特例,这个方法除了初始帧全部的关键帧和点在地图当中都会被优化.初始帧是固定的,用来消除随机化。
3.4 闭环检测和全局BA
回环检测有两步:首先,一个回环信息被肯定检测到,而后利用这个回环纠正和优化位姿图。相比于单目的ORB-SLAM中可能出现尺度漂移的地方[20],这个双目或者深度的信息将会使得尺度信息可观测。而且,几何校验和位姿图优化将再也不须要处理尺度漂移,并且是基于刚体变换的,而不是基于类似性。
在ORB-SLAM2的位姿优化后,咱们包含一个全局的BA优化,为了实现一个优化方案,咱们必须采用一个独立的线程,容许系统可以持续的建图,而且检测到回环信息。可是这将会再次触发全局BA优化与当前地图的合成。若是在优化运行时检测到新的循环,咱们将停止优化并继续关闭循环,这将再次启动完整的BA优化。当完整的BA结束时,咱们须要将更新的关键帧子集和由完整BA优化的点与未更新的关键帧和在优化运行时插入的点合并。最后经过更新更新关键帧校订(例如,这个变换从未优化到已优化)到一个未更新关键帧经过生成树当中。根据校订参考帧来改造呢些未更新的特征点。
3.5 关键帧的插入
ORB-SLAM2遵循在单目ORB-SLAM中提的法则,即常常插入关键帧而且剔除上一帧的冗余。在远近特征点的差别为咱们插入一个新的关键帧提供了条件,这在大场景的条件下是相当重要的,如图3所示。
图3 高速公路的跟踪点。绿色的特征点深度小于40倍双目的基线,蓝色特征点大于40倍双目的基线,在这种数据集当中,须要插入大量的关键帧,以便于可以让近处的特征点更加精确的估计平移和尺度,远处的特征点来估计方向,可是不可以计算平移和尺度。
在这样的环境中,咱们须要一个大量的近点用以精确估计平移,于是若是这个被跟踪近点小于而且这个帧将会创造
个新邻近立体点,这个系统将会插入一个新的关键帧,咱们经验值认为,当
和
的条件下咱们效果最好。
3.6 定位模式
ORB-SLAM2包括一个定位模式,该模式适用于轻量级以及在地图已知状况下长期运行,只要那个环境没有发生剧烈变化。在该模式中,局部建图和回环检测的线程中是停用的,而且这个相机始终都是在经过追踪进行重定位。在这个模式下,追踪模块使用视觉里程计进行匹配图像的点云。视觉里程计匹配在当前帧的ORB算子和由双目或者深度相机收集的3D点云。这些匹配使得在没有地图的区域也可以精确从新定位,可是漂移将会被累加。地图点云匹配要确保在一个已经存在的地图当中零漂移定位,这个模型在附带的video当中会显示。
IV. 评估
咱们使用三个著名的数据集来评估ORB-SLAM2的算法的性能。咱们在一台16G的RAM,Intel Core i7-4790的台式机运行,以低于传感器的帧率,对处理跟踪时间求平均。咱们运行数据集5次,取中间值,来消除多线程系统的不肯定性。咱们开源了在运行这几个系统的数据集的方法包括标定具体操做实现。
4.1 KITTI数据集
KITTI数据集包含双目数据,这些数据从一个正在高速公路上行驶的车上采集到的。这个双目传感器有个小于54厘米的基线而且在在1392*512像素上,以10Hz的采样速率进行采样,其中序列00,02,05,06,和09包含回环。咱们的ORB-SLAM2可以检测出回环而且可以地图重用,除了09序列之外,09序列的回环只发生在尾端少数的几帧当中。表1显示的这个结果11个训练数据,这是一个公开的真实数据,对比于原先的LSD-SLAM算法,咱们展现了的双目SLAM系统测试数据结果。咱们使用两个不一样的米制,均方根偏差在论文[3]中提到,而且取平均相关
平移和旋转
偏差在论文[2],咱们的系统在大多数序列当中比双目的LSD-SLAM要优秀不少,而且可以得到的相关偏差低于1%。这个序列01如图3所示,是一个高速公路的序列,做为训练集,以及转换偏差。转换偏差是在这个序列当中难以评估的,由于只有几个很近的点可以被侦测,因为很高的速度和较低的帧率。然而这个方向可以被精确的评估,得到的偏差是每100米作0.21度。不少较远的点可以被检测,如图4所示,显示了一些评估的例子。
表1两种SLAM在测试KITT,I数据的精度对比
图4 在KITTE数据集01,05,07和08数据集,估计轨迹(黑色线)和以及实际运动(红色线)
4.2 EuRoC 数据集
EuRoC 数据集包含了11个双目的序列,经过一个微型飞行器(MAV)采集到的数据,飞行在两个不一样的房间和大量的工业环境。这个双目传感器有一个小于11cm的基线和可以提供20HZ的WVGA格式的图像,这个序列分红,简单、中等、和困难,这取决于MAV(微型飞行器)的速度,照明和场景的纹理。在全部的序列当中,MAV(微型飞行器)再次访问这个环境的时候,ORB-SLAM2可以重用地图,回环检测。这个表格2显示的是ORB-SLAM2的最小均方偏差的绝对值变换,对于全部序列而言。相比较对双目的LSD-SLAM的结果。
ORB-SLAM2可以实现一个厘米级精准的定位,而且比双目的LSD-SLAM更加的精确。跟踪部分可能会在V2_ 03_ difficul,序列当中跟丢,因为一些运动模糊。在第22篇论文解释的状况,这个序列在处理的过程当中是使用IMU信息,如图5所示,显示的一些估计轨迹对真实的世界相比的例子。
图5 在EuRoC V1_02_medium,V2_02_medium,MH_03_medium和MH_05_数据集测试结果,其中估计轨迹(黑色)实际运动轨迹(红色)
4.3 TUM RGB-D数据集
TUM RGB-D数据集包含一些室内的序列,在不一样的纹理下,不一样的光照和不一样的结构条件,从RGB-D传感器采集到的数据中分别去评估物体的重建和SLAM/视觉里程计的性能。和大多数RGB-DSLAM方法同样,咱们将实验结果展现在一个序列子集当中,在表格3当中,咱们比较咱们的精准性和其余方法,例如ElasticFusion,Kintinuous,DVO-SLAM以及RGB-DSLAM,ORB-SLAM2是惟一一种基于光束流差法,而且比其余的方法都更加优秀。咱们已经注意到RGB-DSLAM,深度地图对于freiburg2序列有一个4%的尺度偏差,偏差可能来自错误的标定,咱们已经在运行过程当中,进行了必定程度的补偿。这可以部分解释咱们取得好的结果的缘由。图6显示的点云的结果来源于后端映射的传感器深度的地图,从计算关键帧的位姿在四个序列当中。实验的结果显示,ORB-SLAM2很好的展现了桌子和海报的轮廓线,以及高精度的重定位。
图6 TUM RGB-D数据的fr3office, fr1 room, fr2 desk and fr3 nst 序列的经过评估关键帧的位姿和深度图进行稠密的点云重建图
V. 结论
本文呈现了一个基于于单目,双目和RGB-D传感器的完整SLAM框架,在实时和标准的CPU的前提下可以进行从新定位和回环检测,以及地图的重用。在实验当中,咱们关心的是在大场景中创建可用的地图和长期的定位。与此前的SLAM方案进行对比,在大多数的状况下,ORB-SLAM2展示出同样好的精确程度。
值得注意的是,咱们的RGB-D实现的结果显示,若是相机的定位精度更好,那么BA将会比直接法或者ICP的方法更好,将会减小一些额外的计算量。咱们开放了咱们系统的源码,和一些例子和指导,以便于可以更加方便为其余研究者而使用。将来的方向可能包含,测试更多的序列,多视角相机,鱼眼相机或者其余全相相机的,大场景的稠密重建,以及联合建图或者增长运动模糊的鲁棒性。
VI. 参考文献
[1]R. Mur-Artal, J. M. M. Montiel, and J. D. Tardos, “ORB-SLAM: a´versatile and accurate monocular SLAM system,” IEEE Transactionson Robotics,vol. 31, no. 5, pp. 1147–1163, 2015
[2]https://github.com/raulmur/ORB_SLAM2
[3]https://www.youtube.com/watch?v=ufvPS5wJAx0&feature=youtu.be
这篇真的是太赞了,我是转载自【泡泡机器人SLAM】微信公众号的,但愿能够你们一块儿学习~~~