3、加速度计校准理论:六位置静态校准法原理、最小二乘估计理论、加速度计误差模型(零偏+标度+交轴)、可观测性分析
好,咱们进入加速度计校准的核心环节。
说实话,IMU 校准这块,加速度计比陀螺仪要「友好」得多。为什么?因为加速度计有重力这个天然参考。你想想看,重力方向是确定的,大小也是确定的(9.8 m/s² 左右)。这就给了我们一个绝佳的校准基准。
我个人习惯,做加速度计校准时,第一件事就是先把误差模型搞清楚。模型不对,后面算得再漂亮也是白搭。
3.1 加速度计误差模型:零偏、标度、交轴
先看一个理想情况。理想加速度计,三个轴完全正交,输出就是真实的比力。但现实嘛……总得有点瑕疵。
我遇到过一款 MEMS 加速度计,出厂标称零偏 50 mg,结果一上电测出来 120 mg。嗯,这就是典型的零偏误差。
加速度计的误差模型,通常写成这样:
a_meas = S * (a_true + b + N * a_true + v)
展开来说,主要有三个部分:
- 零偏(Bias):即使没有加速度,输出也不为零。单位是 mg 或 m/s²。说白了就是「躺着也中枪」。
- 标度因数(Scale Factor):实际输出与理论值的比例偏差。比如你输入 1g,它输出 0.98g,那标度误差就是 2%。
- 交轴耦合(Cross-axis):X 轴感受到 Y 轴的加速度。这通常是因为传感器安装不正交或者芯片内部结构导致的。
把这三个合在一起,写成矩阵形式更直观:
| a_x_meas | | S_xx S_xy S_xz | | a_x_true | | b_x |
| a_y_meas | = | S_yx S_yy S_yz | * | a_y_true | + | b_y |
| a_z_meas | | S_zx S_zy S_zz | | a_z_true | | b_z |
这里 S 矩阵的对角线是标度因数,非对角线是交轴耦合系数。b 向量是零偏。
关键点:这个模型一共 12 个未知参数(3 个零偏 + 9 个标度/交轴系数)。但实际中,我们通常只估计 9 个或 6 个,因为有些交轴项可观测性很差。
3.2 六位置静态校准法原理
六位置法,名字听着挺唬人,其实原理很简单——利用重力在不同方向上的投影。
你想想看,把加速度计分别朝上、朝下、朝左、朝右、朝前、朝后,六个方向各放一次。每次测量,理论上重力在某个轴上的投影应该是 ±1g,其他轴为 0。
举个例子:
| 位置 | 理论 X (g) | 理论 Y (g) | 理论 Z (g) |
|---|---|---|---|
| Z 轴朝上 | 0 | 0 | +1 |
| Z 轴朝下 | 0 | 0 | -1 |
| X 轴朝上 | +1 | 0 | 0 |
| X 轴朝下 | -1 | 0 | 0 |
| Y 轴朝上 | 0 | +1 | 0 |
| Y 轴朝下 | 0 | -1 | 0 |
每个位置采集几十秒数据,取平均。这样我们就有了 6 组测量值,每组对应一个已知的理论值。
实战技巧:我建议每个位置至少采集 30 秒数据,然后取中位数而不是均值。为什么?因为均值对粗差敏感,中位数更鲁棒。有一次我在现场校准,有个位置数据老是跳,后来发现是转台振动引起的。换成中位数后,结果就稳定了。
3.3 最小二乘估计理论
有了 6 组数据,怎么算出那 12 个参数?
答案是:最小二乘法。
说白了,就是找一组参数,让模型预测值和实际测量值之间的误差平方和最小。
我们把问题写成线性形式:
z = H * x + v
其中:
- z 是测量向量(6 个位置 × 3 个轴 = 18 个测量值)
- H 是设计矩阵(由理论重力投影构成)
- x 是待估参数(零偏 + 标度 + 交轴)
- v 是测量噪声
最小二乘解就是:
x_hat = (H^T * H)^{-1} * H^T * z
嗯,就是这个公式。看起来简单,但实际用起来有几个坑:
- H 矩阵必须列满秩。如果某些参数不可观测,H^T * H 就不可逆。
- 数据要预处理。去掉明显的粗差,比如传感器突然掉电产生的异常值。
- 残差分析。算完之后看看残差,如果某个位置的残差特别大,说明那个位置的数据可能有问题。
注意:千万不要直接用原始数据做最小二乘!我曾经犯过这个错——数据里有个明显的跳变点,结果算出来的标度因数偏了 5%。后来花了整整一天排查,才发现是数据采集时有人碰了转台。
3.4 可观测性分析
可观测性,这个词听起来很学术。其实意思很简单:你的数据能不能把参数估计出来?
举个例子。如果你只做 Z 轴朝上和朝下两个位置,那 X 和 Y 的零偏就完全不可观测。因为你没有给 X 和 Y 轴任何激励。
六位置法之所以经典,就是因为它能保证所有 12 个参数都是可观测的。但要注意:
- 零偏:每个轴的正反两个位置,刚好能解出零偏。
- 标度因数:正反两个位置的差值,能解出标度。
- 交轴耦合:需要不同轴的组合数据才能解出来。
我个人的经验是:可观测性分析一定要在采集数据之前做。别等到数据都采完了,才发现某个参数根本算不出来。那时候就尴尬了。
嗯,这里再补充一点。实际工程中,六位置法往往不够用。为什么?因为 MEMS 加速度计的非线性误差、温度漂移等,六位置法覆盖不了。这时候就需要更复杂的多位置法或者温度补偿了。
不过,六位置法作为入门和基础校准,绝对够用。先把这 12 个参数搞定,后面再谈高阶补偿。
总结一下:
- 误差模型:零偏 + 标度 + 交轴,共 12 个参数
- 六位置法:利用重力在六个方向的投影,提供 18 个方程
- 最小二乘:解超定方程,得到最优参数估计
- 可观测性:确保每个参数都能被数据激励到
下一章,咱们会讲具体的操作流程和代码实现。到时候我会分享一个我常用的 Python 脚本,直接跑一遍就能出结果。