ORB-SLAM3详细解析

ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM(Simultaneous Localization and Mapping,即同时定位与地图构建)系统,以下是对其的详细解析:

一、系统概述

ORB-SLAM3可以在单目、双目和RGB-D相机上利用针孔或者鱼眼模型运行。它是第一个基于特征的紧耦合的视觉惯性里程计(VIO)系统,仅依赖于最大后验估计(包括IMU在初始化时)。这样的系统效果是:不管是在大场景还是小场景,室内还是室外,都能鲁棒实时地运行,且在精度上相比于上一版提升了2到5倍。

二、系统特点与创新

  1. 数据关联与混合地图

    • ORB-SLAM3是第一个可能对短期、中期、长期数据进行数据关联的视和视觉惯导的系统。
    • 根据改进recall的新的重定位模块来构建的混合地图,这个模块可以让ORB-SLAM3在特征不是很好的场景中长期运行。当视觉里程计失败的时候,系统会重新构建地图并将这个地图和原来构建的地图对齐。
    • Atlas是一个由一系列离散的地图组成的混合地图,会维护一个active map来定位新的关键帧。local mapping线程会不断地优化更新这个地图。Atlas里还有non-active地图。
  2. 重定位与地图融合

    • 当跟踪线程跟丢时,跟踪线程会尝试在所有的Atlas中完成当前帧的重定位。如果重定位成功,跟踪就被拉回;否则,过一段时间后,activate会重新存储为non-active,并初始化一个新的active map。
    • 闭环检测和地图融合线程会在active map和整个Atlas中检测相同的区域。如果相同的区域在active中,就会执行闭环的过程;如果属于不同的map,它们就会被融合为一个地图。
  3. 抽象的相机表示

    • 使SLAM系统与所使用的相机模型无关,并允许通过提供投影、非投影和雅可比函数来添加新模型。系统提供了针孔模型和鱼眼模型的实现。
  4. 视觉-惯导融合

    • ORB-SLAM3是一个单目和双目的视觉惯导SLAM系统,全部依赖于最大后验估计(MAP),即使是在IMU初始化的时候。
    • 在有惯导的情况下,IMU的参数是利用MAP估计来初始化和优化的。
  5. 召回场景识别

    • 召回场景识别采用先检查候选关键帧的几何一致性,然后检查与三个共视关键帧的局部一致性策略。以略高的计算成本为代价,增加了召回率并增加了数据关联,提高了地图准确性。

三、系统框架与流程

ORB-SLAM3的系统框架主要包括数据处理、初始化、视觉里程计、地图维护、闭环检测等部分。具体流程如下:

  1. 数据处理:对获得的视觉图像进行特征提取和畸变矫正。同时,根据预测模型计算当前帧IMU提供的位姿。
  2. 初始化:进行IMU数据的单目初始化。在视觉跟踪丢失时,IMU可以提供短时间的位姿。在恒速跟踪模型中,如果IMU完成初始化,当前帧位姿初始值可由IMU的预测模型得到。
  3. 视觉里程计:以第一帧图像为参考帧,对后续的视觉帧进行特征匹配、位姿求解(对极约束)和三角化,完成3D地图点的生成,供后续PNP(3D-2D)求解。
  4. 地图维护:主要维护地图中的地图点。由于每个地图点都会被许多相机观测到,每个关键帧都有相对地图点的不同描述子,因此在新关键帧插入后,需要对每个受新关键帧影响的地图点法向量、描述子等进行更新。
  5. 闭环检测:主要通过视觉词典完成当前帧与历史关键帧之间相对位姿的求解。如果检测到两关键帧是同一地点,会根据情况执行回环矫正或地图合并。

四、性能与应用

ORB-SLAM3在EuRoC数据集上达到了平均3.6cm的精度,在TUM-VI这种利用手持设备快速移动的数据集(AR/VR场景)上达到了9mm的精度。其应用场景包括但不限于机器人导航、自动驾驶、增强现实(AR)和虚拟现实(VR)等领域。

综上所述,ORB-SLAM3是一个高精度、鲁棒性强的SLAM系统,具有广泛的应用前景和重要的研究价值。

ORB-SLAM3的代码详细解析可以从其系统结构和主要模块入手,以下是对其代码的详细解析:

五、系统结构

ORB-SLAM3的代码结构清晰,主要包括主程序(main)、前端模块(tracking)、后端核心模块(localmapping和loopclosing)、可视化工具(viewer)以及工具函数和通用模块(utils)。

六、主要模块

  1. 主程序(main)

    • 功能:负责系统的初始化,包括参数读取、系统对象创建以及相关线程的启动等操作。
    • 实现:在初始化ROS(如果使用ROS版本)系统后,创建ORB_SLAM3系统对象,并准备好图像和IMU(如果有)的数据获取接口。
  2. 前端模块(tracking)

    • 功能:主要负责相机姿态估计和特征点跟踪。
    • 实现:
      • 使用ORBextractor类进行特征点提取。首先对输入的图像进行预处理,例如灰度化、高斯滤波等操作,以减少噪声对特征点提取的影响。然后根据ORB算法的原理,在图像上检测角点,并计算这些角点的特征描述符。
      • 使用Matcher类进行特征点匹配。常见的匹配方法包括暴力匹配和基于FLANN(Fast Library for Approximate Nearest Neighbors)的匹配。为了提高匹配的准确性,还会进行一些筛选操作,例如去除距离过大的匹配对(可能是错误的匹配),或者使用RANSAC(Random Sample Consensus)算法来估计基础矩阵,并根据基础矩阵进一步筛选匹配对。
      • 估计当前帧位姿:对于后续的每一帧图像,通过与之前的关键帧进行特征点匹配,利用PnP(Perspective-n-Point)算法或者其他位姿估计方法来估计当前帧的相机姿态。
      • 优化当前帧位姿:使用优化算法(如Gauss-Newton法或Levenberg-Marquardt法)对估计的相机姿态进行优化,以提高姿态的准确性。
  3. 后端核心模块

    • localmapping:管理和优化局部地图。

      • 功能:关键帧管理、地图点管理、局部BA优化等。
      • 实现:决定哪些帧应该被选为关键帧,管理关键帧之间的连接关系,构建共视图(Covisibility Graph)。当新的关键帧被创建时,会将关键帧中的特征点初始化为地图点,并插入到局部地图中。同时,会根据特征点的匹配关系和三角测量原理,计算地图点的3D位置。定期进行局部束调整(Bundle Adjustment)优化,以优化局部地图中关键帧的姿态和地图点的位置。
    • loopclosing:回环检测和闭环优化模块。

      • 功能:用于检测历史轨迹中的回环,并对全局地图进行优化以消除累积误差。
      • 实现:检测当前帧是否与历史关键帧形成回环。如果检测到可能的回环,会进行进一步的验证。当回环被确认时,会计算当前帧与回环关键帧之间的变换矩阵,并基于回环检测的结果进行全局图优化。全局优化会同时考虑所有的关键帧和地图点,通过最小化全局的重投影误差来调整关键帧的姿态和地图点的位置。
  4. 可视化工具(viewer)

    • 功能:通过OpenGL等技术实现实时的3D视图显示,帮助用户直观地观察SLAM系统的运行情况和构建的地图。
    • 实现:从ORB_SLAM3系统中获取最新的相机姿态、地图点等信息,并将这些信息转换为可视化的格式,例如将3D点转换为OpenGL中的顶点数据,将相机姿态转换为视图变换矩阵。然后使用OpenGL等图形库进行渲染,绘制出当前的地图和相机轨迹。
  5. 工具函数和通用模块(utils)

    • 功能:包含各种工具函数和通用模块,例如数学运算、文件操作、时间处理等辅助功能,为其他模块提供支持。

七、代码运行流程

  1. 系统初始化:首先进行一些基本的设置和参数读取,例如读取配置文件中的相机参数、IMU参数(如果使用)、地图保存路径等信息。然后根据配置创建ORB_SLAM3系统对象,该对象是整个SLAM系统的核心控制对象,它会管理各个模块的运行和交互。
  2. 数据获取线程启动:创建图像和IMU数据的获取线程。如果是从摄像头获取图像数据,会订阅相应的图像话题,并设置回调函数来接收图像数据。对于IMU数据也是类似,订阅IMU数据话题并在回调函数中处理数据。
  3. 系统运行:启动ORB_SLAM3系统的运行,这通常会触发各个模块的初始化和开始运行。主程序会进入一个循环,等待系统的运行结束或者用户的退出操作。

ORB-SLAM3的代码结构清晰、模块分明,通过各个模块的协同工作实现了高精度的SLAM功能。

### ORB_SLAM3与其他SLAM系统的比较 #### 优势 ORB_SLAM3作为第三代基于ORB特征的视觉里程计和建图系统,在多个方面表现出显著的优势: - **多传感器融合能力**:ORB_SLAM3支持单目、双目、RGB-D相机以及IMU等多种传感器输入,能够适应不同的硬件配置需求[^1]。 - **实时性能优越**:通过优化算法结构并采用高效的图像处理技术,ORB_SLAM3能够在保持高精度的同时实现快速响应。相比传统的SIFT方法,ORB_SLAM3在平均匹配时间上具有明显优势。 - **鲁棒性强**:得益于ψ函数特性的影响,这类估计器不仅效率极高而且拥有较高的崩溃点;更重要的是它们不会受到遮挡效应影响,可以有效排除粗大异常值而不完全忽略中度较大的离群点[^2]。 - **广泛应用场景**:无论是室内还是室外环境下的机器人导航任务,亦或是增强现实应用领域内,ORB_SLAM3均能提供稳定可靠的定位服务。特别是在抓取物体的任务中,该系统已被证明可以在Cornell Grasping数据集以及其他更复杂的数据集中取得优异的成绩[^3]。 ```python # Python伪代码展示如何初始化ORB_SLAM3系统 from orbslam3 import System slam_system = System(voc_file="path_to_vocabulary", settings_file="path_to_settings") slam_system.initialize() ``` #### 劣势 尽管ORB_SLAM3具备诸多优点,但也存在一些局限性: - **计算资源消耗较大**:为了维持高效稳定的运行状态,ORB_SLAM3对于设备的CPU/GPU算力有一定要求,这可能限制其应用于某些低端嵌入式平台上的可能性。 - **依赖良好光照条件**:当环境中光线变化剧烈或过暗时,可能会导致提取到的有效特征减少,从而影响整体表现效果。 - **初始姿态不确定性问题**:如果启动阶段未能获得足够的空间参照信息,则可能导致后续跟踪失败的情况发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值