4、静态标定方法:六位置法标定加速度计、速率法标定陀螺仪、最小二乘拟合参数

说到惯性传感器的标定,很多刚入行的朋友第一反应就是「找个实验室,把数据采回来,算一算就完事了」。嗯,我以前也这么干过,结果被现实狠狠教育了一顿——数据采回来,拟合出来的参数根本没法用,零漂反而更大了。

静态标定,说白了就是给传感器一个「已知的输入」,然后看它输出什么。我们通过这个对应关系,反推出传感器的误差模型参数。今天我就把最经典的两种方法——六位置法和速率法,掰开揉碎了讲清楚。

4.1 加速度计标定:六位置法

加速度计标定的核心思路是什么?你想想看,地球重力是个天然的参考源。g值大小已知,方向垂直向下。我们只要把加速度计的敏感轴依次对准重力方向,就能得到一组已知输入。

六位置法的具体操作

  1. 将加速度计的X轴朝上(感受+g),记录输出
  2. 将加速度计的X轴朝下(感受-g),记录输出
  3. Y轴朝上、Y轴朝下
  4. Z轴朝上、Z轴朝下

一共六个位置,每个位置采集30秒以上的静态数据,取平均值。

误差模型

对于三轴加速度计,我们通常采用以下模型:

A_meas = S * A_true + B + noise

其中:

  • A_meas:测量值
  • S:比例因子矩阵(3x3,包含交叉耦合)
  • A_true:真实加速度
  • B:零偏(bias)

六位置法能解出几个参数?理论上,每个轴有1个零偏、1个比例因子,再加上轴间交叉耦合,一共9个参数。但六个位置提供6个方程,所以我们需要做一些简化——通常假设交叉耦合项很小,先忽略,或者用最小二乘法一次性求解。

我个人习惯的做法:先做一次粗略的六位置采集,看看数据有没有明显异常。比如某个轴的数据波动特别大,那可能是传感器本身有问题,或者安装不牢固。我在项目中遇到过两次这种情况,一次是螺丝没拧紧,一次是测试台面不平。排查起来其实挺费时间的。

4.2 陀螺仪标定:速率法

陀螺仪标定和加速度计不太一样。加速度计有重力这个天然参考,陀螺仪没有。你得给它一个已知的角速率输入。

速率法的基本思路:把陀螺仪固定在转台上,让转台以已知角速率旋转。记录陀螺仪的输出,和真实角速率做对比。

具体步骤:

  1. 将陀螺仪的X轴对准转台旋转轴
  2. 设置转台以+ω1、+ω2、+ω3...等多个速率旋转
  3. 每个速率保持30秒以上,记录数据
  4. 同样操作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 标定流程总结

我把整个静态标定的流程画了一张图,方便你理解:

静态标定全流程 1. 准备阶段 传感器安装、转台预热 2. 加速度计标定 六位置法采集数据 3. 陀螺仪标定 速率法采集数据 4. 数据处理 去除异常值、取平均、构建方程 5. 参数拟合 最小二乘法求解零偏、比例因子 6. 验证标定结果

这张图把整个流程串起来了。你可能会问:为什么先标加速度计,再标陀螺仪?因为加速度计的标定不需要转台,只需要一个水平台面就行。而陀螺仪标定需要转台,设备更复杂。所以一般先做简单的,再做复杂的。

4.5 标定结果验证

参数算出来之后,怎么知道标定得好不好?

我的做法是:把标定后的参数写进算法里,重新采集一组数据,看看零漂有没有降下来。具体来说:

  • 加速度计:把传感器静置在水平台面上,看标定后的输出是否接近[0, 0, g]
  • 陀螺仪:把传感器静置,看标定后的输出是否接近[0, 0, 0]

如果标定后的零漂比标定前小了10倍以上,说明标定效果不错。如果只小了2-3倍,那可能哪里有问题——要么数据采集质量不好,要么模型选错了。

注意:标定不是万能的。温度变化、老化效应都会让标定参数慢慢失效。我一般建议每3-6个月重新标定一次。如果传感器工作环境温度变化很大(比如从-40°C到85°C),那还需要做温度补偿标定,这个我们后面会讲到。

好了,静态标定的核心内容就这些。六位置法和速率法是最基础、最实用的方法,掌握了它们,大部分惯性传感器的标定需求都能搞定。最小二乘法虽然看起来有点数学味,但实际用起来就是个工具,别被公式吓到。


公众号:蓝海资料掘金营,微信deep3321