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

IMU 测量模型:连续时间到离散传播

陀螺/加计方程、bias 随机游走、重力约定与 √dt;单位事故与视觉接口。

IMU 测量模型:连续时间到离散传播

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