VO vs SLAM
视觉里程计(Visual Odometry, VO) 从连续帧中估计局部的、增量式的相机运动:在帧间匹配或跟踪特征(对于直接法,则是最小化光度误差),估计相对位姿,并将这些估计链接起来。VO没有全局地图的概念,也无法执行回环检测——因此漂移会无限累积。沿着一个较长的环走一圈回到起点后,纯VO轨迹是无法闭合的。
视觉SLAM 在VO的基础上扩展了全局一致性机制:
- 一个持久的全局地图(地标点/关键帧),在局部滑动窗口之外依然存在,使得可以重新观测到旧的地标点;
- 位置识别,用于检测回环——即对此前已建图区域的重访;
- 全局优化(位姿图优化或全局光束法平差),当检测到回环时,重新分配累积的漂移;
- 通常还包括重定位:在跟踪失败后从地图中恢复位姿。
一个简明的对比:
| 方面 | VO | SLAM |
|---|---|---|
| 范围 | 局部(近期帧的窗口) | 全局(整条轨迹+地图) |
| 漂移 | 无限增长 | 在回环处被校正 |
| 地图 | 无,或临时局部地图 | 持久、可复用 |
| 成本 | 低,有界 | 更高;随地图规模增长 |
| 故障恢复 | 丢失即永久丢失 | 相对地图进行重定位 |
VO流程实际做了什么
具体来说,一次基于特征的VO迭代大致如下——值得内化理解,因为它同时也是每个基于特征的SLAM系统的跟踪线程:
- 在新帧中检测/跟踪特征(FAST/ORB检测,或从上一帧进行KLT跟踪)。
- 与前一帧(或多帧)进行关联:描述子匹配或已跟踪的对应关系,经RANSAC剔除误匹配。
- 估计相对位姿:由2D-2D匹配得到本质矩阵(初始化阶段),或对局部三角化的3D点进行PnP(稳态阶段)。
- 从估计的运动中三角化新的点,以维持局部3D结构的持续更新。
- 局部细化:对最近若干帧/关键帧进行小规模光束法平差(滑动窗口BA)。
直接法VO用光度对齐取代步骤1-3:在位姿(以及逐像素深度)上最小化帧间像素强度误差,跳过显式的对应关系建立。无论哪种方式,输出都是一串相对位姿链——第3步之后的每一个阶段都是为了减缓漂移,而不是消除漂移。
对应的评价指标:**RPE(相对位姿误差)**衡量在固定距离/时间间隔上位姿增量的误差——即漂移率,是VO的诚实评分。**ATE(绝对轨迹误差)**衡量将估计结果与真值对齐后的全局位置误差——主要取决于是否闭合了回环,是SLAM的评分。一个RPE优异但ATE较差的系统是一个没有全局一致性的优秀里程计;反之则说明该系统在噪声较大的前端之上拥有强大的回环检测能力。
二者的边界是一个连续谱
DSO和SVO是VO系统;LDSO是”DSO+回环检测”,即同一前端被提升为SLAM。ORB-SLAM的跟踪线程本身基本上就是一个VO系统——正是局部建图线程和回环检测线程使其成为SLAM。在VIO中,同样的区分体现为里程计(MSCKF、VINS前端)与具有地图复用功能的完整SLAM(ORB-SLAM3、启用回环检测的VINS-Mono)之间的对比。
需要哪一种是一个工程决策。如果只关心短时间尺度的自我运动(例如为控制器提供输入、无人机稳定控制),VO的有界计算量和简洁性更有优势。如果机器人会重访某些地点、需要长期运行,或必须在先验地图中定位,那么就需要SLAM——没有其他手段能够阻止无限的漂移。
常见陷阱
- 跨类别比较ATE:用ATE来评判一个在有环路序列上运行的VO系统(或仅用RPE来评判一个SLAM系统)会误读它们各自的设计目标;应检查论文报告的是哪种指标以及哪种对齐方式(单目情形下的6自由度还是7自由度)。
- 假设回环检测是免费的:将VO升级为SLAM会增加位置识别数据库、验证逻辑、全局优化,以及——最关键的——新的失效模式(错误回环)。在实践中,一个鲁棒的VO可能胜过一个脆弱的SLAM。
- 地图无限增长:“什么都保留”的SLAM在长时间运行数小时后性能会下降;关键帧剔除和地图管理是SLAM系统的基本要求,而不是可选项。
- 重定位≠回环检测:两者都使用位置识别,但重定位是相对已有地图恢复跟踪,而回环检测则是添加使地图发生形变的约束;将二者混为一谈会使系统设计的讨论变得混乱。
对SLAM的意义
这一区分组织了整个领域:你将学习的几乎每一个系统,都或者是一种VO/里程计方法,或者是一个通过在VO核心之外包裹地图管理、位置识别和全局优化而构建的SLAM系统。了解一篇论文所声称的是哪一类(局部精度还是全局一致性),能够告诉你哪些基准指标是重要的——VO看RPE,带回环检测的SLAM看ATE——以及它的失效模式将会是什么。