ORB-SLAM2
- Description:ORB-SLAM2 论文与系统详解 — 特征点法 SLAM 巅峰之作,三线程架构 (跟踪 / 局部建图 / 闭环),ORB 特征、共视图/扩展树/本质图、词袋、三种跟踪、局部 BA、Sim3 闭环
- Paper:Mur-Artal, R., & Tardós, J. D. (2017). ORB-SLAM2: An Open-Source SLAM System for Monocular, Stereo, and RGB-D Cameras. IEEE T-RO, 33(5). (初代 ORB-SLAM: Mur-Artal et al. 2015 T-RO)
- K2E-B ID:[K2E-B-S2-2]
- Max3 PDF:
[K2E] SLAM/[K2E-B-S] SLAM Systems/[K2E-B-S2] ORB-SLAM/[K2E-B-S2-2][2016] ORB-SLAM2 an Open-Source SLAM System for Monocular Stereo and RGB-D Cameras.pdf(同目录另有 S2-1 初代 ORB-SLAM + 中文翻译 docx) - Notion ID:(待创建)
- Created:2021-07-06
- Updated:2026-06-02
- License:转载欢迎 — 请署名 Yu Zhang 并链回 yuzhang.io 原文
Table of Contents
- 1. 概述与特点
- 2. 三线程框架
- 3. ORB 特征
- 4. 关键帧
- 5. 共视图 / 扩展树 / 本质图
- 6. 词袋 BoW
- 7. 跟踪 — 三种模式
- 8. 局部地图跟踪
- 9. 局部建图
- 10. 闭环检测
- References
1. 概述与特点
ORB-SLAM2 (Mur-Artal & Tardós 2017) — 特征点法 SLAM 的巅峰之作。三个版本:2015 (单目)、2017 (ORB-SLAM2,双目/RGBD)、2021 (ORB-SLAM3,+IMU/多地图)。
特点:
- 单目 / 双目 / RGB-D 统一框架
- CPU 实时 — 不需要 GPU
- 回环 + 重定位 完整
- 仅定位模式 (localization only) 支持
- 特征点法的标杆
2. 三线程框架
ORB-SLAM2 = 跟踪 (Tracking) + 局部建图 (Local Mapping) + 闭环 (Loop Closing) 三线程并行。
图像 → 跟踪线程
- 提取 ORB 特征
- 地图初始化
- 跟踪 (恒速模型 / 关键帧 / 重定位)
- 局部地图跟踪
- 判断建关键帧
↓ (关键帧)
局部建图线程
- 插入关键帧
- 剔除地图点
- 生成地图点
- 局部 BA
- 剔除冗余关键帧
↓
闭环线程
- 查询数据库
- 计算 Sim3
- 闭环融合
- 本质图优化 + 全局 BA
地图结构:地图点 + 关键帧 + 共视图 (covisibility) + 生成树。 位置识别:视觉字典 (vocabulary) + 识别数据库。
数据预处理
- 双目 — rectify,对齐左右图
- RGB-D — register depth map 与 image (需标定)
3. ORB 特征
ORB = Oriented FAST + Rotated BRIEF (详见 特征描述子)。这里记 ORB-SLAM 视角的要点:
FAST 角点
- 选点 $p$,亮度 $l_p$
- 半径 3 的圆上 16 个像素
- 阈值 $T$:连续 $N$ 个点亮度 $> l_p + T$ 或 $< l_p - T$ → 角点
BRIEF 描述子
- 二进制描述子 (256 bit),关键点附近 N 个点对比较
- 汉明距离 + 位操作 (快)
- 无尺度不变性 (尺度变化大会失败) — 对比 SIFT/SURF 浮点 + 欧氏距离
旋转不变性
- Oriented FAST — 灰度质心法估主方向
- rBRIEF 按主方向旋转采样 → 旋转不变 (wide baseline 适应)
4. 关键帧
为什么需要关键帧
- 降低信息冗余度
- 普通帧是滤波/优化的结果
- 算力与精度的平衡 (大量关键帧反而恶化性能)
如何选择
- 关键帧本身质量好:图像清晰、特征充足、分布均匀
- 既存在约束,又减少冗余
- 标准:时间足够多 + 空间足够远 + 局部质量足够好
5. 共视图 / 扩展树 / 本质图
共视图 Covisibility Graph
- 无向加权图
- 关键帧 = 节点,共视地图点数 = 边权重
- 至少 15 个共视地图点 才连边
扩展树 Spanning Tree
- 只连当前关键帧和父关键帧
- 父关键帧 = 共视程度最高的关键帧
本质图 Essential Graph
- 目的:闭环矫正时用相似变换 (Sim3) 矫正尺度漂移,把闭环误差均摊到本质图
- 含所有关键帧
- 连接关系 = 扩展树连接 + 闭环连接 + 共视极好 ($\theta_{min}=100$) 的关系
6. 词袋 BoW
Bag of Words — bags of binary words for fast place recognition。
- 特征点 + 描述子聚类 → 定义 word
- 词袋 = 每个 word 出现频率
- Vocabulary Tree:ORB 特征 → K-means 聚类 → 叶节点是 word,权重 = TF-IDF (出现越多分辨力越小权重越小)
用途:
- 闭环检测 — 对视角/光照/曝光变化鲁棒
- 加速匹配 — 追踪 / 重定位 / 闭环
7. 跟踪 — 三种模式
恒速模型 (Track With Motion Model)
- 用恒速模型估计初始位姿
- Search by projection (候选点 Get Features in Areas,范围小)
- BA 优化 (仅位姿)
- 默认/最常用
参考关键帧 (Track Reference Key Frame)
- 应用场景:无速度信息 (刚重定位完 / 恒速模型失败)
- Search by BoW → BA 优化 (仅位姿)
- 一般不用
重定位 (Relocalization)
- BoW 逆序索引找共 words 的关键帧
- 每组计算得分,找候选关键帧
- Search by BoW 快速匹配 → EPnP 算位姿 + 内点优化 (仅位姿)
- 内点少 → 投影再 Search by projection → 再 BA
(EPnP 见 PnP §4:质心控制点 + PCA + $A^TA$ 特征分解)
8. 局部地图跟踪
Track Local Map — 前面三种跟踪的后处理 (必须已知位姿+地图点,可不准)。
步骤:
- 遍历当前帧地图点,找能观测它们的所有关键帧
- 统计观测次数排序
- 局部关键帧添加:(策略1) 看到当前帧的关键帧;(2.1) 策略1 共视最高帧的邻居 [代码
GetBestCovisibilityKeyFrames(10)];(2.2) 子关键帧;(2.3) 父关键帧 - 更新参考帧 (共视最高)
- 局部地图点投影到当前帧 → 判断视深/像素范围/平均观测方向 → 最佳次佳筛选
- 优化位姿
9. 局部建图
Local Mapping 步骤:关键帧插入 → 地图点剔除 → 地图点生成 → BA → 关键帧删除。(做 local mapping 时不处理 tracking 过来的新关键帧)
地图点剔除
- set bad flag 删坏点
- 观测帧太少删掉 (须被预测可见帧的 >25% 实际观测到;且创建后须被足够多关键帧观测 → 好点 (单目 ≥3,双目/RGB-D ≥4),两条件缺一即删)
地图点生成
- 关键帧间三角化产生地图点
- 找共视最高的近邻关键帧 → 判断基线 (双目比硬件长度 / 单目比场景深度中值)
- 计算基础矩阵 → BoW 快速匹配未匹配点 + 极线约束抑制离群 → 三角化
- 三角化检查:视差角 → 相机前方 → 重投影卡方检验 → 左右光心距离 + 金字塔尺度比例连续性
地图点融合
- 一级相邻 (共视最高 N 帧) + 二级相邻
- 正向融合 (地图点投影到关键帧匹配,检查相机前/方向/距离;有地图点则选观测最多的替换,无则添加)
- 反向融合 (一二级 → 当前关键帧)
Local BA
- 条件:处理完最后关键帧 + 闭环没请求终止 + 关键帧 > 2 (别太频繁)
- 优化当前关键帧 + 共视关键帧的 pose + 地图点
- 能观测局部地图点但不属局部的关键帧 (二级) 仅作约束不优化
- 约束边权重按金字塔尺度平方的倒数设置 (mvInvLevelSigma2 = 1 / scaleFactor^(2·level))
关键帧删除
- 剔除 90% 以上地图点能被至少 3 个其他关键帧看到的冗余关键帧
10. 闭环检测
闭环候选 → 连续性检查 → Sim3 与闭环矫正。
识别候选
- local mapping 插入关键帧给 loop closing
- 距上次闭环 > 10 关键帧 [代码实现常数]
- 统计共视图相连关键帧 (连边阈值 15) 的 BoW 相似度,取最低分为最小得分 $s_{min}$
- 候选筛选:得分高于最小得分 → 扩展候选+相邻为组算得分 → 取每组最高帧
连续性检查 (Consistency)
- 每关键帧 + 相连帧 = 候选组
- 检查是否有"连续组":子候选组与之前成功组相连 → consistency +1;连续 3 次 → 连续组存在
- 存在连续组 → 候选合理
Sim3 与闭环矫正
相似变换 $S = \begin{bmatrix} sR & t \ 0 & 1 \end{bmatrix}$,逆 $S^{-1} = \begin{bmatrix} \frac{1}{s}R^T & -\frac{1}{s}R^T t \ 0 & 1 \end{bmatrix}$。
- BoW 粗匹配 → RANSAC + Sim3 初算标内点 → Search by Sim3 (互投未匹配点)
- 正反向投影建边约束 → g2o 优化 (地图点固定,Sim3 不固定,边做投影)
- 校准闭环:停 BA → 更新连接 → 当前关键帧组尺度认为还是 1 (无漂移)
(Sim3 / 尺度漂移修正见 几何变换层级 §3 相似变换)
References
- Mur-Artal, R., Montiel, J. M. M., & Tardós, J. D. (2015). ORB-SLAM: A Versatile and Accurate Monocular SLAM System. IEEE T-RO. — 初代
- Mur-Artal, R., & Tardós, J. D. (2017). ORB-SLAM2: An Open-Source SLAM System for Monocular, Stereo, and RGB-D Cameras. IEEE T-RO, 33(5). — 本笔记
- Campos, C., et al. (2021). ORB-SLAM3. IEEE T-RO. — +IMU/多地图
- ORB-SLAM2 代码: github.com/raulmur/ORB_SLAM2
- Gálvez-López, D., & Tardós, J. D. (2012). Bags of Binary Words for Fast Place Recognition in Image Sequences (DBoW2). IEEE T-RO.
- 知乎: SVD 讲解、各种点法 — 原 note 引用
- ORB 特征见 特征描述子;EPnP 见 PnP;三角化见 三角化;Sim3 见 几何变换层级