3、陀螺仪校准:零偏校准、温度补偿、Allan方差分析
陀螺仪校准,说白了就是让飞控知道「什么是静止」。
我刚开始做飞控那会儿,总觉得陀螺仪数据挺准的,结果一上电飞机就慢慢自旋。查了半天,原来是零偏没校准好。嗯,从那以后我再也不敢跳过这一步了。
3.1 零偏校准:最基础也最容易被忽略
陀螺仪静止时,理论上输出应该是0。但现实是,每个陀螺仪都有个固定的偏移量。这个偏移量,就是零偏。
零偏校准的原理
说白了就是让陀螺仪静止一段时间,采集一堆数据,然后取平均值。这个平均值就是零偏值。以后每次读取数据时,把这个值减掉就行。
在ArduPilot里,零偏校准通常在飞控上电后的前几秒自动完成。你只需要把飞机放平、静止不动。
核心参数:
INS_GYRO_FILTER:陀螺仪低通滤波频率,默认20HzINS_ACC_BODY_FIX:是否使用机体坐标系对齐INS_GYRO_RATE:陀螺仪采样率,通常设为400Hz
我个人习惯在每次飞行前做一次静态校准。尤其是冬天和夏天温差大的时候,零偏变化很明显。
小技巧:如果你发现飞机悬停时慢慢往一个方向漂,先别急着调PID。先检查一下陀螺仪零偏值。很多时候,重新校准一下就好了。
3.2 温度补偿:为什么冬天和夏天数据不一样?
陀螺仪的零偏会随温度变化。你想想看,MEMS陀螺仪内部是个微小的振动结构,温度一变,材料的弹性模量、阻尼系数都会变。零偏自然就跑了。
温度补偿怎么做?
ArduPilot支持两种方式:
- 内置温度补偿:部分高端IMU芯片自带温度补偿,比如ICM-20689。这种直接用就行。
- 软件温度补偿:通过采集不同温度下的零偏值,拟合出一条曲线。ArduPilot里用
INS_GYRO_TEMP_ENABLE参数开启。
我在项目中遇到过一个问题:一台无人机在室内校准好好的,拿到室外零下10度的地方,一解锁就翻。查了半天,就是温度补偿没做好。后来我写了个脚本,让飞控在-20°C到60°C范围内自动采集数据,拟合补偿曲线。效果立竿见影。
注意:温度补偿不是万能的。如果温度变化太快(比如从空调房直接拿到烈日下),补偿曲线可能跟不上。建议给飞控一个「温度稳定时间」,至少等30秒再起飞。
3.3 Allan方差分析:量化你的陀螺仪到底有多「稳」
Allan方差,听起来很高大上。其实它就是用来分析陀螺仪噪声特性的工具。
为什么要做Allan方差?
因为陀螺仪的噪声不是白噪声。它包含多种成分:
- 角度随机游走:高频噪声,像白噪声一样
- 速率随机游走:低频漂移,慢慢变化
- 零偏稳定性:长时间尺度下的稳定性
- 量化噪声:ADC量化带来的误差
Allan方差可以把这些成分分离开来。你想想看,就像用筛子把不同大小的沙子分开一样。
实际操作步骤:
- 让陀螺仪静止,采集至少2小时的数据(采样率400Hz)
- 用Python或MATLAB计算Allan方差
- 从Allan方差曲线上读出关键参数
下面是我常用的Python代码片段:
import numpy as np
import matplotlib.pyplot as plt
def allan_variance(data, fs):
"""计算Allan方差"""
N = len(data)
max_m = int(np.log2(N))
tau = np.zeros(max_m)
avar = np.zeros(max_m)
for m in range(1, max_m + 1):
tau[m-1] = m / fs
# 分组平均
cluster_size = 2**m
num_clusters = N // cluster_size
clusters = data[:num_clusters * cluster_size].reshape(-1, cluster_size)
means = np.mean(clusters, axis=1)
# 计算方差
avar[m-1] = 0.5 * np.mean((means[1:] - means[:-1])**2)
return tau, np.sqrt(avar)
# 读取陀螺仪数据
gyro_data = np.loadtxt('gyro_static.txt')
fs = 400.0 # 采样率
tau, adev = allan_variance(gyro_data, fs)
# 绘制Allan方差曲线
plt.loglog(tau, adev)
plt.xlabel('积分时间 (s)')
plt.ylabel('Allan标准差 (deg/s)')
plt.grid(True)
plt.show()
从曲线上你能读出什么?
| 曲线特征 | 对应参数 | 典型值(消费级IMU) |
|---|---|---|
| 斜率-1/2的直线段 | 角度随机游走 | 0.01 ~ 0.1 °/√h |
| 曲线最低点 | 零偏稳定性 | 1 ~ 10 °/h |
| 斜率+1/2的直线段 | 速率随机游走 | 0.1 ~ 1 °/h/√h |
我记得有一次,客户说他们的无人机悬停时高度漂移严重。我一看Allan方差曲线,零偏稳定性高达50°/h,明显是IMU质量不行。换了IMU后,问题就解决了。
实战建议:如果你用的是Pixhawk这类飞控,建议至少做一次Allan方差分析。把结果存下来,以后换IMU或者升级固件时对比一下。你会发现,不是所有IMU都「一样」的。
3.4 知识体系总览
下面这张图,是我自己总结的陀螺仪校准知识体系。你可以把它当作一个检查清单:
这张图把三个核心模块串起来了。你从左边开始,先做零偏校准,再做温度补偿,最后用Allan方差验证效果。每一步都踩实了,EKF才能正常工作。
最后提醒一句:别指望一次校准管一辈子。陀螺仪会老化,温度环境会变。我建议每3个月重新做一次完整的校准流程。尤其是换过IMU或者摔过机之后,一定要重新校准。
公众号:蓝海资料掘金营,微信deep3321