相机-IMU 标定:激励比跑 Kalibr 更重要
T_BC 与 time offset 的可观性、Kalibr 报告解读与三次重复标定的验收协议。

1. 外参错 1° 像算法 bug
外参 (IMU body → Camera)旋转差 1°,高速运动时视觉残差与 IMU 预测持续打架:尺度呼吸、高度漂移、转弯掉高程——看起来像算法 bug,其实是标定问题。标定不是「跑一次 Kalibr 出 yaml」,而是激励设计 + 报告解读 + 重复验证 + 版本管理的完整流程。
2. 联合估计什么
Kalibr cam-imu 模块联合优化:相机内参/畸变(可先 mono 标定再 fix)、IMU 噪声密度 / random walk(Allan 或 datasheet 初值)、外参 、时间偏移 (camera vs IMU)。
可观性(Mirzaei & Roumeliotis):
- 旋转外参:绕多轴角速度激励
- 平移外参:线加速度变化 + 旋转(杠杆臂 )
- :acceleration 变化;匀速运动不可观
- 尺度(若联合):需要 sufficient excitation
慢速平移、标定板始终在画面中心 → 大概率收敛到错误局部最优。
3. 激励设计
必须覆盖:绕近似三轴角速度、线加速度变化(加减速/上下/侧向)、标定板多距离、多倾角、含画面边缘。
| 无效操作 | 原因 |
|---|---|
| 几乎平移、少旋转 | 外参旋转/平移耦合 |
| 板总在中心 | 边缘畸变未观测 |
| 运动过猛模糊 | 角点失败 → 外点 |
| IMU 饱和 | 模型崩 |
| < 60s | 部分参数未收敛 |
2 分钟漂亮激励 > 10 分钟乱甩。均匀光照(避免 auto-exposure 跳)、固定焦距、隔振。采集时让标定板短暂出画再入画,比始终居中更能观测畸变与边缘检测稳定性——这和「板总在画面中间」的无效采集正好相反,但很多人习惯后者。
4. 报告怎么读
- 重投影 RMSE:mean < 0.3px,std 合理;过大 → 内参/检测/同步
- IMU 残差:加速度/陀螺是否白噪声状
- 外参协方差:某轴 异常大 → 激励不足
- :多次独立采集 std < 1ms 量级
三次独立标定:外参旋转 spread 应 < 0.2–0.5°(视平台);散 → 查安装/同步/激励,不要取平均糊弄。
5. 时间偏移与轴向
外参几何正确但 未补偿 → 动态下像外参错。路径:硬件 trigger → Kalibr 估 写入 yaml → VIO 在线 refine 作微调。验收:fix 外参,扫 ,同一 bag 的 ATE / reproj error 应呈清晰极小值。
标定前核对:加速度 m/s² 还是 g、陀螺 rad/s 还是 deg/s、body 轴与 CAD 一致、相机 optical frame(x 右 y 下 z 前)。错了 Kalibr 仍可能「收敛」——bias 和外参会吸收错误。
6. 上真机验收
yaml 入库后,同一 bag / 同一场景:
- 静止 5min:姿态 vs 重力稳定,bias 合理
- 慢速 8 字:初始化 100%,尺度 stable
- 原地纯旋转:位置不应大幅 drift
- 已知长度走廊往返:开环尺度误差 < 2%
- A/B:旧外参 vs 新外参同一 bag 的 ATE 对比
结构件更换、撞击、重拆装 → 强制重标。外参绑定 SN、固件版本、结构件版本、标定日期、原始 bag hash——否则会在「算法 regression」上浪费几周。
任一步真机验收 FAIL,先查时间戳与轴向,再怀疑 Kalibr——顺序反了会在噪声参数上浪费整周。标定板检测失败帧应占 bag 比例 < 5%,否则激励再漂亮也救不了重投影。Allan 方差估出的噪声若与 datasheet 差一个数量级,先查 IMU 单位再跑 cam-imu,否则优化器会用错模型硬收敛。
7. 验收 KPI
- 三次标定外参 spread(rotation °, translation mm)
- Kalibr reproj RMSE + IMU 残差谱
- 重复性
- 真机五项 pass/fail
- 新旧外参 ATE delta
标定 yaml 是传感器模组的行为接口;不可审计时,VIO 调参只是在错误几何上收敛。模组返厂重装后,旧 yaml 即使数值「差不多」也应视为失效——安装扭矩和垫片厚度变 0.1mm,平移外参在杠杆臂上会被放大成厘米级残差。
相关
也可以看看
johan's blog