3、IMU传感器模型与测量原理:加速度计与陀螺仪的工作原理、测量模型、噪声特性与艾伦方差
各位同学,今天我们来聊聊IMU的核心——加速度计和陀螺仪。说实话,这两个传感器是视觉惯性里程计的“灵魂伴侣”。没有它们,纯视觉SLAM在快速运动或纹理缺失时很容易“翻车”。我自己在早期做机器人定位时,就吃过纯视觉的亏——一进走廊,白墙一片,直接丢位置。后来加了IMU,才真正稳下来。
好,我们直接进入正题。先搞清楚它们是怎么工作的,再看怎么建模,最后聊聊怎么分析噪声。
3.1 加速度计的工作原理
加速度计测量的是比力(specific force),不是单纯的运动加速度。什么意思呢?它测的是物体受到的惯性力与重力之和,再除以质量。说白了,就是传感器感受到的“推背感”加上地球引力。
常见的MEMS加速度计内部有一个微小的质量块,悬在弹簧结构上。当芯片加速时,质量块会偏移,电容值随之变化。通过测量电容差,就能反推出加速度。嗯,这里要注意:它测的是自身坐标系下的加速度,不是世界坐标系。
测量模型可以写成:
a_m = R^T * (a_w - g_w) + b_a + n_a
其中:
a_m:加速度计测量值(本体坐标系)R:从世界坐标系到本体坐标系的旋转矩阵a_w:真实运动加速度(世界坐标系)g_w:重力向量(世界坐标系)b_a:加速度计偏置(bias)n_a:高斯白噪声
我在项目中遇到过一个问题:静止时加速度计读数不是0,而是9.8 m/s²左右。很多新手会以为传感器坏了。其实不是,它测的是重力。你想想看,自由落体时加速度计读数反而是0,因为质量块处于失重状态。这个坑,我当年调试无人机时踩过。
3.2 陀螺仪的工作原理
陀螺仪测量角速度。MEMS陀螺仪利用的是科里奥利效应——一个振动的质量块在旋转时会产生垂直于振动方向的位移。通过检测这个位移,就能算出角速度。
我个人习惯把陀螺仪想象成一个“旋转感受器”。它不关心你平移得多快,只关心你转得多快。测量模型如下:
ω_m = ω_t + b_g + n_g
其中:
ω_m:陀螺仪测量值ω_t:真实角速度b_g:陀螺仪偏置n_g:高斯白噪声
注意,陀螺仪没有重力项,所以比加速度计“干净”一些。但它的偏置漂移更让人头疼。我曾经在室内做VIO测试,陀螺仪偏置慢慢飘了0.01 rad/s,十分钟后姿态就偏了5度。视觉特征一少,整个系统就崩了。
3.3 噪声特性分析
IMU的噪声不是单一的白噪声。它包含多种成分。我一般把噪声分为两类:
- 高频噪声:主要是白噪声,功率谱密度平坦。可以通过低通滤波或预积分平滑掉一部分。
- 低频噪声:主要是偏置随机游走(bias random walk),表现为偏置随时间缓慢变化。这个很难滤掉,必须在线估计。
为什么会有偏置漂移?说白了,温度变化、机械应力、电路噪声都会让偏置慢慢跑偏。你开机时的偏置和运行半小时后的偏置,可能差不少。
我建议在IMU初始化时,先静止采集几秒数据,算个初始偏置。但别指望这个偏置一直准——它只是起点。
3.4 艾伦方差分析
艾伦方差(Allan Variance)是分析IMU噪声特性的标准工具。它能把不同时间尺度上的噪声成分分离出来。我个人觉得,做VIO如果不做艾伦方差分析,就像开车不看仪表盘——心里没底。
艾伦方差的计算思路很简单:
- 采集一段长时间的静态IMU数据(至少1小时,我建议2小时以上)
- 将数据按不同时间窗口长度τ分段
- 计算每段均值,再求相邻段均值的方差
- 画出log(τ) vs log(艾伦方差)的曲线
典型的艾伦方差曲线长这样:
log(σ²)
↑
| 斜率=-1/2 (角度随机游走)
| \
| \ 斜率=0 (偏置稳定性)
| \____
| \ 斜率=+1/2 (速率随机游走)
| \
+----------------------------→ log(τ)
我来解释一下各段含义:
| 斜率 | 噪声类型 | 物理意义 |
|---|---|---|
| -1/2 | 角度/速度随机游走 | 白噪声积分后的结果,高频噪声主导 |
| 0 | 偏置稳定性 | 偏置的最小波动值,IMU质量的核心指标 |
| +1/2 | 速率随机游走 | 偏置的长期漂移,低频噪声主导 |
我曾经用一款廉价IMU做艾伦方差分析,发现偏置稳定性指标差得离谱——0.1°/s。这意味着静止时偏置波动就有0.1度每秒,根本没法做VIO。后来换了工业级IMU,偏置稳定性降到0.01°/s,系统才稳定下来。所以,选IMU时一定要看艾伦方差曲线,别只看数据手册上的“典型值”。
核心要点:艾伦方差能帮你回答三个问题:
- IMU的白噪声有多大?(决定预积分协方差增长快慢)
- 偏置有多稳?(决定是否需要在线估计偏置)
- 长期漂移有多严重?(决定VIO系统的重定位能力)
3.5 知识体系结构图
下面我用一张SVG图把本章的核心逻辑串起来。你一看就明白:
实战建议:如果你手头有IMU数据,可以用Python的allantools库直接算艾伦方差。命令很简单:allantools.compute(data, rate=100)。我每次拿到新IMU,第一件事就是跑这个脚本,看看它的“底子”怎么样。
注意:艾伦方差分析需要静态数据。如果你拿着机器人跑动时的数据去分析,结果全是运动信息,不是噪声。我曾经犯过这个错——拿着手持IMU边走边采的数据去分析,画出来的曲线乱七八糟,还以为是传感器坏了。后来才意识到,数据必须静止采集。
好了,这一章的内容就到这里。IMU的模型和噪声分析是VIO的基石。你把这些搞清楚了,后面预积分公式推导、协方差传播、偏置更新,都会顺很多。记住一句话:不懂噪声,就别谈融合。