4、加速度计标定方法:六位置法标定原理与实操步骤
加速度计标定,说白了就是让传感器告诉你「它到底朝哪边」。你想想看,一个IMU芯片焊在板子上,不可能绝对水平,也不可能绝对垂直。那怎么知道它的真实姿态?靠的就是标定。
我个人习惯,拿到一个新IMU模块,第一件事就是做六位置法标定。为什么?因为简单、可靠、不需要转台。我在项目中遇到过好几次,用六位置法标定完,融合出来的姿态角直接收敛到0.1度以内,效果立竿见影。
4.1 六位置法的核心思想
六位置法的原理其实很朴素:
- 地球重力是个已知量,g ≈ 9.8 m/s²
- 把加速度计分别朝向六个标准方向(±X、±Y、±Z)
- 记录每个方向的输出值
- 用这些数据反推出零偏和比例因子
嗯,这里要注意:我们假设加速度计是线性的。实际上大多数MEMS加速度计在±2g范围内线性度很好,这个假设成立。
核心公式:
加速度计输出 = 比例因子 × 真实加速度 + 零偏
写成矩阵形式:
Ax_out = Sx * Ax_real + Bx
Ay_out = Sy * Ay_real + By
Az_out = Sz * Az_real + Bz
六位置法就是解这个方程组。六个方程,六个未知数(三个比例因子、三个零偏),刚好可解。
4.2 六个标准位置怎么摆?
我建议你准备一个水平台面,或者干脆用一块亚克力板。六个位置分别是:
| 位置编号 | 加速度计朝向 | 理论加速度 (g) | 说明 |
|---|---|---|---|
| 1 | Z轴向上 | (0, 0, +1) | 平放,正面朝上 |
| 2 | Z轴向下 | (0, 0, -1) | 翻转180°,正面朝下 |
| 3 | X轴向上 | (+1, 0, 0) | 侧立,X轴指天 |
| 4 | X轴向下 | (-1, 0, 0) | 侧立,X轴指地 |
| 5 | Y轴向上 | (0, +1, 0) | 侧立,Y轴指天 |
| 6 | Y轴向下 | (0, -1, 0) | 侧立,Y轴指地 |
实操小技巧:
每个位置保持静止3-5秒,采集100个数据点取平均。别用手拿着,手会抖。用双面胶粘在台面上,稳得很。
4.3 标定流程,一步步来
我曾经在产线上帮客户做过批量标定,总结出一套标准流程:
- 准备阶段:把IMU模块固定好,串口连上电脑,打开串口助手或你的标定软件
- 位置1(Z轴向上):平放模块,记录100组数据,取平均
- 位置2(Z轴向下):翻转模块,同样记录100组数据
- 位置3(X轴向上):侧立模块,X轴指向天花板
- 位置4(X轴向下):翻转180°,X轴指向地面
- 位置5(Y轴向上):换一个方向侧立,Y轴指天
- 位置6(Y轴向下):翻转,Y轴指地
- 数据处理:用最小二乘法或直接解方程,算出标定参数
注意! 每个位置切换时,等模块完全静止再开始采集。我见过有人手速太快,数据还没稳定就采集了,结果标定出来偏差很大。
4.4 数据处理与参数计算
好了,现在你手里有六组数据。怎么算?我直接给代码:
// 伪代码:六位置法标定计算
// 输入:六个位置的测量平均值
// 输出:比例因子 Sx, Sy, Sz 和零偏 Bx, By, Bz
// 位置1: Z轴向上 -> (Ax1, Ay1, Az1)
// 位置2: Z轴向下 -> (Ax2, Ay2, Az2)
// 位置3: X轴向上 -> (Ax3, Ay3, Az3)
// 位置4: X轴向下 -> (Ax4, Ay4, Az4)
// 位置5: Y轴向上 -> (Ax5, Ay5, Az5)
// 位置6: Y轴向下 -> (Ax6, Ay6, Az6)
// 计算零偏(取正反方向平均值)
Bx = (Ax3 + Ax4) / 2;
By = (Ay5 + Ay6) / 2;
Bz = (Az1 + Az2) / 2;
// 计算比例因子(取正反方向差值的一半)
Sx = (Ax3 - Ax4) / 2; // 因为理论差值是2g
Sy = (Ay5 - Ay6) / 2;
Sz = (Az1 - Az2) / 2;
// 标定后的加速度值
Ax_calibrated = (Ax_raw - Bx) / Sx;
Ay_calibrated = (Ay_raw - By) / Sy;
Az_calibrated = (Az_raw - Bz) / Sz;
说白了,这个算法就是利用了「正反方向抵消」的思想。你想想看,如果零偏是正的,那么正向测量值偏大,反向测量值偏小,取平均就把零偏提出来了。
4.5 验证标定效果
标定完怎么知道对不对?我有个习惯:
- 把模块平放,看标定后的Z轴输出是不是接近9.8 m/s²
- X轴和Y轴输出是不是接近0
- 计算模长 √(Ax² + Ay² + Az²),应该等于9.8左右
如果模长偏差超过0.1 m/s²,说明标定有问题。我曾经遇到过一种情况:模块温度变化导致零偏漂移,标定完过半小时又不准了。后来我加了温度补偿,才彻底解决。
验收标准(我个人用的):
- 静态模长误差 < 0.05 m/s²
- 各轴零偏稳定性 < 0.01 g
- 比例因子误差 < 0.5%
4.6 六位置法的局限性
说实话,六位置法不是万能的。它假设三个轴完全正交,但实际芯片的X、Y、Z轴之间可能有几度的安装误差。如果你需要更高精度,得用九位置法或者椭球拟合。
不过对于大多数机器人应用,六位置法已经够用了。我做过一个四足机器人项目,就用六位置法标定,姿态融合跑起来稳得很。
避坑指南:
我曾经在产线上发现一批IMU标定后数据异常,排查了半天,结果是台面不平。后来我每次标定前先用水平仪检查台面,再也没出过问题。
4.7 本章知识体系
下面这张图总结了六位置法的核心逻辑,你可以照着这个思路走一遍:
嗯,以上就是六位置法的全部内容。说白了就是六个姿势、一组公式、一次验证。你照着做一遍,十分钟就能搞定。我在项目里用了无数次,从来没掉过链子。