返回专辑
·Johan·3 分钟阅读

相机-IMU 标定:激励比跑 Kalibr 更重要

T_BC 与 time offset 的可观性、Kalibr 报告解读与三次重复标定的验收协议。

相机-IMU 标定:激励比跑 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. 报告怎么读

  1. 重投影 RMSE:mean < 0.3px,std 合理;过大 → 内参/检测/同步
  2. IMU 残差:加速度/陀螺是否白噪声状
  3. 外参协方差:某轴 异常大 → 激励不足
  4. :多次独立采集 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 / 同一场景:

  1. 静止 5min:姿态 vs 重力稳定,bias 合理
  2. 慢速 8 字:初始化 100%,尺度 stable
  3. 原地纯旋转:位置不应大幅 drift
  4. 已知长度走廊往返:开环尺度误差 < 2%
  5. 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