
1. 模型错一个符号,十分钟后 scale 上天
IMU 不是角速度积分就完事。测量方程错、重力反了、单位差 57 倍——预积分、ESKF、因子图全跟着错,且短期能跑,bias 慢慢吸收,真机一动才崩。测量模型是 VIO 地基,比调噪声参数重要一百倍;地基歪了,Allan 和预积分都是在错物理上精修。
2. 测量方程
body 系常见约定:
为 body 角速度; 为 world 线加速度; 为 world 重力([0,0,-9.81] 或 [0,0,+9.81]——符号因库而异)。ENU/NED、body x-forward vs x-right 必须与视觉、预积分一致;不一致时 bias 会「吸收」错误,EuRoC 短期仍 0.05 m,真机十分钟后 scale 上天。上电静止段是验收该方程的最便宜实验:模长与方向都应与 CAD 一致。
3. bias 随机游走
离散:。bias 须联合估计——固定 bias 只在极短段成立。RW 强度从 Allan 斜率区得到。bias 必须和 同等地位进状态向量,否则 VIO 只能靠视觉硬扛尺度与重力方向。
4. 离散传播(中值积分)
ESKF 传播与预积分因子必须用同一中值/欧拉、同一 、同一 bias 处理——模型分叉会在融合里系统性冲突。驱动层 duplicate sample 或 zero velocity flag 须在积分前过滤,否则静止段 bias 被假加速度污染。传播公式写进团队 wiki,禁止各模块各抄一份论文片段。
5. 噪声离散化
连续谱密度 (rad/s/√Hz)、(m/s²/√Hz)到离散差 ——论文与代码库定义不同,填参读文档。ESKF:。 是状态转移与噪声注入雅可比——与预积分里的 应对同一物理模型。同一 Allan 拟合的 进 ESKF 与 ImuFactor 前,各查一次 conversion,勿假设「库之间通用」。
6. 单位事故
| 错误 | 表现 |
|---|---|
| deg/s 当 rad/s | 角积分快 57 倍 |
| g 当 m/s² | 尺度错 9.81 倍 |
| ms 当 s | 一切快 1000 倍 |
上真机第一步:静止 10 s, m/s²,。 轴反 90° 时静止仍模长 9.81,会用巨大 bogus bias 补偿——上电后先看静止 5 s 的 方向是否与 CAD 一致。
7. 与视觉接口
传播给帧间 pose 预测 → 特征搜索窗口;预积分给 KF 间因子 → BA;重力锚定 roll/pitch 初始化。 与 须同一物理时刻——时间戳错位会表现为 bias 发散,调噪声参数无效。部分 IMU 带 on-chip 温度,温漂大时可加 slow state 或 lookup table。视觉初始化完成前,勿用 IMU 单独 propagate 太久而不更新 bias 先验。
8. 静止段与驱动行为
部分驱动静止时输出 duplicate sample 或 zero velocity flag——积分前须跳过,否则 bias 被假加速度污染。读 datasheet 的静止检测行为;必要时驱动层过滤再进 ESKF/预积分。温漂大时 on-chip 温度可进 slow state 或 lookup table,Allan 单次标定不够。
9. 案例:重力轴反了仍模长 9.81
方向错 90° 时静止 仍正常,滤波器用巨大 bogus 补偿——上电后先看 5 s 静止 与 CAD 是否一致,再谈 Allan 填参。这是比调噪声便宜一百倍的冒烟测试。
10. 验收
- 静止 分布;
- bias 收敛曲线;
- 传播预测 vs 视觉/激光残差;
- 不同 单元测试;
- 去掉 bias 估计后长时漂移应显著恶化。
测量模型写对了,预积分和 ESKF 才是在描述同一块 IMU;写错了,两个模块各自「自洽」地错。驱动层、传播层、因子层应共用一份测量方程注释,禁止三处各写一版。静止冒烟通过后再跑 Allan 填噪声,顺序反了会浪费大量调参时间。deg/s 与 rad/s 混用是 IMU 集成里最贵的单位错误,驱动层应强制输出 SI 单位。 标定与测量模型应同一工单完成,否则时间对齐与方程符号会对不齐。
相关
也可以看看
johan's blog