☰
ORB-SLAM3 入门:视觉 SLAM 原理、算法演进与学习路线
2026/10/9 7:54:54 网站建设 项目流程

摘要:本文面向刚接触视觉 SLAM 或准备阅读 ORB-SLAM3 代码的学习者,系统梳理了视觉 SLAM 的基本原理、算法演进、主要模块与学习路线。内容涵盖 SLAM 要解决的核心问题、单目/双目/RGB-D 深度来源的差异、特征点法与直接法的优化目标、前端/后端/回环/建图的协作方式,以及从 PTAM 到 ORB-SLAM3 的关键演进。文章还介绍了 ORB-SLAM3 的 Tracking、Local Mapping、Loop Closing 三大模块,解释了引入 IMU 的原因与预积分思路,并给出观察公开数据集演示和安排学习路线的具体建议。

1. SLAM 解决什么问题?

视觉 SLAM 要同时估计相机的运动和环境的结构。ORB-SLAM3 把 ORB 特征、视觉惯性估计、回环校正和多地图管理放在同一个系统里。理解它,先要理清“观测从哪里来、误差如何优化、地图如何复用”这三个问题。

本文面向刚接触视觉 SLAM,或准备阅读 ORB-SLAM3 代码的学习者。内容包括基本原理、算法演进、主要模块、公开数据集的观察方法和学习路线;安装步骤与完整数学推导需要另行展开。

SLAM 的全称是Simultaneous Localization and Mapping,通常译为“同时定位与建图”。

  • 定位:估计传感器或机器人在参考坐标系中的位置和姿态,回答“我在哪里、朝向哪里”。
  • 建图:根据观测建立环境表示,回答“周围有哪些结构、它们在哪里”。

这两个问题相互依赖。要把新看到的物体放进地图,需要知道相机的位置;要利用地图确定位置,又需要可靠的环境结构。它们有些像“鸡生蛋、蛋生鸡”,因此通常需要联合估计,随着新观测不断修正。

以相机在房间里移动为例:系统在不同图像中找到同一个墙角,由这些对应关系估计相机运动,再恢复墙角的三维位置。后续再次看到这个墙角时,已有地图又能帮助定位。

SLAM 是导航的重要组成部分。完成避障、路径规划和运动控制,还需要相应模块。用于定位的稀疏地图,也不自动等于适合机器人通行判断的障碍物地图。

按主要传感器,可以讨论视觉 SLAM、激光 SLAM 及它们与其他传感器的融合方案。视觉图像含有颜色、纹理和物体外观,便于进一步引入语义识别;是否更便宜、更适合某个任务,则要结合实际硬件和场景判断。

2. 单目、双目和 RGB-D:深度从哪里来?

输入形式深度信息的来源需要先理解的边界
单目相机移动后,从多个视角的对应关系进行三角化纯视觉、无额外尺度约束时,恢复的结构和运动存在整体尺度歧义
双目两个经过标定的相机提供不同视角,利用视差估计深度尺度依赖已知基线;匹配质量、标定误差和物体距离都会影响深度估计
RGB-D彩色图像配合深度图,为有效像素提供距离信息深度图须与图像正确关联;无效深度、量程和传感器误差需要处理

“单目没有绝对尺度”并不意味着“单目不能估计深度”。同一组图像,可能对应一个小场景中的短距离运动,也可能对应一个按比例放大的场景和运动;仅靠这些图像无法确定真实的米制大小。

对于校正后的理想双目相机,可以用Z = f × b / d理解深度:Z是深度,f是以像素为单位的焦距,b是基线长度,d是视差。视差越小,相同的视差误差通常越容易带来较大的深度误差。ORB-SLAM2 将双目和 RGB-D 的深度观测纳入特征与优化框架。ORB-SLAM2 原论文

RGB-D 描述的是“颜色+深度”的数据形式,不能据此认定所有深度相机都使用相同的测距机制。

3. 特征点法与直接法:优化的是什么?

视觉估计的一条重要区别,是如何利用图像信息。

方法主要使用的信息典型误差与例子
特征点法提取关键点和描述子,建立图像之间或图像与地图之间的对应通常优化重投影误差;ORB-SLAM 系列是代表
直接法使用选定像素或图像区域的亮度信息建立约束通常优化光度误差;DSO、LSD-SLAM 是代表
半直接法在不同阶段结合直接图像对齐与特征几何约束SVO 是典型例子,不能简单归为纯直接法。SVO 原论文

重投影误差比较“地图点按当前位姿投影到图像的位置”与“实际观测到的关键点位置”。光度误差比较对应位置的像素亮度,常需要考虑曝光变化和相机的光度模型。

“直接法”也不等于“稠密建图”。DSO 是直接、稀疏的视觉里程计;LSD-SLAM 使用半稠密表示。方法如何建立图像约束,与地图保留多少点,是两个不同维度。DSO 官方项目说明、LSD-SLAM 官方项目说明

特征点法在一定程度上能适应外观变化,但模糊、弱纹理、强烈光照变化和大量动态物体仍可能破坏匹配。直接法也需要满足相应的图像对齐和光度条件。比较方法时,应明确输入和场景,避免把某类算法写成对这些问题免疫。

4. 前端、后端、回环和建图如何配合?

可以先用下面的职责表理解一个典型视觉 SLAM 系统。

部分主要职责可以带着什么问题学习
前端/视觉里程计从图像及局部地图估计当前运动,建立对应关系哪些观测支持这次位姿估计?
后端优化结合观测约束,调整位姿、地图点等变量优化哪些变量,固定哪些变量,误差如何定义?
回环检测与校正识别曾经到过的区域,验证约束并修正累计漂移是视觉相似,还是已经通过几何验证?
地图管理创建、筛选和维护环境表示,支持后续定位哪些信息值得长期保留?

实际代码中,这些职责可能相互交叉,并不总是一一对应四个线程。比如跟踪阶段也会优化当前位姿,局部建图阶段则会进行局部优化。

VO 与 SLAM 有什么区别?

视觉里程计(Visual Odometry,VO)主要关心从视觉观测估计运动,通常着重短期或局部的一致性;完整 SLAM 系统还要考虑持续地图管理、地图复用和更大范围的一致性。

“VO 加回环就是 SLAM”可以帮助初步理解一些常见系统,但不能作为所有算法的严格定义。ORB-SLAM 的设计同时包含重定位、局部地图复用和回环等能力。ORB-SLAM 原论文

5. 从 PTAM 到 ORB-SLAM3:每一步解决了什么?

下面按代表性论文的发表时间梳理,而不是把所有工作理解成单线升级关系。

工作时间主要值得学习的贡献
PTAM2007将跟踪与关键帧建图分开并行处理,面向小型 AR 场景。原论文
ORB-SLAM2015在单目系统中使用 ORB 特征,结合跟踪、局部建图、重定位与回环。原论文
ORB-SLAM22017支持单目、双目和 RGB-D,结合局部优化、回环校正与全局 BA。原论文
ORB-SLAM-VI2017融合单目视觉与 IMU,研究尺度、重力、速度和偏置初始化以及地图复用。原论文
ORBSLAM-Atlas2019管理多个子地图,通过位置识别和地图合并提高系统连续工作的能力。原论文
ORB-SLAM32020 年预印本,2021 年期刊论文综合视觉、视觉惯性和多地图能力,并支持针孔与鱼眼相机模型。原论文

PTAM 与 ORB 分别是什么?

PTAM 的作者是 Georg Klein 和 David Murray。它使用点特征、关键帧和几何优化,跟踪过程中包含图像块匹配。基于关键帧是一种帧与地图的组织方式,不能据此判断算法属于直接法,也不能说 PTAM 不提取特征。

ORB 则是一种局部特征方法,全称是Oriented FAST and Rotated BRIEF。它在 FAST 检测和 BRIEF 描述的基础上加入方向处理,并使用图像金字塔处理多个尺度。二进制描述子便于快速匹配,这是 ORB-SLAM 选择它的重要背景。OpenCV ORB 官方文档

这些设计有助于应对一定程度的旋转和尺度变化,但不意味着能对任意视角变化、模糊或遮挡保持完全不变。

6. 读懂 ORB-SLAM3 的三个主要模块

6.1 Tracking:估计当前帧状态

跟踪模块处理输入帧,提取 ORB 特征,利用已有信息形成位姿初值,再与局部地图建立对应并优化。跟踪失败时,系统尝试重定位;当前帧是否需要成为关键帧,也由这一模块判断。

在视觉惯性模式下,状态还包括速度和 IMU 偏置,估计同时使用视觉与惯性约束。

普通帧与关键帧的区别主要在长期保留和参与建图的方式。普通帧也参与实时跟踪,不应理解为“系统只处理关键帧”。

6.2 Local Mapping:维护局部地图

局部建图接收新关键帧,创建地图点,筛除不可靠的点和冗余关键帧,并进行局部优化。筛选既是为了控制计算量,也是为了保留能稳定支持跟踪的地图信息。

BA 是Bundle Adjustment,常译为“光束法平差”或“束调整”。理解时先关注:哪些相机状态和三维点一起优化、它们被哪些观测约束。局部 BA 针对有限窗口;全局 BA 则作用于更大范围的地图与关键帧,触发时机和计算代价不同。

6.3 Loop Closing/Map Merging:复用旧区域

ORB-SLAM3 区分两种情况:识别到的区域属于当前地图,就可能形成回环;属于其他地图,就可能进行地图合并。它们都需要可靠的数据关联与几何验证。

上述模块关系可对照论文的系统图理解。ORB-SLAM3 原论文,第 III 节及图 1

位置识别中的 BoW 是Bag of Words,词袋模型。DBoW2 用视觉词汇表示图像,帮助快速找到候选关键帧;“看起来相似”只是候选线索,仍需要判断特征是否满足几何关系。DBoW2 官方仓库

几何校正中常见的SE(3)表示三维旋转和平移,Sim(3)还包含尺度。纯单目地图的尺度漂移是使用 Sim(3) 的重要背景;已有可靠尺度时,约束的处理又不同。它们不是简单的图像相似度分数,也不能把三维位姿变换写成 SE(2)。官方 LoopClosing 源码

Atlas 管理当前活动地图和其他非活动地图,支持再次识别并合并共同区域。多地图能力减少了跟踪中断后丢掉所有已有成果的需要;是否能够合并,仍取决于共同观测和验证条件。实际可管理的地图规模也受计算和内存资源限制。ORBSLAM-Atlas 原论文

7. 为什么引入 IMU?

相机提供丰富的环境观测,但弱纹理、遮挡和运动模糊可能使视觉约束不足。IMU 提供高频惯性观测,能帮助预测短时间的运动。

陀螺仪测量角速度;加速度计测量比力,估计运动时需要处理重力、偏置和噪声。它们不会直接输出准确的相机位置:持续积分会累积误差,因此需要与视觉约束联合估计。视觉惯性 SLAM 原论文,第 II 节

对单目视觉惯性系统,初始化需要处理尺度、重力方向、速度和偏置等变量。足够的运动激励与合适的标定是估计这些状态的重要条件;不能理解为“接上 IMU 就立即获得可靠尺度”。ORB-SLAM3 使用基于优化的视觉惯性初始化。初始化原论文

IMU 预积分可以先理解为:把两帧或两个关键帧之间的多次 IMU 测量整理为相对运动约束,供后续优化使用。深入时还要学习噪声传播和偏置修正,不能把预积分当成对加速度取平均。

8. 看公开数据集演示时,应该观察什么?

8.1 先分清数据集

数据集主要数据适合关注的内容
EuRoC MAV双目图像、IMU 和参考轨迹等单目/双目与惯性配置的对应关系。ETH ASL 数据集入口
TUM RGB-D彩色图像、深度图和参考轨迹等RGB-D 输入与轨迹评估。官方入口
TUM-VI鱼眼双目图像、IMU 等视觉惯性估计与鱼眼相机模型。官方入口

“TUM”可能指不同数据集,不能把 RGB-D 数据和 TUM-VI 混用。下载时还要核对格式、标定文件和示例程序所需的输入。

8.2 观察地图如何变化

初次看演示,可以依次观察:

  1. 当前图像中的特征匹配是否稳定。
  2. 相机位姿如何随运动变化。
  3. 新关键帧和地图点何时加入。
  4. 关键帧之间的图连接表达了什么关系。
  5. 返回旧区域时,是否发生识别、校正或地图合并。

共视图的节点是关键帧,连接反映关键帧共享地图点的关系,不是“相机能看到几张图片”。ORB-SLAM2 原论文,第 III 节

官方可视化界面提供Show Graph、Localization Mode、Step By Step与Step等控制项。逐帧观察可以帮助理解状态变化;定位模式使用已有地图跟踪,并停止局部建图。官方 Viewer 源码、官方 System 源码

这些界面现象适合帮助理解流程。要判断定位精度,仍需要保存轨迹、对齐时间和坐标系,再与参考轨迹比较;轨迹看起来平滑或首尾接近,本身不足以证明误差很小。

8.3 把环境与能力范围说清楚

本文代码功能核对的是官方提交4452a3c4ab75b1cde34e5505a36ec3f9edcdc4c4,核验日期为2026-10-03。该提交的传感器枚举包含单目、双目、RGB-D 及各自的惯性配置;具体接入还需要对应程序、参数与标定。官方 System.h

该版本 README 记录了作者在 Ubuntu 16.04 和 18.04 上的测试,以及 C++、Pangolin、OpenCV、Eigen 等依赖。这是历史测试记录,不能直接推导为其他系统和任意新依赖组合都已验证。固定版本 README

9. 如何安排 ORB-SLAM3 学习路线?

可以采用“项目驱动,遇到问题再有针对性地补理论”的方式,同时保留必要的基础学习。

阶段重点一个可检查的学习结果
理清输入与输出相机类型、标定、时间戳、图像与 IMU 的对应关系能说明每份输入数据和配置参数的作用
补几何基础坐标变换、旋转矩阵、四元数、相机投影、三角化、PnP能画出世界、相机与图像坐标之间的关系
补优化基础最小二乘、鲁棒核、雅可比、BA,SO(3)、SE(3)、Sim(3)能说出一个优化问题的变量、观测和误差
按模块读代码Tracking、Local Mapping、Loop Closing,以及 Frame、KeyFrame、MapPoint能追踪一帧输入如何生成位姿与关键帧
深入惯性与多地图IMU 预积分、初始化、偏置、Atlas、地图合并能解释一次失败恢复或地图合并需要什么条件
面向任务改进动态场景、语义信息、稠密表示或关键帧策略有明确问题、基线和评估条件,而不是只替换模块名称

OpenCV 要学到什么程度?

以阅读 ORB-SLAM3 为目标,可以先学习图像读写、cv::Mat、灰度图与金字塔、相机标定和畸变、特征提取与匹配,以及常用几何接口。能理解数据格式和参数含义后,再随具体问题补图像预处理与其他算法,不必一开始掌握整个库。

C++ 则需要能阅读类、容器、对象生命周期和线程协作。仅仅编译成功,还不足以解释为什么某段代码要插入关键帧、剔除地图点或中止一次优化。

工程应用与研究改进如何衔接?

工程学习先把问题落到具体场景:输入质量如何,哪些运动会丢失跟踪,输出地图是否满足下游任务,计算资源是否足够。研究改进则需要固定基线、数据和评价方式,解释改动解决了什么问题,以及在哪些条件下有效。

语义分割可以提供物体类别或区域信息,稠密建图可以补充表面结构;把这些信息接入 SLAM,仍需要设计数据关联、地图表示和运行流程。学习式关键帧选择也可以作为探索方向,但效果需要实验验证,不能仅凭“采用深度学习或强化学习”就认定整体更优。

下一步可以先选择一种输入配置和一个公开序列,在理解标定与时间戳后,围绕“当前帧怎样变成关键帧”追踪一次完整流程。把运行现象、模块职责和几何约束对应起来,再继续深入 BA、IMU 预积分和 Atlas,会更容易形成连续的知识结构。

参考资料

  • ORB-SLAM3 原论文:系统设计与视觉惯性、多地图方法。
  • ORB-SLAM3 官方仓库:代码、依赖与示例入口;本文代码核对版本见第 8.3 节。
  • ORB-SLAM2 原论文:视觉系统、关键帧与优化背景。
  • PTAM 原论文:跟踪与关键帧建图并行的早期工作。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询