单目尺度可观性:何时能钉住尺度、何时只能漂
从 Sim(3) 自由度出发分析单目 VO/SLAM 的尺度不可观条件,以及 IMU/轮速/已知尺寸如何补齐米制可观性。

1. 轨迹看起来合理,尺子量不对
单目 SLAM 最迷惑的一点:RViz 里绕 room 一圈回到起点也对——但用尺子量,实际走了 10 m,系统以为走了 7 m。不是 bug,是相似变换 Sim(3) 自由度:没有尺度观测时,整个轨迹 + 地图可整体缩放而重投影误差不变。
2. Sim(3) 与不可观的直觉
单目两视图重建只能确定到相似变换:
可以是任意正数——像素射线交会只确定「形状」,不确定「米制大小」。纯视觉 BA 和纯视觉回环都不能钉住 。评测单目 VO 必须用 Sim(3) 对齐(evo_ape --correct_scale),否则 ATE 虚假乐观或悲观。对内评审别拿 SE(3) ATE 比较 mono 与 stereo,结论会天然偏向双目。
不可观直觉:只有像素射线交会 → 深度与相机运动尺度耦合;匀速直线 → 尺度与加速度混淆(「慢走小房间」=「快走大房间」在图像上可等价);纯视觉回环 → 约束相对形状,不约束绝对米制。
3. 何时尺度变得可观
| 尺度源 | 机制 |
|---|---|
| 双目/RGB-D | 基线/深度直接给米制 |
| IMU 加速度 | 重力 + 运动激励分离尺度与加速度 |
| 轮速 | 非完整约束给速度尺度 |
| 已知物体尺寸 | AR 标记/已知宽度门 |
| GPS/UWB | 绝对位置/距离 |
VIO 初始化核心难题:在 sufficient excitation 下同时估计 。激励不足(静止、匀速直线)→ 尺度-重力-bias 纠缠 → 初始化失败或虚假成功。需要绕多轴旋转 + 线加速度变化。
4. 工程对策
监控尺度漂移:
或对比 IMU 积分距离 vs 视觉位移。尺度呼吸是 VIO 初始化未收敛的典型症状。
初始化门控:未收敛前不输出绝对速度给控制;需要米制时尽早引入至少一种尺度源;初始化成功后监控 scale 变化率。
Mono + 轮速折中:尺度可观性来自非完整约束与转弯时的 slip 差异——比 VIO 弱,比纯 mono 好。轮速尺度当 slow-varying state 监控,不要 hard fix,否则轮胎磨损后尺度又慢慢漂。
控制接口风险:Mono VO 输出速度若未标定尺度,直接喂 PID,表现像「增益突然变大/变小」。scale variance 大时,控制器应限速或切纯轮速闭环。
AR / 已知尺寸锚点:已知宽度的门或 AprilTag 边长,可在 BA 里加绝对距离因子。比纯 VIO 弱,但部署快——Tag 检测失败时要有 fallback,不能 scale 突然跳变。
5. 容易想错的地方
「回环后尺度就准了」——单目回环只约束相对 scale consistency,不引入米制 anchor。「VIO 有 IMU 所以尺度一定准」——激励不足时 IMU 也救不了。Gazebo / Isaac 里 mono SLAM 评测也要 Sim(3) 对齐——仿真给米制 truth,但 mono 估计只有相对 scale。
纯单目 ORB-SLAM 尺度任意——只能做相对导航。要米制必须 Stereo/RGB-D/VIO。
6. VIO 初始化激励的设计
出厂测试常让机器人「静止 5 s 再匀速直线 2 m」——对 VIO 尺度可观性几乎无效。有效激励需绕多轴旋转 + 线加速度变化:8 字、原地转 + 短冲、手持左右晃。初始化 gate 应检查加速度方差与角速度方差阈值,不满足则拒绝输出 metric pose。
Monocular visual odometry 在 long corridor 里尺度 drift 慢,不易察觉——用已知距离地标(两柱间距 5 m)周期性抽检 ,比只看 RViz 闭环 honest。
7. 验收
- 尺度因子 的时间序列(VIO)
- Sim(3) ATE vs SE(3) ATE 差异
- 初始化成功率 vs 运动类型
- 已知距离段的尺度误差
- 去掉 IMU 后尺度漂移率
- 初始化阶段 scale variance 与控制器限速联动
- 激励不足时初始化拒绝率(应 >0,不是永远成功)
单目没有尺度不是缺陷,是几何事实。需要米制就加观测;不需要米制就别用 SE(3) ATE 折磨 mono VO。Sim(3) 对齐是礼貌,也是对读者的时间尊重。
相关
也可以看看
johan's blog