第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秒的数据(因为刚上电不稳定)。

六位置法校准

六位置法,说白了就是让陀螺仪在六个不同的姿态下采集数据。为什么是六个?因为三个轴,每个轴正反各一次,正好六个。

具体做法:

  1. 将IMU的X轴朝上,采集数据
  2. X轴朝下,采集数据
  3. Y轴朝上,采集数据
  4. Y轴朝下,采集数据
  5. Z轴朝上,采集数据
  6. Z轴朝下,采集数据

每个位置采集30秒左右,取平均。然后利用地球自转角速度的分量来标定。你想想看,地球自转大约是15°/h,在赤道附近水平分量最大,在极点垂直分量最大。利用这个已知量,就能反算出零偏和标度因数。

六位置法的数学模型是这样的:

对于每个位置 i:
ω_measured_i = S * ω_true_i + b + n_i

其中 S 是标度因数矩阵,b 是零偏向量。
六个位置联立方程组,最小二乘求解。

注意:六位置法对转台精度要求较高。如果转台定位误差超过0.1°,校准精度就会明显下降。我见过有人用手动翻转的方式做六位置,结果重复性很差,因为每次摆放的角度都不一样。

多位置法校准

六位置法虽然简单,但信息量有限。多位置法就是采集更多姿态下的数据,通常12个、24个甚至更多位置。位置越多,对误差模型的辨识越充分。

我个人比较推荐24位置法。在空间均匀分布24个姿态,每个姿态采集15秒。这样做的好处是:

  • 能同时辨识零偏、标度因数和安装误差
  • 对噪声的鲁棒性更好
  • 可以发现某些位置下的异常数据

多位置法的核心是设计一个「姿态序列」,让所有姿态在空间上均匀分布。我常用的方法是:

  1. 确定转台的三个轴:内框、中框、外框
  2. 每个轴按30°步进旋转
  3. 在每个位置停留15秒
  4. 记录陀螺仪输出和转台角度

采集完成后,用最小二乘法拟合出误差模型参数。这里要注意,数据里可能有野值点,需要做预处理滤波。

避坑指南:我曾经做过一次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