ORB-SLAM3 论文阅读笔记 + 无痛复现_orbslam3校准gazebo图像-程序员宅基地

技术标签: 论文阅读  笔记  整理以便浏览  

一、原文简译

摘要

ORB-SLAM3是一个基于视觉惯导紧耦合的系统,能够对多地图进行复用;另外支持单目/双目/RGB-D作为输入,支持针孔以及鱼眼相机模型。

  1. 提出了一种基于特征点法的视觉惯导 紧耦合 SLAM系统,这套系统在很大使用了最大后验估计对系统状态量进行求解,即使是在系统初始化阶段亦是如此。这套系统可在 大/小/室内/室外 各种环境下鲁棒实时运行,相较于之前的算法有2~5倍的精度提升。

  2. 提出了 多地图复用 技术,该技术使用了一种新的 高召回率的场景识别算法。正是依赖于这一点,ORB-SLAM3能够 有效应对长时间的弱纹理环境:当系统丢失时,它会先建立一个新地图,当再次经过之前走过的地点时,新地图与原地图无缝融合。

  3. 另外,与仅使用最后几秒信息的视觉里程计VO方案相比,ORB-SLAM3 在每个阶段都重用到了之前所有时刻的信息。这样可以利用到很久之前或者来自不同地图的信息,允许在包调整中包含共同可见的关键帧,提供高视差观察,提高精度,即使它们在时间上相隔很远,或者它们来自以前的映射会话。

实验表明,在 所有传感器配置 中,ORB-SLAM3 在学术领域已有的 SLAM 系统中表现最优。特别的,双目-惯性SLAM 在 EuRoC 无人机中实现了 3.5cm 的平均精度,在TUM-VI 数据集的房间中实现了 9mm 的快速手持运动,这是AR/VR场景的性能代表。

ORB-SLAM3 的结构框图:
orb-slam2结构图

ORB-SLAM2 的结构框图:
orb-slam2结构框
ORB-SLAM3基于ORB-SLAM2以及ORB-SLAM-VI进行了改进,基本上保持了ORB-SLAM2类似的框架。

I. INTRODUCTION 介绍

过去二十年,对视觉同步定位与构图系统(SLAM) 和 视觉里程计(VO) 的研究,主要基于纯视觉传感器 或 其与惯性传感器的结合。现代系统多依赖于最大后验(MAP)估计,如在视觉传感器的情况下对应于束调整(BA);在特征法中对应于最小化特征重投影误差的几何BA,在直接法中最小化所选像素集的光度BA

随着最近集成闭环技术的VO系统的出现,VO和SLAM之间的边界更加分散。视觉SLAM的目标是使用传感器在移动的智能体上建立环境地图并实时 计算该地图中智能体的姿态。相比之下,VO系统的重点是计算智能体的 自我运动,而不是构建地图。

SLAM地图的最大优势在于,它的地图数据允许在BA之前的观测中进行匹配和使用:

  1. 短期数据关联,匹配在最后几秒钟内获得的地图元素。这是大多数VO系统使用的唯一数据关联类型,一旦环境元素离开了视线,就会忘记它们,即使系统在同一区域移动,也会导致持续的估计漂移。
  2. 中期数据关联,匹配距离相机较近且累积漂移较小的地图元素。这些可以在BA中以与短期观察相同的方式进行匹配和使用,并且当系统在映射区域移动时允许达到零漂移。它们是我们的系统比具有环路检测的VO系统获得更好精度的关键。
  3. 长期数据关联,使用位置识别技术将观测结果与先前访问过的区域的元素匹配,而不考虑累积漂移(环路检测),当前区域先前被映射在一个断开的地图中(地图融合),或跟踪丢失(重新定位)。长期匹配允许重置漂移,并使用位姿图(PG)优化,或更准确地说,使用BA来纠正地图。这是在大中型环路环境下保证SLAM 精度的关键。

ORB-SLAM3 能够充分利用短期,中期和长期数据关联,在地图区域达到零漂移。在这里,我们进一步提供了多地图数据关联,这允许我们匹配和使用来自以前的地图会话的BA地图元素,实现了 SLAM系统的真正目标:构建以后可以使用的地图,以提供准确的定位

这本质上是一篇系统论文,其最重要的贡献是ORB-SLAM3库本身,这是迄今为止最完整、最精确的视觉、视觉惯性和 多地图SLAM系统 (表1):
在这里插入图片描述

ORB-SLAM3 创新点:

  1. 一个单目/双目的视觉惯性SLAM系统
    完全依赖于 最大后验(MAP)估计,即使在IMU(惯性测量单元)初始化阶段。所提出的 初始化方法已在文献[6]中提出?研究结果表明,即使在没有闭环的序列中,单目/双目视觉-惯性系统也比其他视觉惯性方法具有非常强的鲁棒性和显著的精度。

  2. 高召回率的位置识别技术
    许多近来的视觉SLAM和VO系统多使用DBoW2词袋库解决位置识别问题,DBoW2以牺牲召回率为代价提高精度,其要求在 时间、几何一致性之前,将三个连续的关键帧匹配到同一区域。因此,系统在闭合循环和重用先前映射的区域方面速度太慢。我们提出了一种新的位置识别算法,该算法 先检查候选关键帧的几何一致性,然后检查其与大多数情况下已经在地图上的三个共视关键帧的局部一致性。这种策略提高了召回率,强化了数据关联,提高了地图的准确性,但代价是计算成本略高。

  3. ORB-SLAM的 Atlas地图集
    第一个完整的多地图SLAM系统,能够处理单目和双目配置的视觉和视觉惯性系统。该地图集可以表示 一组断开的地图,并顺利地应用于它们的所有制图操作:位置识别,相机重定位,循环关闭地图融合。这允许自动使用和组合不同时间构建的地图,执行增量多会话SLAM。用于视觉传感器的ORB-SLAM Atlas 初版本已在[10]中提出?在此基础上我们加入了新的位置识别系统,视觉惯性多地图系统及其在公共数据集上的评估。

  4. 一个抽象的相机模型
    使SLAM系统不知道所使用的相机模型(个人理解是一个统一的视觉传感器输入的格式),并允许通过提供它们的投影、反投影和雅可比函数来添加新模型。我们提供了针孔模型和鱼眼模型的实现。

以上创新点再加上一些代码的优化,使ORB-SLAM3成为新的更精确的参考视觉和视觉惯性开源SLAM库。作者还提供了单目、双目、单目惯性和双目惯性SLAM结果之间的比较,这可能是从业者感兴趣的。

II. RELATED WORK 相关工作

A. 视觉SLAM

  1. MonoSLAM 首次使用扩展卡尔曼滤波器(EKF)ShiTomasi点 解决了单目SLAM的问题,这些点在后续图像中通过相关性进行引导搜索进行跟踪。使用了 保证特征匹配一致的技术,显著改善了中期数据关联,实现了手持视觉SLAM。
  2. PTAM是一种 基于关键帧 的方法。只使用关键帧来估计映射 而丢弃中间帧的信息,这允许在关键帧速率下执行更昂贵但更准确的BA优化。此外,它将 相机跟踪 和 映射 拆分为两个并行线程。
  3. 在相同的计算成本下,基于关键帧的技术比滤波更准确,成为视觉SLAM和VO的黄金标准。[56] Scale drift-aware large scale monocular SLAM 使用 滑动窗口BA ,[57] Double window optimisation for constant time visual SLAM 使用 双窗口优化共可见度图 分别实现了 大规模单目SLAM。
  4. 基于以上思想,ORB-SLAM2,3 使用ORB特征,其描述符提供短期和中期数据关联,构建 共可见度图限制跟踪和映射的复杂性 ,并使用 词袋DBoW2执行闭环和重定位以实现长期数据关联 。ORB- SLAM3 使用新的 Atlas系统,使系统在跟踪丢失时启动新地图,提高了其纯视觉SLAM的鲁棒性。此外,还使用了 新的位置识别方法 提高了召回率,从而提高了其在环路场景中的准确性。
  5. 直接法: 不提取特征,而是直接使用图像中的像素强度,通过最小化光度误差来估计运动和结构。LSD-SLAM 能够利用高梯度像素构建大比例尺半密集地图。然而,地图估计被简化为了 位姿图(PG)优化,精度低于PTAM 和ORB-SLAM2。
  6. 混合系统 SVO 提取FAST特征,采用直接法逐帧跟踪特征 和任何具有非零强度梯度的像素,并利用重投影误差优化像机轨迹和三维结构。SVO非常高效,但是作为一种纯粹的VO方法,它只进行短期的数据关联,这限制了它的准确性。
  7. 直接稀疏 Odometry DSO 能够在点检测器表现不佳的情况下计算准确的相机姿势,增强低纹理区域或模糊图像的鲁棒性。它引入了局部光度BA,同时优化了七个最近关键帧的窗口和点的逆深度。 该工作的扩展包括双目,利用特征和DBoW2 闭合环路,以及视觉惯性里程计
  8. 直接稀疏映射DSM 在直接法中引入了映射重用的思想,显示了中期数据关联的重要性。

B. 视觉-惯性SLAM

  1. 视觉-惯性传感器的组合提高了对弱纹理运动模糊遮挡的鲁棒性,并且使单目的尺度可知。MSCKF 通过特征边缘化避免了EKF在特征数量上的二次代价,是最早的紧耦合方法。OKVIS 是第一个基于关键帧束调整BA紧耦合视觉里程计系统,可以使用单目和双目。这些系统都是基于特征,但ROVIO使用直接数据关联提供具有光度误差的EFK
  2. ORB-SLAM-VI 是首个视觉-惯性 SLAM系统,具有短期、中期和长期数据关联,并将其用于基于IMU预积分的精确局部视觉惯性BA。然而,它的IMU初始化技术太慢,需要15秒,这损害了鲁棒性和准确性。[62] Closed-form solution of visual-inertial structure from motion、[63] Simultaneous state initialization and gyroscope bias calibration in visual inertial aided navigation 提出了更快的IMU初始化技术,该技术基于一种封闭形式的解来联合检索尺度、重力、加速度计偏差和初始速度以及视觉特征深度。问题在于它们忽略了IMU的噪声特性,并最小化了空间中点的3D误差,而不是它们的重投影误差(是基于特征的视觉的黄金标准),这会导致巨大的不可预测的错误。
  3. VINS-Mono 是一种非常精确和鲁棒的单目惯性里程计系统,环路闭合使用DBoW2和4 DoF位图优化地图融合特征跟踪使用Lucas-Kanade跟踪器执行,比描述符匹配稍微鲁棒一些。在vin - fusion将其扩展至 双目双目-惯性
  4. VI-DSO 将DSO扩展到视觉惯性里程计,提出了一种将惯性观测与所选高梯度像素的光度误差相结合的 光束平差法(BA),可以提供非常好的精度。由于成功地利用了高梯度像素的信息,增强了图像在弱纹理场景的鲁棒性。他们的初始化方法依赖于视觉惯性BA,需要20-30秒才能在1%的尺度误差内收敛。
  5. BASALT 是一种双目惯性里程计,它从视觉惯性里程计中提取非线性因素用于BA,并闭合与ORB特征匹配的回路,达到了非常好的精度。
  6. Kimera 是一种新型的出色的 度量语义映射系统,但其度量部分由立体惯性里程计加上DBoW2闭环和姿态图优化组成,实现了与VINS-Fusion相似的精度。
  7. ORB-SLAM3将 ORB-SLAM-VI 扩展至双目-惯性。此外,提出了一种基于最大后验估计的IMU快速初始化方法,该方法适当地考虑了视觉和惯性传感器的不确定性,在2秒内以5%的误差估计出真实尺度,在15秒内收敛到1%的尺度误差。

以上除了ORB-SLAM3以外的所有系统都是视觉-惯性里程计,其中一些扩展了闭环,并且缺乏使用中期数据关联的能力。ORB-SLAM3的数据关联能力 加上快速和精确的初始化,使系统即使在没有循环的序列中也能始终获得更好精度的关键。

C. 多地图SLAM

  1. [65] Unified loop closing and recovery for real time monocular SLAM 是一种滤波的方法, 首次提出了通过地图创建和融合来增强 跟踪损失 鲁棒性的想法。
  2. [66] Video-rate localization in mul-tiple maps for wearable augmented reality 是第一个基于关键帧的多地图系统,但地图需要手动初始化,系统无法合并或关联不同的子地图。其将多地图功能作为协作地图系统的一个组成部分进行了研究,多个地图代理和一个只接收信息的中央服务器或像C2TAM那样具有双向信息流。
  3. MOAR-SLAM为协作多设备SLAM提出了一个健壮的无状态客户机-服务器架构,但主要关注的是软件架构,没有给出准确的结果。
  4. 最近,CCM-SLAM 在ORB-SLAM的基础上提出了一种双向信息流的多无人机分布式多地图系统。他们的重点是克服有限带宽和分布式处理的挑战,而我们的重点是准确性和鲁棒性,在EuRoC数据集上取得了显着更好的结果。
  5. SLAMM也提出了ORB-SLAM2的多地图扩展,但将子地图作为分离的实体,而我们执行无缝地图合并,构建更精确的全局地图。
  6. VIN-Mono 是一种视觉里程计系统,具有闭环和多地图功能,依赖于DBoW2做位置识别。由于能够使用中期数据关联,ORB-SLAM3在EuRoc数据集上的单目-惯性 单次操作 精度是VINS-Mono的2.6倍。
  7. ORB-SLAM3的Atlas系统也建立在DBoW2的基础上,但由于提出了一种新的更高召回率的位置识别技术,并使用局部BA进行更详细和准确的地图合并,在EuRoC上的多会话操作中,将精度提高到VINS-Mono的3.2倍。

III. SYSTEM OVERVIEW 系统概述

- - Atlas多地图系统
其中包含一个活跃地图 和 许多非活跃地图。活跃地图用于跟踪线程的定位,同时会增加关键帧。该系统建立了一个独特的DBow2关键帧数据库,用于重定位 、循环关闭 、地图融合等操作。
- - 跟踪线程
处理传感器信息,实时计算当前帧相对于活动地图的姿态。给活动的地图提供新的帧,最小化匹配地图特征的重投影误差(单帧),决定当前帧是否成为关键帧。在视觉惯性模式下,通过IMU惯性残差计算本体的速度与IMU bias。当跟踪丢失时,尝试在Atals所有地图中重新定位当前帧,如果重定位成功则恢复跟踪,切换当下的活跃地图。如果几帧过后失败,则重新开始一个新的地图。
- - 局部地图线程
添加新的关键帧与MapPoint到活动的地图中,删除冗余关键帧,利用滑动窗口通过BA更新地图。在惯性视觉模式下,该线程还负责 IMU的参数初始化和更新,使用的是作者提出的最大后验估计技术。
- - 循环闭合与地图融合线程
每添加一个关键帧,就检测活跃地图与整个Atlas 的公共区域,如果公共区域属于活跃地图,则进行环路校正;如果它属于不同的地图,两个地图将无缝地合并为一个地图,这将成为活动地图如果检测到属于活跃地图,则执行回环矫正,如果不属于同一个地图,则将他们融合成一个。在矫正后另开一个线程进行整体的BA进一步更新地图且不影响实时性。检测回环的同时,完成有共视子图地图的合并等操作,这也是作者强调最终能生成一个全局一致地图的原因。

VI. CAMERA MODEL 相机模型

以往的ORB-SLAM算法假定为针孔像机模型,现在希望通过提取与摄像机模型相关的所有属性和投影函数(包括投影函数、反投影函数和 雅可比矩阵等)到单独的模块中,来解耦相机模型和SLAM算法,从而使得系统可以使用任何摄像机模型。 ORB-SLAM3库中除了针孔模型外,还提供了Kannala-Brandt 鱼眼模型。

由于大多数流行的计算机视觉算法假设针孔相机模型,许多SLAM系统要么纠正整个图像,要么纠正特征坐标,以在理想的平面视网膜(相机的归一化平面)中工作。

然而,这种方法对于鱼眼镜头是不合适的,鱼眼镜头可以达到或超过180度的视场(FOV)。由于外围的物体被放大,中心的物体分辨率变松,阻碍了特征匹配,因此不能对图像进行校正。校正特征坐标需要使用小于180度的视场,这给许多假设沿图像均匀重投影误差的计算机视觉算法带来了麻烦,而在校正后的鱼眼图像中远非如此。这迫使裁剪出图像的外部部分,失去了大视场的优势:更快的环境映射和更好的遮挡鲁棒性。

A. 重定位

一个强大的SLAM系统需要在跟踪失败时重新定位相机的能力。ORB-SLAM通过设置一个 基于ePnP算法的视角-n点求解器 来解决重新定位问题,该算法假设在所有公式中都有一个校准的针孔相机。ORB-SLAM3 采用了 最大似然视角-n点算法 (MLPnP),该算法使用射影射线作为输入,可以独立于所使用的相机模型。相机模型只需要提供一个从像素传递到投影光线的重投影函数,就可以使用重定位。

B. 非矫正双目SLAM

大多数双目视觉SLAM系统都是假设左右两帧已经进行过极线校正, 即两幅图像都被转换为使用相同焦距的针孔投影,图像平面共面并与水平极线对齐,这样图像中的特征可以很容易地在另一个图像中找到匹配,以降低特征搜索区域。 然而,校正双目图像的假设是非常严格的,很多情况下是不合适的,如鱼眼相机中图像会被过度裁剪,失去大视场的优点,降低了鲁棒性。

由于这个原因,我们的系统不依赖于图像校正,考虑到 双目相机作为两个单目像机,它们之间具有: a.恒定的,相对Se(3)变换; b.可选地,一个场景共视图像区域
这些约束算法在对极约束三角测量新地标)和 BA优化 时能有效地估计地图。

上述两个约束可以用来有效地估计尺度。按照这种思路,ORB-SLAM3 可估计 6 DOF的刚体机体位姿,注意,机体与某相机或IMU固连上。另外,若两个相机之间存在共视,我们可以在通过三角化恢复路标点的尺度。注意:仅在首次看到该其区域的路标点时进行三角化,其它时刻只使用单目信息。

V. VISUAL-INERTIAL SLAM 视觉-惯性SLAM

ORB-SLAM-VI 是第一个实现地图复用 (数据关联)的视觉-惯性SLAM系统。然而,它仅限于针孔单目像机,且初始化时间太长,无法应对一些具有挑战性的场景。
基于以上工作,ORB-SLAM3 设计了一种 快速准确的IMU初始化技术,以及开发了一种单目/双目-惯导SLAM,支持针孔以及鱼眼相机图像作为输入。

A. 基础

纯视觉SLAM中,估计状态仅包括 当前相机姿态,而在视觉-惯性SLAM中,需要计算额外的变量。它们是世界坐标系中的 机体位姿 Ti = [Ri, pi] ∈SE(3), 速度vi,以及陀螺仪、加速度计偏差 bgi 和 bai,它们被假定为根据布朗运动进化。这就引出了状态向量:
在这里插入图片描述
对于视觉-惯导SLAM 需要对两帧之间做IMU预积分,以获得角度变化、速度变化与位置变化,还有一个关于全部测量向量的信息矩阵,定义为惯性残差
在这里插入图片描述
帧与3D点之间的视觉残差,即重投影误差
在这里插入图片描述
其中Π表示相机的投影方程,⊕ 表示李群 SE(3) 在三维空间上的转换运算。

视觉惯性优化目标函数最小化残差,同时也使用鲁棒的Huber核函数ρHub 来减少虚假匹配的影响, 这种优化在跟踪和映射过程中会降低效率。
在这里插入图片描述

B. IMU初始化

这一步的目的是 获取IMU参数较好的初始值:速度,重力方向,以及IMU偏差。VI-DSO 试图从头开始求解视觉惯性BA,避开特定的初始化过程,来获得惯性参数的缓慢收敛(长达30秒)。

在这项工作中,我们基于三个关键见解提出了一种快速准确的初始化方法:

纯单目SLAM可以提供非常准确的初始地图,但尺度未知。先解决视觉问题可以增强IMU初始化性能。
如果将尺度scale显式表示为优化变量,而不是使用BA的隐式表示,则scale收敛得更快
若在IMU初始化过程中忽略传感器不确定性 (噪声),会产生大量不可预测的错误

根据以上三点,本文设计了如下基于最大后验估计的IMU初始化算法,分为三步:

Step1: Vision-only MAP Estimation

以4Hz的关键帧插入速率,持续运行纯单目 2s,然后可以得到按比例缩放的地图,包括个10关键帧以及上百个地图点,然后通过 仅视觉BA 进行优化,因子图如下图所示。于是得到优化后的轨迹,其中上划线表示按比例缩放的变量(即尺度未定)。
在这里插入图片描述在这里插入图片描述

Step2: Inertial-only MAP Estimation

这一步目的是获得IMU参数最优估计。利用T0k以及这些关键帧之间的IMU测量数据,惯导参数向量
在这里插入图片描述

其中 s表示尺度因子。Rwg表示旋转矩阵,用于计算世界系中的重力向量 g = Rwg *gI,gI = (0, 0, G)T,G为重力大小模值。b = (ba, bg) ∈ R6,是初始化时假定的加速度计和陀螺仪的恒定偏差,初始化阶段假设为常数。v0k ∈ R3 表示从首帧到末尾帧的无尺度机体速度。此时,我们有IMU的测量,于是MAP估计问题中的需要被最大化的后验分布为:在这里插入图片描述

具体地,p(I0:k|Yk)表示似然,p(Yk)表示先验,考虑到IMU测量的独立性,于是最大后验概率估计问题可表示为:
在这里插入图片描述

对IMU预积分和先验分布取负对数,假设高斯误差,于是最终的优化问题可以表示为:在这里插入图片描述

这个优化问题的因子图表示为下图,可以看到上式中不包含视觉残差,而是多了一个先验残差项用来约束IMU的偏差接近0。
在这里插入图片描述在这里插入图片描述

在流形中进行优化时会对尺度进行更新,以在优化过程中更新重力方向估计(因为重力方向默认向下的,绕着重力方向的旋转轴不管怎么转都不影响,这点在VIORB论文中也有介绍):
在这里插入图片描述

其中 Exp(.) 表示从R3 到SO(3) 的指数映射。为了保证优化过程中尺度因子保持正数,尺度因子的更新形式为如下形式:
在这里插入图片描述

一旦完成了纯惯性优化,帧姿态、速度以及3D地图点 就会根据估计的尺度进行缩放,并旋转以使z轴对齐重力方向。偏差更新和IMU预积分重复,旨在减少未来的线性化误差。

Step3: Visual-Inertial MAP Estimation

一旦视觉以及IMU有了较好的估计后,进行一个 视觉-惯性 联合优化 进一步对这些参数进行精化,优化因子图见下图。
在这里插入图片描述 在这里插入图片描述

作者在EuRoC数据集上进行测试发现上述初始化方式非常有效,可达到2秒内仅5%的误差。为了进一步提升初始估计精度,初始化后会进行5~15秒的VI BA优化,这样可以收敛到仅1%的尺度误差。相较于ORB-SLAM-VI 需要15秒才获得首个尺度因子更加快速,或者VI-DSO中使用的从一个大尺度误差开始的初始化方法,需要20-30秒才能收敛到1%。经过了这些BA操作之后,我们就认为这个map是成熟的,意味着比例尺、IMU参数和重力方向已经得到了准确的估计

慢速运动 不能为IMU参数提供好的可观性,会使初始化无法在仅15秒内收敛到精确的结果。为了应对这种情况,本文基于修改版“Inertial-only MAP Estimation”的提出了一种尺度精化技术:所有插入的关键帧都参与优化,但优化量只有重力向以及尺度因子,优化因子图见下图,在这种情况下bias为常数的假设就不再成立。我们使用了每帧的估计量并固定它们。上述的这种操作非常高效,在Local Mapping线程每隔10秒执行一次,直到Map中有100个关键帧或者从初始化起已经过了75秒。
在这里插入图片描述在这里插入图片描述

C.跟踪和建图

跟踪借鉴了ORB-SLAM-VI 的思路:解决了简化版的视觉-惯性 优化问题,只优化最后两帧位姿,同时保持地图点固定
建图过程是为了解决全图优化问题,若图的规模比较大,这个问题会变得很棘手。本文采用了滑动窗口的思想,即维护了关键帧与地图点的滑动窗口,同时包括它们的共视关键帧,只是在优化时需要保持这些关键帧固定状态。

D.对跟踪丢失的鲁棒性

在纯视觉SLAM或VO系统中,遮挡、快速运动和无纹理环境 易导致视觉元素失去跟踪而使 系统丢失。ORB-SLAM2 采用了基于词袋的位置识别技术进行快速的重定位,但它们仍不足以解决EuRoC数据集中的困难序列。

ORB-SLAM3 的视觉-惯性系统在追踪到少于15个特征点时就会进入视觉丢失状态

  1. 短期丢失通过IMU数据对当前帧状态进行估计,在估计的相机位姿中投影地图点,并在大图像窗口中搜索匹配。匹配结果包含在视觉惯性优化中。大多数情况下,通过这种方式就能够恢复视觉跟踪。否则,5秒后进入下一阶段;
  2. 长期丢失:如前文所述,初始化新的视觉-惯性地图,并成为活动地图。
    如果IMU初始化后15秒内系统就丢失,则丢弃该地图。这可以防止累积不准确和无意义的地图。

VI. MAP MERGING AND LOOP CLOSING 地图融合和循环闭合

由前文的介绍可知,帧和活动地图之间的 短期和中期数据关联 可通过跟踪映射线程实现:将地图点投影到估计的相机位姿中并在只有几个像素的图像窗口中搜索匹配。而对于长期数据关联,可通过 重定位以及循环检测 来完成。

ORB-SLAM采用了基于DBoW2的词袋位置识别系统来进行重定位和环路检测,这种方法也被最新的VO和SLAM系统采用,实现了闭环(表1)。但若候选关键帧只有1个,召回率为50-80%为了应对假阳性的干扰,算法的时域校验以及几何校验会够使精确率达到100%的同时召回率降低到30-40%。至关重要的是,时域连续性检测将使场景识别滞后至少3个关键帧,同时降低召回率。当尝试在我们的Atlas系统中使用它时,我们发现这种延迟和低召回经常导致相同或不同地图中的重复区域。

为了应对这个问题,本文提出一种新的场景识别(召回率得到改善)以及多地图数据关联的算法。场景识别算法会为每一个关键帧寻找其在Atlas中的数据关联若匹配关键帧在活动地图中,则进行闭环;否则就进行多地图间的数据关联,即将 active map与匹配的 inactive map进行融合

一旦这个新的关键帧与匹配地图间的相对位姿被计算出,就定义一个局部窗口,这个局部窗口包括匹配的关键帧以及这个关键帧的共视关键帧。在这个局部窗口中,我们会搜索中期数据关联,以提高闭环以及地图融合的精度。这个改进使得ORB-SLAM3比ORB-SLAM2具有更高的精度。

A. 位置识别

与ORB-SLAM2基本类似,ORB-SLAM3 只是增加了重力向校验的步骤。具体的,计算出当前关键帧在匹配地图(可能是active map或者其它地图)中的位姿,检验 俯仰角(pitch) 和 横滚角(roll) 是否小于一定阈值来对场景识别结果进行校验。

为了获得更高的召回率,对于每个新的活动关键帧,我们在DBoW2词袋库中查询Atlas中几个相似的关键帧。为了达到100%的精度,每个候选对象都要经过几个步骤的几何验证。所有几何验证步骤的基本操作包括检查图像窗口内是否存在描述符与映射点的ORB描述符匹配的ORB关键点,使用它们之间的汉明距离的阈值。如果在搜索窗口中有多个候选项,为了丢弃模棱两可的匹配项,我们检查与第二接近匹配项的距离比。我们的位置识别算法的步骤如下:

  1. DBoW2 查找候选关键帧。使用活动关键帧Ka 查询Atlas DBoW2数据库,以检索三个最相似的关键帧,不包括与Ka共可见的关键帧。我们将位置识别的每个匹配候选者称为Km。
  2. 局部窗口内关键点匹配。对于每个Km,定义一个局部窗口,其中包括Km,其最佳共可见关键帧以及所有Km观察到的地图点。DBoW2直接索引在Ka和本地窗口关键帧中的关键点之间提供了一组假定的匹配。对于每一个2D-2D匹配,我们也有相应地图点之间的3D-3D匹配。
  3. 三维对齐变换。使用RANSAC计算了能更好地将Km局部窗口的地图点与Ka局部窗口的地图点对齐的变换Tam。在纯单目或地图尚不成熟的单目惯性情况下,计算 Tam∈Sim(3),否则计算Tam∈SE(3)。在这两种情况下,我们都使用Horn算法,使用三个3D-3D匹配的最小集来找到Tam的每个假设。假设匹配在经过Tam对Ka中的地图点进行变换后,在Ka中实现低于阈值的重投影误差,则对假设进行正面投票。如果票数超过阈值,则选择票数较多的假设。
  4. 引导匹配细化。用Tam变换局部窗口中的所有地图点,以找到更多与Ka中的关键点匹配的点。搜索也是反向的,在本地窗口的所有关键帧中寻找Ka映射点的匹配。利用找到的所有匹配,通过非线性优化对Tam进行改进,其中目标函数为双向重投影误差,使用Huber影响函数剔除虚假匹配。如果优化后的内层数超过阈值,则使用更小的图像搜索窗口启动引导匹配和非线性细化的第二次迭代。
  5. 三个共视关键帧的验证。为了避免误报,DBoW2在三个连续关键帧中等待位置识别触发,延迟或丢失位置识别。我们的关键见解是,大多数时候,验证所需的信息已经在地图上。为了验证位置识别,我们在地图的活动部分搜索与Ka共可见的两个关键帧,其中与局部窗口中的点匹配的数量超过阈值。如果没有找到,则用新的传入关键帧进一步验证,而不需要再次触发词袋。验证将继续进行,直到三个关键帧验证Tam,或两个连续的新关键帧未能验证Tam。
  6. 重力方向验证。在视觉惯性情况下,如果活动地图是成熟的,我们估计 Tam∈SE(3)。我们进一步检查俯仰角和滚转角是否低于确定接受位置识别假设的阈值。

B. 视觉 地图融合

当位置识别成功后,位于 活动地图Ma 中的 当前关键帧Ka 与 非活动地图Mm 中的 匹配关键帧Km 之间就产生了多地图的数据关联,此时会进行地图融合。通过对齐变换Tam启动地图合并操作,此过程须格外小心,以确保跟踪线程可以迅速重用Mm中的信息,避免地图重复。为此,我们建议将Ma地图纳入Mm参考。

由于Ma可能包含许多元素,并且融合它们可能需要很长时间,因此融合分为两步:
首先,在由Ka和Km的邻域定义的焊接窗口 (welding window) 中进行融合;在第二阶段,通过位姿图优化将修正传播到融合图的其余部分 (均分误差)。具体过程如下:

  1. 焊接窗口组装
    焊接窗口包括当前关键帧Ka及其共可见关键帧匹配关键帧Km及其共可见关键帧,以及它们观测到的所有地图点。在将 Ma的关键帧和映射点放入焊接窗口之前,通过Tma变换使它们对齐Mm
  2. 地图融合
    Ka与Km融合为一个新的活动地图。为了去除重复点关键帧Ka主动搜索匹配Mm中的点。对于每个匹配点,都会删除Ma中的点,并保留Mm中的点,同时更新共视图以及基本图。
  3. 局部BA
    优化焊接窗口中Ma和Mm的所有关键帧以及它们所观察到的映射点(图3a)。为了确定尺度自由度,将焊接窗口外能够观察到局部地图点的关键帧包含在BA中,并固定其姿态。优化完成后,焊接区域中包含的所有关键帧都可以用于跟踪,以实现地图Mm的快速准确重用。
    在这里插入图片描述
  4. 基本图优化。焊接区域内的关键帧保持固定,利用合并图的基本图进行姿态图优化。这种优化将修正从焊接窗口传播到图的其余部分(这一步的意义在于分摊误差

C.视觉-惯性 地图融合

视觉-惯性 融合算法与纯视觉相似,只是为了更好地利用惯性信息,修改步骤 1) 和步骤 3):

  1. VI焊接窗口组装:如果活动地图成熟,与纯视觉类似,对Ma应用 Tma∈SE(3) 变换,然后将其放入焊接窗口中。如果活动地图不成熟,我们应用 Tma∈Sim(3) 来对齐Ma。
  2. 地图融合。
  3. VI局部BA。
    关键帧Ka和Km 及其前5个时间点 的 关键帧姿态、速度和偏差都参与优化,这些变量与IMU预积分项相关(图3b)。对于Mm来说,局部窗口之前的关键帧是固定的,而对于Ma来说,局部窗口之前的关键帧是包含的,姿态仍然参与优化。
  4. 基本图优化。
    关键帧Ka和Km 及其前5个时间点的关键帧 看到的所有地图点,以及来自Km和Ka共视关键帧的姿态都被优化。所有关键帧和关键点通过重投影误差(作为约束因子,蓝色小方块)相关联。
    重投影误差项(蓝色方块),IMU预积分项(黄色方块),偏差随机游走(紫色方块)
    a

D.循环关闭

闭环校正算法类似于地图融合,只是在这种情况下,当前关键帧以及匹配关键帧都属于活跃地图。
焊接窗口仍由匹配的关键帧组合而成,检测和融合重复的3D点,更新共视图以及基本图的连接关系。
然后是位姿图优化(PG),将环路校正传播到地图的其余部分(均分误差)。
由于闭环增加了中期/长期数据关联,此时进行全局BA。在视觉惯性情况下,仅在关键帧的数量低于阈值时才执行全局BA,以此避免巨大的计算量。

VII. EXPERIMENTAL RESULTS 实验结果

• EuRoC单一会话:依次处理11个序列场景并生成地图;传感器配置:单目,单目+IMU,双目,双目+IMU
• TUM-VI数据:评估单目/双目鱼眼惯性配置下的性能
• EuRoC和TUM-VI 数据集下的多会话实验
• 比较计算时长

精度评估 使用 RMS ATE,纯单目使用Sim(3)变换 / 其余配置使用SE(3)变换,将估计轨迹与地面真实对齐
尺度误差 计算使用 s 从 Sim(3) 对齐,为 |1−s|。
所有实验 仅使用了Intel 酷睿 i7-7700 CPU,3.6GHz,32GB内存

A. 单对话视觉SLAM on EuRoC

table2:四种传感器配置的ORB-SLAM3与最先进的相关系统的性能比较(10次执行中位数):
在这里插入图片描述
在单目和双目配置中,ORB-SLAM3 比 ORB-SLAM2 更精确,因为更好的位置识别算法可以更早地关闭循环并提供更多的中期匹配。有趣的是,第二好的结果是DSM,它也使用中期匹配,尽管它没有闭环。
在单目-惯性配置下,ORB-SLAM3 的精度是MCSKF、OKVIS和ROVIO 的 5-10倍

B. 视觉惯性SLAM on TUM-VI Benchmark

ORB-SLAM3在TUM-VI 数据集上的 10次执行结果:
在这里插入图片描述

ORB-SLAM3与其他常见的 单目/双目-惯性 系统在TUM VI 序列上的性能(3次中值):
在这里插入图片描述

ORB-SLAM3 在房间序列中的表现(典型的AR/VR应用,3次中值):
在这里插入图片描述

C. 多对话SLAM

EuRoC 数据集上的多对话 精度/尺度 误差评估:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

D. Computing Time

Table VI:跟踪和映射过程中 主要操作的运行时间
在这里插入图片描述
ORB-SLAM3 能够以每秒30-40帧 和 3-6个关键帧 的速度实时运行。
在跟踪线程中,惯性部分占用的时间可忽略不计,实际上可以使系统更高效,因为帧速率可以安全地降低。
在映射线程中,每个关键帧中较高数量的变量在惯性局部BA中被较少数量的关键帧所补偿,以相似的运行时间实现更好的精度。由于跟踪和映射线程总是在活动映射中工作,因此多映射不会带来显著的开销。

Table VII:循环关闭和地图融合过程中 主要操作的运行时间
在这里插入图片描述
该方法每个关键帧只需要10毫秒的时间。合并和循环关闭的时间保持在一秒以下,只运行一个姿态图优化。对于循环关闭,执行一个完整的包调整可能会增加几秒钟的时间,这取决于所涉及的映射的大小。在任何情况下,由于这两个操作都在单独的线程中执行(图1),它们不会干扰系统其余部分的实时性能。视觉惯性系统只执行两次地图合并来连接三个序列,而视觉系统执行一些额外的合并来恢复跟踪损失。由于其较低的漂移,与纯视觉系统相比,视觉惯性系统也执行较少的闭环操作。

VIII. CONCLUSIONS 结论

ORB-SLAM3 视觉,视觉惯性和多会话SLAM的最完整的开源库,具有 单目,双目,RGB-D,支持针孔和鱼眼相机。除了我们的主要贡献,从集成库本身来看,是快速准确的IMU初始化技术,以及依赖于提高了召回率的新位置识别技术多会话地图融合功能。这使得该系统更加适合长时/大规模SLAM实际应用。

实验结果表明,ORB-SLAM3是第一个能够有效利用短期,中期,长期和多地图数据关联的视觉和视觉惯性系统,其精度水平已经超过了现有系统。实验结果还表明,关于精度,使用所有这些类型的数据关联的能力会超过其他选择,如使用直接方法代替特征点法或对局部BA执行关键帧边缘化,而不是像我们那样假设一组外部静态关键帧。

ORB-SLAM3的主要失败案例是低纹理环境直接法在低纹理环境中可能更鲁棒,但仅限于短期和中期数据关联。另一方面,特征描述符 成功地解决了长期和多地图数据关联问题,但在跟踪方面不如使用光度信息的Lucas-Kanade。一个有趣的研究方向可能是开发适合这四个数据关联问题的光度测定技术,我们目前正在根据这个想法探索从人体内部的内窥镜图像构建地图法。

在四种不同的传感器配置中,双目惯导SLAM提供了最可靠,最准确的解决方案。此外,惯性传感器允许以IMU速率估算姿势,IMU速率比帧速率高几个数量级,这可能也会在某些领域发挥优势(如AR/MR等领域)。对于设备体积/成本受限等应用,可以选择使用单目-惯导方案,精度与鲁棒性并不会下降多少,只需要记住,在勘探过程中,单纯的旋转无法估算深度

在慢速运动或没有旋转和俯仰旋转的应用中,例如在平坦区域中的汽车,IMU传感器可能难以初始化。在这些情况下,推荐双目SLAM。

或者,使用CNN进行单目深度恢复的最新研究成果为单目SLAM恢复尺度提供了良好的前景,但是需要保证在同样的环境中对网络进行了训练(泛化性问题)

二、代码复现

请移步博文 ORB-SLAM2代码复现,步骤不能说差不多,只能说完全一样。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45442591/article/details/132697172

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签