ORB-SLAM3论文总结

ORB-SLAM3

摘要

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-map system,本文又添加了视觉惯导的混合地图系统来实现场景重识别。
  • 抽象的相机表示:使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 motion
    Simultaneous state initialization and gyroscope bias calibration in visual inertial aided navigation
  • VINS->VINS-Fusion->Kimera
  • VI-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库利用针孔或者鱼眼模型快速的完成单目惯导或者双目惯导的初始化

A.基础

视觉SLAM估计的仅仅是当前帧的位姿,但是VIO需要估计机体的位姿 T i = [ R i , p i ] ∈ S E ( 3 ) T_i = [R_i,p_i]\in SE(3) Ti=[Ri,pi]SE(3)和在世界坐标系下的速度 v i v_i vi,陀螺仪和加速度计的偏置 b i g , b i a b_i^g, b_i^a big,bia(假设为布朗运动(乱跑的运动))。所以状态向量位:
S ( i ) ≐ [ T i , v i , b i g , b i a ] S_(i)≐{[T_i,v_i,b_i^g,b_i^a]} S(i)[Ti,vi,big,bia]
对于VIO,我们利用预积分计算连续图像帧的测量,参考文献62流形上的预积分详细的介绍了预积分的公式。我们获得预积分的旋转,速度和位置测量记为 Δ R i , i + 1 , Δ v i , i + 1 , Δ p i , i + 1 \Delta{R}_{i,i+1}, \Delta{v}_{i,i+1}, \Delta{p}_{i,i+1} ΔRi,i+1,Δvi,i+1,Δpi,i+1,全部测量的信息矩阵被定义为: ∑ ℓ i , i + 1 \sum_{\ell_{i,i+1}} i,i+1根据这些预积分的状态,我们可以定义出来残差:
r ℓ i , i + 1 , = [ r Δ R i , i + 1 , r Δ v i , i + 1 , r Δ p i , i + 1 ] r Δ R i , i + 1 = l o g ( Δ R i , i + 1 T R i T R i + 1 ) r Δ v i , i + 1 = R i T ( v i + 1 − v i − g Δ t i , i + 1 ) r Δ p i , i + 1 = R i T ( p j − p i − v i Δ t − 0.5 g Δ t 2 ) r_{\ell_{i,i+1}},=[r_{\Delta{R_{i,i+1}}},r_{\Delta v_{i,i+1}},r_{\Delta p_{i,i+1}}]\\ r_{\Delta{R_{i,i+1}}}=log(\Delta R_{i,i+1}^TR_i^TR_{i+1})\\ r_{\Delta v_{i,i+1}}=R_i^T(v_{i+1}-v_i-g\Delta t_{i,i+1})\\ r_{\Delta p_{i,i+1}}=R_i^T(p_j-p_i-v_i\Delta t-0.5g\Delta t^2) ri,i+1,=[rΔRi,i+1,rΔvi,i+1,rΔpi,i+1]rΔRi,i+1=log(ΔRi,i+1TRiTRi+1)rΔvi,i+1=RiT(vi+1vigΔti,i+1)rΔpi,i+1=RiT(pjpiviΔt0.5gΔt2)

和惯导的测量残差放在一起,我们也可以定义出来相机的重投影误差 r i j r_{ij} rij表示的是第i帧和第j个在 x j x_j xj位置的3D点:
r i j = u i j − ∏ ( T C B T i − 1 ⊕ x j ) r_{ij}=u_{ij}-\prod(T_{CB}T_i^{-1}\oplus x_j) rij=uij(TCBTi1xj)
其中 ∏ \prod 是对应相机模型的从 R 3 R^3 R3 R n R^n Rn的投影模型。 u i j u_{ij} uij是在图像i中对点j的观测,这里有一个信息矩阵 ∑ i j \sum_{ij} ij T C B T_{CB} TCB表示从机体(IMU)坐标系到相机坐标系的变换矩阵(在标定的时候得到的外参), ⊕ \oplus 表示SE(3)到 R 3 R^3 R3的变换。(第i帧的 x j x_j xj变换到参考帧->再从机体坐标系变换到相机坐标系->投影->和匹配点的像素位置做差得到误差)。

把相机和惯导的残差放在一起,VIO可以表示为基于关键帧的最小化的定位问题。根据k+1个关键帧和他的状态以及观测的3D点的状态,VIO的优化问题可以写成:
m i n S ˉ k , χ ( ∑ i = 1 k ∣ ∣ r ℓ i − 1 , i ∣ ∣ ∑ i , i + 1 2 + ∑ j = 0 l − 1 ∑ i ∈ κ j ρ H u b ( ∣ ∣ r i j ∣ ∣ ∑ i j ) ) min{\atop{\bar{S}_k,\chi}} \bigg(\sum_{i=1}^k||r_{\ell_{i-1,i}}||^2_{\sum_{i,i+1}}+\sum_{j=0}^{l-1}\sum_{i\in \kappa^j}\rho_{Hub}(||r_{ij}||_{\sum_{ij}})\bigg) minSˉk,χ(i=1kri1,ii,i+12+j=0l1iκjρHub(rijij))
其中 κ j \kappa^j κj是关键帧观测到的3D点j的集合。这里的优化过程如上图所示。利用Huber鲁棒核函数来减少误匹配的影响。惯导的残差是不需要鲁棒核函数的,因为没有错误的匹配。这种优化需要在跟踪和建图过程中提高效率,但更重要的是,它需要良好的初始值促进系统收敛到精确的解。

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-inertial SLAM_2019ICRA)

所以我们需要考虑初始化的过程中传感器的不确定性,把IMU初始化看成一个MAP的问题,分为三个步骤:

纯视觉的MAP估计:在ORB-SLAM中初始化纯单目相机仅用了2s,以4HZ的速度插入关键帧。初始化后我们有按一定尺度比的由十个相机位姿和数百个3D点组成的地图。利用图2中纯视觉的模型进行BA优化。这些位姿被转换到机体坐标系下获得轨迹 T ˉ 0 : k = [ R , p ˉ ] 0 : k \bar{T}_{0:k}=[R,\bar{p}]_{0:k} Tˉ0:k=[R,pˉ]0:k
纯惯导的MAP估计:惯导的状态向量为:
γ k = [ s , R w g , b , v ˉ 0 : k ] \gamma_k={[s,R_{wg},b,\bar{v}_{0:k}]} γk=[s,Rwg,b,vˉ0:k]

  • s是实数,尺度因子,可以初始化纯视觉的方法。
  • R w g R_{wg} Rwg属于SO(3)表示重力的方向,代表的是两个角度,这样重力在世界参考系中表示为 g = R w g g I g=R_{wg}g_I g=RwggI,其中 g I = ( 0 , 0 , G ) T g_I=(0,0,G)^T gI=(0,0,G)T,G是重力的大小。
  • b = ( b a , b g ) b=(b^a,b^g) b=(ba,bg)是两个三维向量,表示三个方向上加速度计和陀螺仪的偏置,在优化的时候假设为常数;
  • v ˉ 0 : k \bar{v}_{0:k} vˉ0:k表示计算出来的优化后的(后验)从第0帧到第k帧的速度。初始值 T ˉ 0 : k \bar{T}_{0:k} Tˉ0:k

在这里我们仅考虑IMU测量值: L 0 : k = [ L 0 , 1 , . . . , L k − 1 , k ] L_{0:k}=[L_{0,1},...,L_{k-1,k}] L0:k=[L0,1,...,Lk1,k]。因此我们可以看成一个MAP的问题,先验分布的最大:
p ( γ k ∣ L 0 : k ) ∝ p ( L 0 : k ∣ γ k ) p ( γ k ) p(\gamma_k|L_{0:k})\propto p(L_{0:k}|\gamma_k)p(\gamma_k) p(γkL0:k)p(L0:kγk)p(γk)
其中 p ( L 0 : k ∣ γ k ) p(L_{0:k}|\gamma_k) p(L0:kγk)是似然值, p ( γ k ) p(\gamma_k) p(γk)是先验。把每次测量看成独立的,MAP可以写成:
γ k ∗ = γ k a r g m a x ( p ( γ k ) ∏ i = 1 k p ( L i − 1 , i ∣ s , g d i r , b , v ˉ i − 1 , v ˉ ) ) \gamma^*_k=^{argmax}_{\gamma_k}\big(p(\gamma_k)\prod_{i=1}^kp(L_{i-1,i}|s,g_{dir},b,\bar{v}_{i-1},\bar v)\big) γk=γkargmax(p(γk)i=1kp(Li1,is,gdir,b,vˉi1,vˉ))
对IMU预积分和先验分布取负对数并假设高斯误差,最终优化问题:(可以参考机器人学中的状态估计第36页,我的理解是这里只有观测方程,对应的公式是3.9a)
γ k ∗ = γ k a r g m i n ( ∣ ∣ r p ∣ ∣ ∑ p 2 + ∑ i = 1 k ∣ ∣ r L i − 1 , i ∣ ∣ ∑ L i − 1 , i 2 ) \gamma^*_k=^{argmin}_{\gamma_k}\big(||r_p||^2_{\sum_p}+\displaystyle\sum_{i=1}^k||r_{L_{i-1,i}}||^2_{\sum_{L_{i-1,i}}}\big) γk=γkargmin(rpp2+i=1krLi1,iLi1,i2)
r p r_p rp是先验的残差来保证IMU的偏置为0,协方差矩阵是根据IMU的特性给的。
我们需要在流形中进行优化时,我们需要定义一个小量来更新优化过程中的重力方向估计:
R w g n e w = R w g o l d E x p ( δ α g , δ β g , 0 ) R_{wg}^{new}=R_{wg}^{old}Exp(\delta\alpha_g,\delta\beta_g,0) Rwgnew=RwgoldExp(δαg,δβg,0)
Exp表示李代数到李群的变换,为了保证s在优化的时候是正的我们定义更新:
s n e w = s o l d e x p ( δ s ) s^{new}=s^{old}exp(\delta s) snew=soldexp(δs)
一旦惯性优化完成,框架的姿态和速度和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数据库中检索三个候选的相似帧,包括 K a K_a Ka的共视帧,我们把匹配帧称为 K m K_m Km
  • 局部窗口:对与每一个 K m K_m Km我们定义一个局部的窗口包括 K m K_m Km和他最好的共视帧,以及他们观测到的所有的地图点。DBoW2直接索引提供了 K a K_a Ka和局部窗口关键帧的特征点匹配,我们可以得到2D-2D和3D-3D的匹配关系。
  • 3D对齐变换:利用RANSAC-> T a m T_{am} Tam来来更好的对齐局部窗口中的 K m K_m Km K a K_a Ka的地图点。在单目或者单目惯导的系统中,如果地图还没初始化成功,我们计算Sim3变换,如果初始化成功我们计算SE3变换。在计算两种变换的时候我们都利用3点的Horn算法来找到Tam。如果计算出来的Tam把 K a K_a Ka中的点变换到Km中重投影误差小于某个阈值,就把这个匹配当成正确的。拥有最多选票的假设被选择(前提是该假设满足一定的阈值)。
  • 匹配优化:将局部窗口中的所有地图点通过Tam进行转换,以找到更多与Ka中的关键点匹配的地图点。同时也要把 K a K_a Ka转换到局部窗口中找到与之的匹配点。利用所有的匹配点来计算Tam,利用双向带有鲁棒核函数的重投影误差的非线性优化来优化Tam,如果优化后inliers数量超过一定的阈值,就会在一个更小的图像窗口中进行第二段的匹配和非线性优化。
  • 在三个共视关键帧中验证:为了避免假阳性的结果,DBoW2在连续三个关键帧中决定是否触发、延时或丢失位置重识别。这个方法的关键是:在大多数情况下我们需要验证的信息已经都在地图中了,为了验证位置重识别,我们在active地图中和 K a K_a Ka共视的两个关键帧(共视帧中共视的地图点超过一定的阈值。如果没有找到这样的共视关键帧,这种验证就会在新来的关键帧中进行,但是不需要再次启动词袋。验证一直持续,直到有三个关键帧验证 T a m T_{am} Tam,或者连续两个关键帧验证失败。
  • 重力方向验证:在有IMU的情况下,如果active地图成熟,我们已经估计了 T a m T_{am} Tam。我们就要确定两帧的pitch和roll角低于某个阈值来确定是不是进行位置重识别。
B.视觉地图融合

当位置重识别成功的时候产生active地图Ma中的关键帧 K a K_a Ka和一个在Altas地图Mm中的关键帧 K m K_m Km利用 T m a T_{ma} Tma进行混合地图的数据关联来融合地图。这里需要注意的是Altas中的地图的信息需要被tracking线程重用来避免地图复制。这里把 M a M_a Ma地图放到以 M m M_m Mm为参考的地图中,由于 M a M_a Ma中有很多的组件,所有融合可能需要一段时间。地图融合分成两部分:首先,在一个由 K a K_a Ka K m K_m Km相邻点定义的连接窗口中进行合并,在第二阶段,通过位姿图优化将校正传播到合并图的其余部分。合并算法的具体步骤为:

  • 连接窗口集合:连接窗口包括 K a K_a Ka和他的共视的关键帧, K m K_m Km和他的共视关键帧,以及所有他们观测到的地图点。利用 T m a T_{ma} Tma M a M_a Ma中的地图点和关键帧和 M m M_m Mm对齐然后再放到连接窗口中。
  • 融合地图: M a M_a Ma M m M_m Mm融合组成一个新的active地图。为了删除重复的点,在 M m M_m Mm中的关键帧中主动搜索 M a M_a Ma的匹配点,对于每个匹配都删除 M a M_a Ma中的点, M m M_m Mm中的点保存下来了所有的观测。利用中期的点关联来更新共视和基本图添加 M m M_m Mm M a M_a Ma的连接边。
  • 连接窗口的BA:在连接窗口中把所有来自 M m M_m Mm M a M_a Ma中的关键帧进行局部优化。为了保证滑窗中的关键帧数, M m M_m Mm的共视帧保持固定。一旦优化完成,连接窗口中的所有帧都可以进行跟踪,来快速准确的重用地图 M m M_m Mm
  • 位姿图优化:利用整个融合地图的本质图进行位姿图优化,保持连接区域的关键帧固定。这个优化将修正从连接窗口传播到地图的其余部分。
C.视觉惯导地图融合

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

  • VI连接窗口集合:如果active成熟了,在把Ma包含在连接窗口前把地图Ma利用 T m a T_{ma} Tma(SE3)进行变换。如果active没成熟,利用 T m a T_{ma} Tma(Sim3)来对齐 M a M_a Ma
  • VI连接窗口BA:active关键帧 K a K_a Ka以及最新的五个关键帧的位姿,速度和偏置是可以优化的。这些变量通过IMU预积分来进行关联。对于 M m M_m Mm,我们也对 K m K_m Km和他时序上的五个相邻帧的位姿、速度和偏置进行优化,如下图所示:

对于 M m M_m Mm,包含了紧靠局部窗口前的关键帧,但是固定的;而对于 M a M_a 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 and Multi-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介绍)

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值