1. ORB-SLAM3概述:SLAM技术发展史、ORB-SLAM系列演进、ORB-SLAM3核心贡献与系统架构总览
1.1 从“我在哪”到“世界长什么样”——SLAM技术发展简史
SLAM,全称是 Simultaneous Localization and Mapping。说白了,就是让机器人一边走路,一边画地图。你想想看,一个陌生环境里,它既不知道自己在哪,也不知道周围长啥样,却要同时解决这两个问题——这听起来像个死循环。
我最早接触 SLAM 是 2015 年,那时候还在用激光雷达做 2D SLAM。后来转到视觉 SLAM,才真正感受到这个领域的魅力。视觉 SLAM 的发展,大致可以分成三个阶段:
- 古典时代(2000-2010):以 MonoSLAM、PTAM 为代表。那时候大家还在用 EKF(扩展卡尔曼滤波)做状态估计,计算量巨大,跑在 PC 上都费劲。PTAM 首次把跟踪和建图分成两个线程,这个思路影响深远。
- 特征点时代(2010-2015):ORB-SLAM 横空出世。它用 ORB 特征点替代了 SIFT 和 SURF,速度提升了一个数量级。我记得第一次跑通 ORB-SLAM 时,看到它在 TUM 数据集上稳定运行,心里那个激动啊。
- 直接法与混合法时代(2015-至今):LSD-SLAM、DSO 等直接法出现,不再依赖特征点。而 ORB-SLAM3 则走向了视觉+惯导的紧耦合融合,把精度和鲁棒性推到了新高度。
核心认知:SLAM 的本质是一个状态估计问题。你估计机器人的位姿,同时估计地图点的位置。这两个估计互相依赖,互相约束。搞懂了这一点,你就抓住了 SLAM 的命门。
1.2 ORB-SLAM 系列演进:从 1 到 3 的蜕变
ORB-SLAM 系列是西班牙萨拉戈萨大学 Raúl Mur-Artial 团队的杰作。我当年读 ORB-SLAM 论文时,最佩服的是他们把工程细节做到了极致。咱们来看看这个系列的演进:
| 版本 | 发布时间 | 核心能力 | 我的评价 |
|---|---|---|---|
| ORB-SLAM | 2015 | 单目 SLAM,三线程架构 | 开创性工作,代码质量极高 |
| ORB-SLAM2 | 2017 | 支持单目、双目、RGB-D | 多传感器支持,工程化更完善 |
| ORB-SLAM3 | 2020 | 视觉+惯导紧耦合,多地图系统 | 真正可用的 SLAM 系统 |
ORB-SLAM 1 到 2 的升级,主要是传感器类型的扩展。但 ORB-SLAM 2 到 3 的升级,是质的飞跃。为什么这么说?因为加入了 IMU(惯性测量单元)。
我在项目中遇到过纯视觉 SLAM 的痛点:快速运动时特征点丢失、纯旋转时无法初始化、纹理缺失时直接崩掉。这些问题在 ORB-SLAM3 里得到了根本性解决。IMU 提供了短时间内的运动约束,视觉提供了长时间内的漂移修正——两者互补,天作之合。
1.3 ORB-SLAM3 核心贡献:它到底牛在哪?
ORB-SLAM3 的论文标题里有个关键词:「Atlas」。这是它的核心创新之一。我把它拆成三个贡献来讲:
- 视觉-惯导紧耦合:不是简单的松耦合,而是把 IMU 预积分和视觉 BA 放在一起优化。说白了,就是让视觉和 IMU 互相“商量”着来,而不是各算各的。
- 多地图系统(Atlas):系统可以同时维护多个地图。当跟踪丢失时,它会尝试重定位到已有地图,或者新建一个地图。这个设计太聪明了——你想想看,机器人从室内走到室外,环境变化巨大,一个地图搞不定,那就用多个地图。
- 改进的初始化:ORB-SLAM3 可以在 2 秒内完成视觉-惯导初始化。我试过在快速旋转的场景下,它依然能稳定初始化。这一点在实际应用中太重要了。
避坑指南:我曾经在无人机平台上测试 ORB-SLAM3,发现 IMU 参数标定不准会导致系统发散。建议你在使用前,先用官方提供的工具做一次 IMU 标定。别偷懒,这一步省不了。
1.4 系统架构总览:一张图看懂 ORB-SLAM3
下面这张图是我自己画的 ORB-SLAM3 系统架构图。它清晰地展示了三个主要线程和它们之间的数据流。我建议你把它打印出来,贴在工位上,后面每讲一个模块,都可以回来对照着看。
这张图里,三个线程是核心骨架。跟踪线程负责实时定位,局部建图线程负责优化局部地图,回环检测线程负责消除累积误差。Atlas 系统则像一个大管家,管理着所有地图。
注意:ORB-SLAM3 的代码量大约 2 万行,C++11 标准。如果你之前没读过大型 C++ 项目,建议先熟悉一下智能指针、多线程、Eigen 库这些基础知识。否则读源码时会比较吃力。
1.5 为什么选择 ORB-SLAM3 做源码解析?
市面上 SLAM 系统不少,我为什么偏偏选中 ORB-SLAM3?原因有三:
- 代码质量极高:Raúl Mur-Artial 团队的代码风格非常规范,注释清晰,模块划分合理。读它的源码,就像在读一本教科书。
- 工程落地能力强:ORB-SLAM3 已经在很多实际项目中得到验证。我见过有人把它移植到无人机、扫地机器人、AR 眼镜上。它的模块化设计让移植变得相对容易。
- 学术价值与实用价值兼备:论文发表在 IEEE Transactions on Robotics 上,引用量已经超过 3000。同时它的代码可以直接用于产品开发。
嗯,说到这里,我想强调一点:读源码不是为了背代码,而是为了理解设计思想。ORB-SLAM3 里有很多精妙的设计,比如关键帧的选择策略、地图点的管理方式、BA 的调度机制。这些思想可以迁移到你自己的项目中。
我的建议:在开始逐行解析之前,先花一天时间把 ORB-SLAM3 跑起来。用官方提供的 EuRoC 数据集跑一遍,看看效果。然后再对照着架构图,理解每个模块的作用。这样后面读源码时,你脑子里会有画面感。
好了,这一章我们梳理了 SLAM 的发展脉络、ORB-SLAM 系列的演进、ORB-SLAM3 的核心贡献和系统架构。从下一章开始,我们会深入到代码层面,逐行解析 ORB-SLAM3 的实现细节。准备好了吗?
公众号:蓝海资料掘金营,微信deep3321