第2章:零偏校准原理
各位工程师朋友,今天我们来聊聊陀螺仪零偏校准。说实话,零偏是陀螺仪最基础也最让人头疼的误差源。我刚开始做惯导那会儿,就被零偏坑过——明明静态下数据看着挺好,一上电跑起来,导航误差就蹭蹭往上涨。后来才明白,零偏不校准好,后面做啥都是白搭。
零偏定义与数学模型
零偏,说白了就是陀螺仪在零输入角速度时,输出却不为零。你可以想象成:明明没转,它却说你在转。这个误差是加性的,会直接积分到角度上。
数学上,我们通常这样建模:
ω_measured = ω_true + b + n
其中:
- ω_measured — 陀螺仪实际输出
- ω_true — 真实角速度
- b — 零偏(bias),包含常值部分和慢变部分
- n — 测量噪声,通常是白噪声
这里要注意,零偏不是一成不变的。它随温度、时间、供电电压都会漂。我个人习惯把零偏拆成三部分:
- 常值零偏:上电后基本固定的偏移,可以通过校准消除
- 逐次启动零偏:每次上电都不一样,需要在线估计
- 温度相关零偏:随温度变化,需要温度补偿
核心要点:零偏校准的目标,就是把这三种零偏尽可能降到最低。常值零偏靠静态校准,逐次零偏靠在线估计,温度零偏靠补偿模型。
静态校准方法
静态校准是最基础的方法。把陀螺仪放在水平台面上,保持不动,采集一段时间的数据,然后取平均。
为什么取平均?因为噪声是零均值的,平均时间越长,噪声抑制效果越好。我一般建议采集30秒到2分钟的数据,具体看陀螺仪的噪声水平。
// 静态校准伪代码
float bias_sum = 0;
int sample_count = 0;
while (sample_count < 6000) { // 假设100Hz采样,采集60秒
bias_sum += gyro_read();
sample_count++;
delay(10);
}
float bias = bias_sum / sample_count;
嗯,这里有个坑。静态校准的前提是「绝对静止」。但现实中,地面微振动、气流扰动都会引入误差。我曾经在实验室做校准,结果发现数据里有个0.01°/s的波动,排查了半天才发现是空调出风口对着IMU吹。
我的经验:静态校准时,把IMU放在减震台上,盖上防风罩,远离热源。采集时间至少60秒,然后去掉前10秒的数据(因为刚上电不稳定)。
六位置法校准
六位置法,说白了就是让陀螺仪在六个不同的姿态下采集数据。为什么是六个?因为三个轴,每个轴正反各一次,正好六个。
具体做法:
- 将IMU的X轴朝上,采集数据
- X轴朝下,采集数据
- Y轴朝上,采集数据
- Y轴朝下,采集数据
- Z轴朝上,采集数据
- Z轴朝下,采集数据
每个位置采集30秒左右,取平均。然后利用地球自转角速度的分量来标定。你想想看,地球自转大约是15°/h,在赤道附近水平分量最大,在极点垂直分量最大。利用这个已知量,就能反算出零偏和标度因数。
六位置法的数学模型是这样的:
对于每个位置 i:
ω_measured_i = S * ω_true_i + b + n_i
其中 S 是标度因数矩阵,b 是零偏向量。
六个位置联立方程组,最小二乘求解。
注意:六位置法对转台精度要求较高。如果转台定位误差超过0.1°,校准精度就会明显下降。我见过有人用手动翻转的方式做六位置,结果重复性很差,因为每次摆放的角度都不一样。
多位置法校准
六位置法虽然简单,但信息量有限。多位置法就是采集更多姿态下的数据,通常12个、24个甚至更多位置。位置越多,对误差模型的辨识越充分。
我个人比较推荐24位置法。在空间均匀分布24个姿态,每个姿态采集15秒。这样做的好处是:
- 能同时辨识零偏、标度因数和安装误差
- 对噪声的鲁棒性更好
- 可以发现某些位置下的异常数据
多位置法的核心是设计一个「姿态序列」,让所有姿态在空间上均匀分布。我常用的方法是:
- 确定转台的三个轴:内框、中框、外框
- 每个轴按30°步进旋转
- 在每个位置停留15秒
- 记录陀螺仪输出和转台角度
采集完成后,用最小二乘法拟合出误差模型参数。这里要注意,数据里可能有野值点,需要做预处理滤波。
避坑指南:我曾经做过一次24位置校准,结果拟合出来的零偏参数跟六位置法差了0.5°/h。排查后发现,是转台在某个位置有谐振,数据被污染了。从那以后,我每次做多位置校准都会先检查每个位置的数据质量,把方差过大的位置剔除掉。
Allan方差分析
Allan方差是分析陀螺仪噪声特性的利器。它能告诉我们:零偏的稳定性到底怎么样,噪声是白噪声还是随机游走,量化噪声有多大。
简单来说,Allan方差就是把数据按不同时间长度分段,计算每段均值的方差。然后画成双对数曲线,从曲线形状就能读出噪声类型。
典型的Allan方差曲线有以下几个特征区域:
| 斜率 | 噪声类型 | 物理含义 |
|---|---|---|
| -1 | 量化噪声 | ADC量化误差 |
| -1/2 | 白噪声 | 角度随机游走 |
| 0 | 零偏不稳定性 | 零偏的长期漂移 |
| +1/2 | 速率随机游走 | 低频漂移 |
| +1 | 速率斜坡 | 线性趋势 |
我一般用Allan方差来评估校准效果。校准前和校准后各做一次Allan分析,看看零偏不稳定性有没有改善。如果校准后零偏不稳定性反而变差了,那说明校准过程引入了额外误差。
实用技巧:做Allan方差分析时,数据长度至少要覆盖10倍的最长相关时间。比如你想分析100秒的稳定性,那至少要采集1000秒的数据。我习惯采集2小时以上的静态数据来做Allan分析。
校准精度评估
校准做完了,怎么知道效果好不好?我一般用三个指标来评估:
- 残差分析:校准后,把模型预测值和实测值做差,看残差的均值和标准差。均值应该接近0,标准差越小越好。
- 重复性测试:重复校准多次,看零偏参数的重复性。如果每次校准结果相差很大,说明校准方法有问题或者环境干扰太大。
- Allan方差对比:校准前后的Allan方差曲线对比,看零偏不稳定性有没有改善。
举个例子,我曾经校准一款MEMS陀螺仪,校准前零偏不稳定性是10°/h,校准后降到了2°/h。但重复性测试发现,每次上电零偏能差5°/h。这说明常值零偏虽然校准了,但逐次启动零偏还是很大,需要在线估计来补偿。
重要提醒:校准精度不是越高越好。过度校准可能会把噪声也「校准」进去,导致实际使用中性能反而下降。我一般把校准精度控制在陀螺仪噪声水平的1/3以内就够了。
好了,零偏校准的原理就讲到这里。说白了,校准就是跟误差斗智斗勇的过程。方法很多,但核心思路就一个:用已知量去估计未知量。下节课我们聊聊温度补偿,那又是另一番天地了。
公众号:蓝海资料掘金营,微信deep3321