概念介绍:ORB-SLAM3 到底解决什么问题
一、概念介绍:ORB-SLAM3 到底解决什么问题
ORB-SLAM3 是一套开源的视觉惯性 SLAM 系统,由西班牙 Zaragoza 大学的研究团队维护。它的输入是相机图像,可选地再加上 IMU 数据,输出是相机在空间中的六自由度位姿轨迹以及稀疏的三维地图点。所谓 SLAM,即 Simultaneous Localization and Mapping,同时定位与建图:机器人在陌生环境里一边估算"我在哪",一边把环境结构画出来。ORB-SLAM3 的名字里,ORB 指的是它使用的特征描述子(Oriented FAST and Rotated BRIEF),3 指的是它支持的传感器组合数量与架构代数,而不是"第三个版本"这么简单。
ORB-SLAM3 要解决的问题很具体:让一台带相机的移动设备,在只有自身传感器、没有 GPS、没有预先地图的情况下,稳定地知道自己在哪里。它在设计上有四个关键点。第一是支持多种传感器配置——单目、双目、RGB-D,并且每一种都能加 IMU 组成惯性版本,一共六种模式。第二是 Atlas 多地图系统:当跟踪丢失时,系统不是简单崩溃,而是新建一张子地图,等再次回到旧场景时通过回环检测把多张地图拼接起来。第三是基于 DBoW2 的视觉词袋重定位,让机器人在被"绑架"(被人搬动到别处)后仍有机会找回自己的位置。第四是紧耦合的视觉惯性联合优化,把 IMU 预积分与视觉重投影误差放在同一个优化问题里求解。
和相邻方案的差别值得说清楚。VINS-Mono / VINS-Fusion 同样做单目惯性里程计,基于滑动窗口优化,轨迹精度在多数公开数据集上与 ORB-SLAM3 互有胜负,但它的地图是滑动的、不做长期全局建图,回环后只做位姿图调整。LSD-SLAM、DSO 这类直接法用像素灰度误差,在弱纹理场景(白墙、走廊)比特征点法有优势,但对光照变化敏感,且不开源维护已停滞。Cartographer 主要面向 2D/3D 激光雷达,用在扫地机和 AGV 上;视觉场景里 ORB-SLAM3 更合适。选型上的经验是:要稀疏特征轨迹与重定位能力,选 ORB-SLAM3;要和激光雷达融合做稠密建图,考虑 LIO-SAM、FAST-LIO;要做语义或稠密重建,看 RTAB-Map 或 OpenVINS 加后端。
核心术语表如下,后面所有配置项都建立在这些概念上。
| 术语 | 含义 | 实际影响 |
|---|---|---|
| KeyFrame(关键帧) | 被选入地图的代表性帧 | 关键帧太多会拖慢后端优化,太少会丢精度 |
| MapPoint(地图点) | 三角化得到的三维点 | 决定地图稀疏程度与重定位成功率 |
| Atlas | 多地图容器,管理多张不相连的子地图 | 跟踪丢失后能否恢复的关键 |
| DBoW2 | 视觉词袋模型,用于重定位与回环 | 依赖 Vocabulary/ORBvoc.txt 词袋文件 |
| IMU 预积分 | 把两帧之间的 IMU 观测压缩成约束 | 决定视觉惯性模式的初始化速度 |
| 共视关系 | 两个关键帧共同观测到的地图点 | 局部 BA 的窗口由共视图决定 |
| Essential Graph | 只保留强共视边的位姿图 | 全局优化在这个稀疏图上做,省时间 |
| Scale(尺度) | 单目无法从图像恢复绝对尺寸 | 单目模式轨迹单位是"任意单位",不是米 |
有一点必须提前说明:ORB-SLAM3 输出的是稀疏地图,只有几千到几十万个点。如果你要的是可以给导航用的稠密点云或八叉树地图,需要在它之上再叠加一层,例如用 ORB-SLAM3 的位姿去驱动 RTAB-Map 或 OctoMap 建图。把它当成"高精度位姿估计器 + 稀疏路标",而不是"三维重建工具",预期就不会错。

