您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页一文详解ORB-SLAM3

一文详解ORB-SLAM3

来源:华拓科技网
⼀⽂详解ORB-SLAM3

作者:Liam来源:公众号@链接:

摘要

ORB-SLAM3是⼀个⽀持视觉、视觉加惯导、混合地图的SLAM系统,可以在单⽬,双⽬和RGB-D相机上利⽤针孔或者鱼眼模型运⾏。他是第⼀个基于特征的紧耦合的VIO系统,仅依赖于最⼤后验估计(包括IMU在初始化时)。这样⼀个系统的效果就是:不管是在⼤场景还是⼩场景,室内还是室外都能鲁棒实时的运⾏,在精度上相⽐于上⼀版提升了2到5倍。本⽂的第⼆个创新点是根据改进recall的新的重定位模块来构建的混合地图,因为这个模块他可以让ORB-SLAM3在特征不是很好的场景中长期运⾏:当⾥程计失败的时候,系统会重新构建地图并将这个地图和原来构建的地图对齐。和那些仅利⽤最新的⼏帧数据的⾥程计相⽐,ORB-SLAM3是第⼀个能够在所有算法阶段重⽤所有先前信息的系统。这样的机制就可以在BA的时候⽤有共视关系的关键帧,即使两帧在时间相差很远,或者来⾃原来的建图过程。这个系统在EuRoC数据集上达到了平均3.6cm的精度,在TUM-VI这种利⽤⼿持设备快速移动的数据集(AR/VR场景)上达到了9mm的精度。作者已经开源了代码:https://github.com/UZ-SLAMLab/ORB_SLAM3

⼀、介绍

SLAM建图的最⼤优势在于,它允许在BA中匹配并使⽤执⾏三种数据关联的先前观测值:

短期的数据关联:在最新的⼏秒中匹配地图元素。就像是VO中做的⼀样,丢掉那些已经看不到的帧,这会导致有累计的漂移。中期的数据关联:匹配相机累计误差⼩的地图,这也可以⽤在BA中,当系统在已经建好的地图中运⾏的时候可以达到零漂移。

长期的数据关联:利⽤场景重识别来匹配当前的观测和先前的观测,不⽤管累计误差⽽且即使跟踪失败也可以实现,长期的匹配可以利⽤位姿图优化重新设置漂移,为了更准确也可以利⽤BA。这是SLAM在⼤场景中精度保证的关键。

这是第⼀个可能对短期、中期、长期数据进⾏数据关联的视和视觉惯导的系统。在已知地图的环境中可以没有漂移的运⾏,其中混合地图数据关联-这个可以保证我们进⾏地图匹配和进⾏BA优化,这也达到了⼀个⽬的:构建⼀个地图,然后可以在地图中进⾏精确的定位。主要贡献:

⼀个单⽬和双⽬的视觉惯导SLAM系统:全部依赖于MAP(最后后验概率估计),即使是在IMU初始化的时候。

⾼召回率的场景重识别算法:DBoW2需要匹配三个连续的关键帧,太慢了。作者的⽅法是:候选的关键帧第⼀次就进⾏⼏何⼀致性检测,然后利⽤三个共视的关键帧进⾏局部的⼀致性检验,这种策略提升了召回率,并简化了数据关联,从⽽提⾼了地图准确性,但计算成本变⾼。

第⼀个可以解决纯视觉或者视觉惯导的完整的混合地图的SLAM系统。在单⽬或者双⽬的系统中,Atlas代表的是⼀系列不连续的地图,⽽且可以把他们应⽤到所有的建图过程中:场景重识别、相机重定位、闭环检测和精确的地图融合。这就允许地图是在不同的时间构建的(增量的SLAM系统),纯视觉的Atlas是参考的2019年IROS的⼀篇⽂章:ORBSLAM-atlas: a robust and accurate multi-mapsystem,本⽂⼜添加了视觉惯导的混合地图系统来实现场景重识别。

抽象的相机表⽰:使SLAM系统与所使⽤的相机模型⽆关。并允许通过提供其投影,⾮投影和Jacobian函数来添加新模型我们提供了针孔和鱼眼模型的实现。

⼆、相关⼯作

表⼀中展⽰位姿估计和数据关联的⼯作。

视觉SLAM

MonoSLAM:第⼀个基于EKF和ShiTomasi特征的SLAM系统PTAM:分离tracking和mapping、基于关键帧

LSD-SLAM:构建⼤场景的半稠密地图,但是没有对地图进⾏优化,精度低

SVO检测FAST特征,利⽤直接法跟踪特征,利⽤重投影误差模型来优化位姿,但是只有短期的数据关联,了他的精度。

DSO在检测不到特征点的场景也可以得到精准的相机定位,利⽤7个关键帧的局部光度误差的BA来优化位姿,利⽤逆深度来存储点。视觉惯导系统

MSCKF:基于EKF的利⽤特征边缘化来简化计算(状态向量中没有地图点)OKVIS:第⼀个紧耦合的基于关键帧优化的VIO系统ROVIO利⽤EKF的光度误差

快速的IMU初始化⽅法:Closed-form solution of visual-inertial structure from motionSimultaneous state initialization and gyroscopebias calibration in visual inertial aided navigationVINS->VINS-Fusion->KimeraVI-DSO:初始化需要20-30s

三、系统概述

ORB-SLAM3是基于ORB-SLAM2和ORB-SLAM-VI构建的系统,他可以在纯视觉或者视觉惯导的系统中鲁棒的运⾏(单⽬、双⽬和RGB-D利⽤针孔或者鱼眼模型,你也可以⾃⼰定义模型)。

Atlas是⼀个由⼀系列离散的地图组成的混合地图。这⾥会维护⼀个active map来定位来的新的关键帧,local mapping线程不断的优化更新这个地图。Atlas⾥⾯还有non-active地图。这个系统基于词袋模型给系统编码⽤于重定位、闭环检测和地图融合。

跟踪线程处理传感器信息、实时的计算当前帧和active map的位姿,最⼩化匹配特征点的重投影误差,这个线程还有⼀个关键帧筛选的过程。在VIO的模式下,机体的速度和IMU的bias利⽤惯导的参差来=进⾏优化。当跟踪线程跟丢的时候,跟踪线程尝试在所有的Alats中完成当前帧的重定位,如股票重定位成功,跟踪就被拉回来了,否则过⼀段时间activate就会重新存储为non-active,⼀个新的active map就会被初始化。

局部建图线程添加关键帧和点到active map中,删除多余的帧并使⽤视觉或者视觉惯导的BA来优化地图,这些都是在⼀个局部的滑窗中做的。除此之外,在有惯导的情况下,IMU的参数是利⽤MAP估计来初始化和优化。

闭环检测和地图融合线程在active map和整个Atlas中检测相同的区域。如果相同的区域是在active中,就会执⾏闭环的过程,如果属于不同的map,他们就会被融合为⼀个地图。在闭环纠正后,⼀个全局的BA在⼀个线程中被触发来优化地图。

四、相机模型

提供了针孔模型和鱼眼模型。系统中把相机模型单独的抽象出来(重投影和反投影⽅程,Jacobian⽅程等)。这就允许我们在系统中使⽤⾃⼰的相机模型。在抽象的过程中也遇到了⼀些困难,在下边讨论。A.重定位

ORB-SLAM解决重定位是⽤的Epnp;但是他是基于⼀个标定好的针孔相机模型的,为了继续我们的⼯作,我们采⽤独⽴于相机的ML-pnp算法可以完全从相机模型中解耦,因为他利⽤投影光线作为输⼊。相机模型只需要提供⼀个从像素传递到投影光线的反投影函数,以便能够使⽤重定位。

B.未矫正的双⽬SLAM

很多的SLAM系统都假设双⽬相机已经矫正了(两幅图像都转换为使⽤相同焦距的针孔投影,图像平⾯共⾯,并与⽔平极线对齐,这样,通过观察另⼀幅图像中的同⼀⾏,可以很容易地匹配其中⼀幅图像中的特征)。然⽽,对⽴体图像进⾏校正的假设有很⼤的局限性,在许多应⽤中不适合也不可⾏。例如矫正⼀个鱼眼相机需要需要很严重的裁剪。这就失去了⼴⾓相机⼤视⾓,快速建图、处理遮挡鲁棒的优点。因此本⽂的系统不依赖于图像矫正,⽽是把双⽬相机看成两个单⽬相机:

有⼀个恒定的SE(3)变换两幅图像有部分相同的观测

这些约束在我们三⾓化新的路标点和进⾏BA优化的时候很有效率。SLAM估计6⾃由度刚体位姿,其参考系可以位于其中⼀个摄像机中,也可以位于IMU传感器中,根据刚体位姿表⽰摄像机。我们可以利⽤双⽬初始化第⼀次看到的路标点。双⽬还有很多重叠的区域,我们把他看成单⽬相机来使⽤。

视觉惯导SLAM

ORB-SLAM-VI是第⼀个有能⼒地图重⽤的视觉惯导的系统,但是他只能基于单⽬的针孔模型,初始化很慢,在本⽂,系统中使⽤快速精准的IMU初始化,通过了⼀个开源的SLAM库利⽤针孔或者鱼眼模型快速的完成单⽬惯导或者双⽬惯导的初始化。

B.IMU初始化

初始化的⽬的是为了给惯导的变量提供良好的初始值:机体速度、重⼒⽅向还有IMU的偏置。VI-DSO尝试不进⾏初始化,直接利⽤BA来进⾏优化导致初始化长达30s。在本⽂的⼯作中我们提出了基于三个关键insights的快速精准的初始化⽅法:

纯单⽬SLAM可以提供⾮常精确的初始地图,但是不知道尺度。所以可以加⼊Imu获得尺度信息。

Scale drift-aware large scale monocular SLAM证明当尺度被明确地表⽰为⼀个优化变量,⽽不是使⽤BA的隐式表⽰时,它收敛得更快。

在IMU初始化过程中忽略传感器的不确定性会产⽣较⼤的不可预测的误差(Fast and robust initialization for visual-inertialSLAM_2019ICRA)

所以我们需要考虑初始化的过程中传感器的不确定性,把IMU初始化看成⼀个MAP的问题,分为三个步骤:纯视觉的MAP估计:在ORB-SLAM中初始化纯单⽬相机仅⽤了2s,以4HZ的速度插⼊关键帧。初始化后我们有按⼀定尺度⽐的由⼗个相机位姿和数百个3D点组成的地图。利⽤图2中纯视觉的模型进⾏BA优化。这些位姿被转换到机体坐标系下获得轨迹。纯惯导的MAP估计:惯导的状态向量为:⼀旦惯性优化完成,框架的姿态和速度和3D地图点将与估计的⽐例进⾏缩放,并旋转使z轴与估计的重⼒⽅向对齐。对偏差进⾏更新,并重复IMU预积分,以减少未来的线性化误差。视觉惯导的MAP估计:⼀旦我们有了对视觉和惯导好的参数,我们可以执⾏⼀个联合的视觉惯导优化⽼进⼀步优化参数。这个图在2a中但是所有关键帧的bias都相同,⽽且先验信息也相同。我们在EuRoC数据集上进⾏的详尽的初始化实验表明,这种初始化⾮常有效,在2秒轨迹的情况下实现了5%的尺度误差。为了改进初始估计,在初始化后5秒和15秒进⾏视惯性BA,收敛到1%尺度误差,如第七节所⽰。在这些BAs之后,我们说地图已经成熟了,也就是说尺度、IMU参数和重⼒⽅向已经被准确地估计出来了,这种初始化⽅法⽐ORB-SLAM-VI和VI-DSO都好的多。通过将尺度因⼦固定为1,并将其从惯性优化变量中提取出来,我们可以很容易地将单⽬惯性初始化扩展到⽴体惯性,从⽽增强其收敛性。

C.跟踪和建图

跟踪和建图采⽤的是Visual-inertial monocular SLAM with map reuse中的⽅案。

跟踪线程只优化最新两帧的状态⽽地图点位置保持不变。

建图使⽤关键帧及其点的滑动窗⼝作为可优化变量,包括可共视的关键帧,但保持其固定。

在某些情况下,当慢速运动不能提供良好的惯性参数观测能⼒时,初始化可能⽆法在15秒内收敛到精确解。为了使系统更鲁棒,本⽂提出⼀个新的尺度优化的⽅法,这种⽅法基于改进的单惯导的优化⽅法,其中插⼊所有关键帧,但尺度和重⼒⽅向是唯⼀的估计参数(图2d)。在这种情况下,biases不变是不对的假设。可以使⽤每⼀帧的估计值来修正biases。这种优化的计算效率⾮常⾼,每10秒在局部建图线程中执⾏⼀次,直到建图超过100个关键帧,或者初始化超过75秒。D.跟踪丢失的鲁棒提升

本⽂的VIO系统在系统跟踪少于15个点的时候就进⼊视觉跟踪失败的状态,然后执⾏:

短期的失败:利⽤IMU的读数估计位姿,把地图点投影到估计的相机位姿上,然后在⼀个⼤的image窗⼝中做匹配,匹配的结果包含在VIO优化中。在⼤多说情况下可以恢复视觉跟踪,但是如果超过5s还没有恢复。进⼊下⼀个状态。长期的失败:重新进⾏视觉惯导的初始化构建⼀个地图,这个地图成为active地图。

地图融合和闭环检测

在图像帧和active地图间建⽴的短期和中期的数据关联是在跟踪和建图线程利⽤地图点投影到估计的位姿上,然后在⼩的窗⼝中匹配得到匹配关系。为了长期的数据关联来进⾏重定位和闭环检测,ORB-SLAM是⽤的词袋模型。与跟踪不同,位置识别是利⽤DBoW2使⽤其词袋⽮量构建关键帧的数据库,并且给定查询图像能够根据其词袋有效地提供最相似的关键帧。仅使⽤第⼀个候选帧,原始DBoW2查询就可以达到50-80%的精度和召回率。为了防⽌假阳性的观测,DBoW2实施时间和⼏何⼀致性检查,将⼯作点的精度提⾼到100%,召回率达到30-40%。⾄关重要的是,时间⼀致性检查⾄少在3个关键帧期间延迟了位置识别。当尝试在我们的Atlas系统中使⽤它时,我们发现这种延迟和较低的召回率经常是在相同或不同地图的重复区域中造成的。在本⽂的⼯作中我们提出了⼀个在长期和混合地图数据关联的时候有改进召回率的新的场景重识别的算法。当建图线程筛选出⼀个关键帧,场景重识别就尝试检测在Atlas中的关键帧进⾏匹配。如果匹配的关键帧在active地图中,这就确定了⼀个闭环;否则就是混合地图的数据关联,执⾏匹配的地图和当前的active地图的融合。这个⽅法的第⼆个特点是⼀旦当前帧和匹配的地图帧的位姿估计出来了,我们就在匹配帧和其在共视图中的相邻帧构建⼀个局部的窗⼝。在此窗⼝中,我们集中搜索中期数据关联,从⽽提⾼了闭环检测和地图融合的准确性。A.场景重识别

为了达到⾼的召回率,每个新来的关键帧都会利⽤DBoW2数据库在Altas中检测⼏个相似的关键帧。为了达到百分之百的准确度。每个候选帧都要进⾏⼏何验证。⼏何检验包括检验图像窗⼝中是否有和地图点描述⼦匹配的上的ORB特征点(汉明距离)。如果有⼏个匹配候选帧,⾸先去除不正确的匹配,还需要检验和排第⼆的候选帧⽐较距离⽐。场景重识别的过程如下:

DBoW2候选关键帧:利⽤active关键帧在Altas的DBoW2数据库中检索三个候选的相似帧,包括Ka的共视帧,我们把匹配帧称为Km。局部窗⼝:对与每⼀个Km我们定义⼀个局部的窗⼝包括Km和他最好的共视帧,以及他们观测到的所有的地图点。DBoW2直接索引提供了Ka和局部窗⼝关键帧的特征点匹配,我们可以得到2D-2D和3D-3D的匹配关系。

3D对齐变换:利⽤RANSAC->Tam来来更好的对齐局部窗⼝中的Km和Ka的地图点。在单⽬或者单⽬惯导的系统中,如果地图还没初始化成功,我们计算Sim3变换,如果初始化成功我们计算SE3变换。在计算两种变换的时候我们都利⽤3点的Horn算法来找到Tam。如果计算出来的Tam把Ka中的点变换到Km中重投影误差⼩于某个阈值,就把这个匹配当成正确的。拥有最多选票的假设被选择(前提是该假设满⾜⼀定的阈值)。

匹配优化:将局部窗⼝中的所有地图点通过Tam进⾏转换,以找到更多与Ka中的关键点匹配的地图点。同时也要把Ka转换到局部窗⼝中找到与之的匹配点。利⽤所有的匹配点来计算Tam,利⽤双向带有鲁棒核函数的重投影误差的⾮线性优化来优化Tam,如果优化后inliers数量超过⼀定的阈值,就会在⼀个更⼩的图像窗⼝中进⾏第⼆段的匹配和⾮线性优化。

在三个共视关键帧中验证:为了避免假阳性的结果,DBoW2在连续三个关键帧中决定是否触发、延时或丢失位置重识别。这个⽅法的关键是:在⼤多数情况下我们需要验证的信息已经都在地图中了,为了验证位置重识别,我们在active地图中和Ka共视的两个关键帧(共视帧视的地图点超过⼀定的阈值。如果没有找到这样的共视关键帧,这种验证就会在新来的关键帧中进⾏,但是不需要再次启动词袋。验证⼀直持续,直到有三个关键帧验证Tam,或者连续两个关键帧验证失败。

重⼒⽅向验证:在有IMU的情况下,如果active地图成熟,我们已经估计了Tam。我们就要确定两帧的pitch和roll⾓低于某个阈值来确定是不是进⾏位置重识别。B.视觉地图融合

当位置重识别成功的时候产⽣active地图Ma中的关键帧Ka和⼀个在Altas地图Mm中的关键帧Km利⽤Tma$进⾏混合地图的数据关联来融合地图。这⾥需要注意的是Altas中的地图的信息需要被tracking线程重⽤来避免地图复制。这⾥把Ma地图放到以Mm为参考的地图中,由于Ma中有很多的组件,所有融合可能需要⼀段时间。地图融合分成两部分:⾸先,在⼀个由Ka和Km相邻点定义的连接窗⼝中进⾏合并,在第⼆阶段,通过位姿图优化将校正传播到合并图的其余部分。合并算法的具体步骤为:

连接窗⼝集合:连接窗⼝包括Ka和他的共视的关键帧,Km和他的共视关键帧,以及所有他们观测到的地图点。利⽤Tma把Ma中的地图点和关键帧和Mm对齐然后再放到连接窗⼝中。

融合地图:Ma和Mm融合组成⼀个新的active地图。为了删除重复的点,在Mm中的关键帧中主动搜索Ma的匹配点,对于每个匹配都删除Ma中的点,Mm中的点保存下来了所有的观测。利⽤中期的点关联来更新共视和基本图添加Mm和Ma的连接边。

连接窗⼝的BA:在连接窗⼝中把所有来⾃Mm和Ma中的关键帧进⾏局部优化。为了保证滑窗中的关键帧数,Mm的共视帧保持固定。⼀旦优化完成,连接窗⼝中的所有帧都可以进⾏跟踪,来快速准确的重⽤地图Mm。

位姿图优化:利⽤整个融合地图的本质图进⾏位姿图优化,保持连接区域的关键帧固定。这个优化将修正从连接窗⼝传播到地图的其余部分。C.视觉惯导地图融合

视觉-惯性合并算法的步骤与纯视觉合并相似。改进纯视觉中的步骤1和步骤3,以更好地利⽤惯性信息:

VI连接窗⼝集合:如果active成熟了,在把Ma包含在连接窗⼝前把地图Ma利⽤Tma(SE3)进⾏变换。如果active没成熟,利⽤Tma(Sim3)来对齐Ma。

VI连接窗⼝BA:active关键帧Ka以及最新的五个关键帧的位姿,速度和偏置是可以优化的。这些变量通过IMU预积分来进⾏关联。对于Mm,我们也对Km和他时序上的五个相邻帧的位姿、速度和偏置进⾏优化,如下图所⽰:

对于Mm,包含了紧靠局部窗⼝前的关键帧,但是固定的;⽽对于Ma,包含了类似的关键帧,但其姿态仍然是可优化的。所有关键帧所能看到的所有点,以及观察这些点的关键帧姿态也得到了优化。利⽤重投影误差将关键帧和关键点关联起来。D.闭环检测

闭环检测和地图融合类似,但是是在场景重识别的两个关键帧都在active地图下。根据匹配的关键帧组成连接窗⼝,重复的点被检测融合然后叜共视图和本质图中构建新的边。然后进⾏位姿图优化来传播闭环校正的结果到剩余的地图中。最后⼀步是全局BA,在考虑闭环检测中期和长期的匹配后得到MAP估计。在视觉惯导的情况下,只有在关键帧数量低于阈值的时候才进⾏以避免巨⼤的运算成本。参考⽂献

[1] Campos C , Elvira R , Rodríguez, Juan J. Gómez, et al. ORB-SLAM3: An Accurate Open-Source Library for Visual, Visual-Inertial andMulti-Map SLAM[J]. 2020.[2] Campos C , Montiel, José M. M, Tardós, Juan D. Inertial-Only Optimization for Visual-Inertial Initialization[J].2020.[3] https://blog.csdn.net/qq_40878688/article/details/105291348(ORBSLAM-Atlas a robust and accurate multi-map system介绍)本⽂仅做学术分享,如有侵权,请联系删⽂。下载1在「3D视觉⼯坊」公众号后台回复:3D视觉,即可下载 3D视觉相关资料⼲货,涉及相机标定、三维重建、⽴体视觉、SLAM、深度学习、点云后处理、多视图⼏何等⽅向。

下载2在「3D视觉⼯坊」公众号后台回复:3D视觉github资源汇总,即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、⽴体匹配源码、单⽬、双⽬3D检测、基于点云的3D检测、6D姿态估计汇总等。

下载3在「3D视觉⼯坊」公众号后台回复:相机标定,即可下载独家相机标定学习课件与视频⽹址;后台回复:⽴体匹配,即可下载独家⽴体匹配学习课件与视频⽹址。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务