4、静态标定方法:六位置法标定加速度计、速率法标定陀螺仪、最小二乘拟合参数
说到惯性传感器的标定,很多刚入行的朋友第一反应就是「找个实验室,把数据采回来,算一算就完事了」。嗯,我以前也这么干过,结果被现实狠狠教育了一顿——数据采回来,拟合出来的参数根本没法用,零漂反而更大了。
静态标定,说白了就是给传感器一个「已知的输入」,然后看它输出什么。我们通过这个对应关系,反推出传感器的误差模型参数。今天我就把最经典的两种方法——六位置法和速率法,掰开揉碎了讲清楚。
4.1 加速度计标定:六位置法
加速度计标定的核心思路是什么?你想想看,地球重力是个天然的参考源。g值大小已知,方向垂直向下。我们只要把加速度计的敏感轴依次对准重力方向,就能得到一组已知输入。
六位置法的具体操作:
- 将加速度计的X轴朝上(感受+g),记录输出
- 将加速度计的X轴朝下(感受-g),记录输出
- Y轴朝上、Y轴朝下
- Z轴朝上、Z轴朝下
一共六个位置,每个位置采集30秒以上的静态数据,取平均值。
误差模型:
对于三轴加速度计,我们通常采用以下模型:
A_meas = S * A_true + B + noise
其中:
- A_meas:测量值
- S:比例因子矩阵(3x3,包含交叉耦合)
- A_true:真实加速度
- B:零偏(bias)
六位置法能解出几个参数?理论上,每个轴有1个零偏、1个比例因子,再加上轴间交叉耦合,一共9个参数。但六个位置提供6个方程,所以我们需要做一些简化——通常假设交叉耦合项很小,先忽略,或者用最小二乘法一次性求解。
我个人习惯的做法:先做一次粗略的六位置采集,看看数据有没有明显异常。比如某个轴的数据波动特别大,那可能是传感器本身有问题,或者安装不牢固。我在项目中遇到过两次这种情况,一次是螺丝没拧紧,一次是测试台面不平。排查起来其实挺费时间的。
4.2 陀螺仪标定:速率法
陀螺仪标定和加速度计不太一样。加速度计有重力这个天然参考,陀螺仪没有。你得给它一个已知的角速率输入。
速率法的基本思路:把陀螺仪固定在转台上,让转台以已知角速率旋转。记录陀螺仪的输出,和真实角速率做对比。
具体步骤:
- 将陀螺仪的X轴对准转台旋转轴
- 设置转台以+ω1、+ω2、+ω3...等多个速率旋转
- 每个速率保持30秒以上,记录数据
- 同样操作Y轴、Z轴
为什么要多个速率?因为陀螺仪的比例因子可能不是线性的。多测几个点,才能把曲线拟合出来。
我曾经踩过一个坑:转台的速率精度不够,标定出来的比例因子误差很大。后来我学乖了,每次标定之前先用高精度陀螺仪校验一下转台。如果你没有这个条件,至少要用转台自带的编码器读数做参考,别完全相信设定值。
4.3 最小二乘拟合参数
数据采回来了,怎么算参数?最常用的方法就是最小二乘法。
说白了,最小二乘法就是找一组参数,让模型预测值和实际测量值之间的误差平方和最小。这个「误差平方和」就是我们优化的目标函数。
加速度计的最小二乘拟合:
对于六位置法,我们有6个方程:
|A_meas_x_up| |Sxx Sxy Sxz| | 0 | |Bx|
|A_meas_y_up| = |Syx Syy Syz| * | 0 | + |By|
|A_meas_z_up| |Szx Szy Szz| |+g | |Bz|
...(其他5个位置类似)
写成矩阵形式:
Y = H * X
其中Y是测量值向量,H是设计矩阵(由已知输入构成),X是待求参数向量。
最小二乘解为:
X = (H^T * H)^(-1) * H^T * Y
代码实现其实很简单,我用Python举个例子:
import numpy as np
# 假设我们有6个位置的测量数据
# 每个位置对应一个3x1的测量向量
meas = np.array([
[9.81, 0.02, 0.01], # X轴朝上
[-9.79, 0.01, -0.02], # X轴朝下
[0.01, 9.82, 0.03], # Y轴朝上
[-0.02, -9.80, -0.01],# Y轴朝下
[0.01, 0.02, 9.80], # Z轴朝上
[-0.01, -0.01, -9.81] # Z轴朝下
])
# 设计矩阵(这里简化了,实际需要包含交叉耦合项)
# 每个位置的真实加速度已知
g = 9.81
true_acc = np.array([
[0, 0, g],
[0, 0, -g],
[0, g, 0],
[0, -g, 0],
[g, 0, 0],
[-g, 0, 0]
])
# 构建H矩阵和Y向量
# ...(具体构建过程略,实际项目中建议用现成的标定工具箱)
# 最小二乘求解
# X = np.linalg.lstsq(H, Y, rcond=None)[0]
注意:实际工程中,H矩阵的条件数很重要。如果条件数太大,说明你的标定位置设计得不好,解出来的参数不可靠。我一般会检查一下条件数,如果超过1000,就重新设计标定方案。
4.4 标定流程总结
我把整个静态标定的流程画了一张图,方便你理解:
这张图把整个流程串起来了。你可能会问:为什么先标加速度计,再标陀螺仪?因为加速度计的标定不需要转台,只需要一个水平台面就行。而陀螺仪标定需要转台,设备更复杂。所以一般先做简单的,再做复杂的。
4.5 标定结果验证
参数算出来之后,怎么知道标定得好不好?
我的做法是:把标定后的参数写进算法里,重新采集一组数据,看看零漂有没有降下来。具体来说:
- 加速度计:把传感器静置在水平台面上,看标定后的输出是否接近[0, 0, g]
- 陀螺仪:把传感器静置,看标定后的输出是否接近[0, 0, 0]
如果标定后的零漂比标定前小了10倍以上,说明标定效果不错。如果只小了2-3倍,那可能哪里有问题——要么数据采集质量不好,要么模型选错了。
注意:标定不是万能的。温度变化、老化效应都会让标定参数慢慢失效。我一般建议每3-6个月重新标定一次。如果传感器工作环境温度变化很大(比如从-40°C到85°C),那还需要做温度补偿标定,这个我们后面会讲到。
好了,静态标定的核心内容就这些。六位置法和速率法是最基础、最实用的方法,掌握了它们,大部分惯性传感器的标定需求都能搞定。最小二乘法虽然看起来有点数学味,但实际用起来就是个工具,别被公式吓到。
公众号:蓝海资料掘金营,微信deep3321