第三章:IMU测量模型与预积分
做VINS这么多年,我越来越觉得IMU预积分是整个系统里最精妙的设计之一。它不像视觉特征匹配那样直观,但恰恰是它,让紧耦合的VINS系统真正跑得稳、跑得快。今天咱们就来聊聊IMU的测量模型、噪声特性,以及预积分这个核心工具。
3.1 IMU的加速度计与陀螺仪模型
先说说IMU到底测的是什么。加速度计测的是比力,不是重力加速度。什么意思呢?就是它测的是物体受到的合外力加速度,减去重力。陀螺仪测的是角速度,这个相对直观一些。
数学模型其实不复杂。对于加速度计:
a_m = R^T * (a - g) + b_a + n_a
其中a_m是测量值,R是旋转矩阵,a是真实加速度,g是重力向量,b_a是加速度计偏差,n_a是高斯白噪声。
陀螺仪模型类似:
ω_m = ω + b_g + n_g
ω_m是测量角速度,ω是真实角速度,b_g是陀螺仪偏差,n_g是噪声。
我在项目中遇到过一个问题:IMU刚上电时,偏差b_a和b_g往往比较大。如果不做初始化校准,后面整个系统都会飘。嗯,这里要注意,偏差不是固定不变的,它会随着温度和时间缓慢漂移。
核心要点:IMU测量模型的核心就是「测量值 = 真实值 + 偏差 + 噪声」。这个公式虽然简单,但后续所有预积分和状态估计都建立在这个基础上。
3.2 IMU噪声与偏差特性
噪声和偏差,这两个概念容易混淆。我简单解释一下:
- 噪声(n_a, n_g):高频随机分量,均值零,白噪声假设。说白了就是每次测量都会有的随机抖动。
- 偏差(b_a, b_g):低频缓慢变化的分量,通常建模为随机游走。你想想看,IMU用久了,偏差会慢慢漂移。
为什么会这样?因为MEMS传感器的物理特性决定了它不可能完美。温度变化、机械应力、甚至电源波动都会影响偏差。
我记得有一次做无人机实验,IMU刚开机时偏差稳定,飞了十分钟后,陀螺仪偏差漂了将近0.1 rad/s。如果不做在线估计,姿态早就翻车了。
| 参数 | 典型值(消费级IMU) | 典型值(工业级IMU) |
|---|---|---|
| 加速度计噪声密度 | 100-300 μg/√Hz | 10-50 μg/√Hz |
| 陀螺仪噪声密度 | 0.01-0.05 °/s/√Hz | 0.001-0.005 °/s/√Hz |
| 加速度计偏差稳定性 | 0.1-1 mg | 0.01-0.1 mg |
| 陀螺仪偏差稳定性 | 1-10 °/h | 0.1-1 °/h |
实战技巧:如果你用的是消费级IMU(比如MPU6050),建议在初始化阶段采集5-10秒的静态数据,取平均作为初始偏差估计。这能省去后面很多麻烦。
3.3 IMU预积分理论
好,现在进入重头戏——预积分。为什么需要预积分?
传统做法是把IMU测量值直接积分,得到两帧之间的相对位姿变化。但问题是,每次优化时,只要位姿变了,积分就要重新算。这计算量太大了,尤其是滑动窗口里有很多帧的时候。
预积分的思路很巧妙:把两帧之间的IMU测量值积分结果,变成一个「相对约束」。这个约束只跟两帧的相对位姿有关,跟绝对位姿无关。这样一来,优化时只需要更新相对位姿,不用重新积分。
数学上,预积分量是这样定义的:
ΔR_ij = ∏ exp((ω_m - b_g) * Δt)
Δv_ij = ∑ R_i * (a_m - b_a) * Δt
Δp_ij = ∑ (Δv * Δt + 0.5 * R_i * (a_m - b_a) * Δt²)
这里ΔR_ij、Δv_ij、Δp_ij就是预积分量。它们只依赖于IMU测量值和偏差,跟绝对位姿无关。
我个人习惯把预积分理解成「IMU测量值的压缩表示」。你想想看,原本几百个IMU数据点,压缩成三个量(旋转、速度、位置增量),再加上一个协方差矩阵。这效率提升是巨大的。
注意:预积分量依赖于偏差b_a和b_g。当偏差更新时,预积分量需要重新计算或线性修正。我建议在优化迭代中,如果偏差变化不大,用一阶线性近似修正;如果偏差变化大,就重新积分。
3.4 预积分在因子图中的作用
因子图是VINS系统的骨架。每个因子代表一个约束,节点代表状态变量。预积分因子就是连接两个关键帧之间的IMU约束。
在因子图中,预积分因子扮演什么角色?
- 提供帧间运动约束:告诉优化器,两帧之间的相对运动应该符合IMU测量值
- 约束尺度:单目视觉无法确定绝对尺度,IMU预积分提供了尺度信息
- 平滑轨迹:视觉特征可能丢失或误匹配,IMU预积分保证轨迹的平滑性
我曾经在一个室内定位项目中,视觉特征经常因为光照变化而丢失。全靠IMU预积分撑着,系统才能持续输出稳定的位姿估计。说白了,预积分就是VINS系统的「安全带」。
下面这张图展示了预积分在因子图中的位置:
从图中可以看到,预积分因子像链条一样把关键帧串起来。视觉因子则连接关键帧和路标点。两者配合,就构成了完整的VINS因子图。
预积分因子还有一个重要特性:它提供了相对约束,而不是绝对约束。这意味着即使全局位姿有漂移,帧间相对运动依然准确。这个特性在回环检测时特别有用。
总结一下:预积分把IMU测量值转化为因子图中的边约束。它让优化问题变得稀疏、高效,同时保证了系统的鲁棒性。没有预积分,紧耦合VINS的计算量会大一个数量级。
好了,关于IMU测量模型和预积分,核心内容就是这些。从测量模型到噪声特性,再到预积分理论和因子图应用,每一步都有它的工程意义。我个人觉得,理解预积分的关键在于「相对约束」这个思想——它把时间序列上的积分问题,转化成了空间上的约束问题。这个思路,在很多机器人问题里都能看到影子。
避坑指南:我曾经在实现预积分时,忽略了偏差更新对预积分量的影响。结果优化迭代时,预积分量一直用旧偏差,导致收敛很慢。后来加了一阶线性修正,效果立竿见影。如果你也在写预积分代码,记得处理偏差更新。
公众号:蓝海资料掘金营,微信deep3321