第3章:传感器校准与数据融合
各位同学,欢迎来到第三讲。前两章我们聊了飞控的硬件选型和坐标系,今天要啃的这块骨头,是垂直起降阶段最核心的底层技术——传感器校准与数据融合。
说实话,我见过太多新手飞手,一上来就调PID参数,结果飞机在地上疯狂抽搐。为什么?因为传感器数据都是错的。你想想看,用一把不准的尺子去量东西,后面算得再精细也是白搭。所以,这一章我们先把“尺子”校准好。
3.1 加速度计校准
加速度计测量的是比力,说白了就是重力加上运动加速度。在垂直起降阶段,飞机悬停时,加速度计主要感受重力。
校准目标:消除零偏和刻度因子误差。
我的做法:
- 把飞控水平静置,记录三轴输出。
- 理论上,水平时X、Y轴应为0g,Z轴应为1g。
- 翻转六个面(±X, ±Y, ±Z),分别采集数据。
- 用最小二乘法拟合出零偏和尺度因子。
核心公式:
a_calibrated = (a_raw - bias) * scale_factor
我在项目中遇到过一个问题:某款加速度计温度漂移特别大,冬天和夏天校准结果差很多。后来我加了个温度补偿表,才搞定。嗯,这里要注意,如果你用的是工业级传感器,最好做一下温补。
避坑指南:我曾经在震动台上校准加速度计,结果数据全是噪声。后来发现是安装螺丝没拧紧。记住,校准环境一定要稳定,别在风扇旁边搞。
3.2 陀螺仪校准
陀螺仪测量角速度。它的主要误差是零偏,也就是静止时输出不为0。
校准方法:
- 静止采集1000个样本,取平均值作为零偏。
- 对于高精度应用,还需要考虑温度影响。
我个人习惯在飞控上电后,先让飞机静置5秒,自动完成陀螺仪零偏校准。这样每次起飞前都能保证数据干净。
注意:陀螺仪对震动非常敏感。如果你发现校准后数据还在漂,先检查一下机架有没有共振。我曾经有一架四轴,电机一解锁陀螺仪数据就乱跳,最后发现是减震棉装反了。
3.3 磁力计校准
磁力计用来测航向。但它特别娇气,容易受周围铁磁物质干扰。
校准原理:
磁力计的理想输出是一个球体。但实际因为硬铁和软铁干扰,会变成一个椭球。校准就是把这个椭球拉回球体。
操作步骤:
- 拿着飞机在空中画“8”字,让磁力计采集各个方向的数据。
- 用椭球拟合算法,求出偏移和缩放矩阵。
- 把校准参数写入飞控参数。
经验之谈:我建议每次更换机架或者加装大功率设备后,都重新做一次磁力计校准。有一次我在机臂上绑了个金属支架,结果航向偏了20度,找了半天原因。
3.4 数据融合入门
单个传感器都有缺点:加速度计高频噪声大,陀螺仪低频漂移,磁力计容易受干扰。所以我们需要融合它们,取长补短。
下面这张图展示了传感器融合的基本思路:
3.5 互补滤波
互补滤波是最简单、最实用的融合方法。它的核心思想是:
- 陀螺仪负责高频姿态更新(短时准确)
- 加速度计和磁力计负责低频修正(长时稳定)
代码实现:
// 互补滤波核心代码
float complementary_filter(float gyro_rate, float acc_angle, float dt) {
float alpha = 0.98; // 权重系数
float angle = alpha * (angle + gyro_rate * dt) + (1 - alpha) * acc_angle;
return angle;
}
alpha值怎么选?我一般取0.98到0.995之间。alpha越大,越信任陀螺仪;越小,越信任加速度计。你想想看,如果飞机震动大,alpha就设大一点,不然加速度计的噪声会污染姿态。
个人经验:互补滤波虽然简单,但在垂直起降阶段完全够用。我做过对比测试,在悬停状态下,互补滤波和卡尔曼滤波的误差差距不到0.5度。所以别盲目追求复杂算法,够用就好。
3.6 卡尔曼滤波入门
卡尔曼滤波听起来高大上,其实核心就五条公式。我尽量用大白话讲清楚。
核心思想:用模型预测 + 测量修正,不断迭代。
五条公式:
- 预测状态:根据上一时刻的状态,预测当前状态
- 预测协方差:估计预测的不确定性
- 计算卡尔曼增益:决定相信预测还是测量
- 更新状态:用测量值修正预测值
- 更新协方差:减小不确定性
简化版代码:
// 一维卡尔曼滤波
float kalman_filter(float measurement, float dt) {
// 预测
float x_pred = x_est;
float p_pred = p_est + q;
// 更新
float k = p_pred / (p_pred + r);
x_est = x_pred + k * (measurement - x_pred);
p_est = (1 - k) * p_pred;
return x_est;
}
这里q是过程噪声,r是测量噪声。q越大,说明模型越不准,更相信测量;r越大,说明测量噪声大,更相信预测。
踩坑提醒:我曾经在卡尔曼滤波里把q和r设反了,结果姿态估计直接发散,飞机差点翻跟头。记住,调参时先让飞机静止,看估计值是否稳定,再慢慢加大运动。
3.7 两种滤波对比
| 特性 | 互补滤波 | 卡尔曼滤波 |
|---|---|---|
| 计算量 | 极低 | 中等 |
| 实现难度 | 简单 | 中等 |
| 精度 | 够用 | 更高 |
| 适用场景 | 垂直起降、悬停 | 高速机动、高精度 |
| 调参难度 | 1个参数 | 2个以上参数 |
我个人建议:初学者先用互补滤波,把姿态控制搞明白。等遇到性能瓶颈了,再上卡尔曼滤波。别一上来就搞复杂算法,容易把自己绕晕。
本章小结:
- 加速度计校准:六面法,消除零偏和尺度误差
- 陀螺仪校准:静止取平均,消除零偏
- 磁力计校准:画8字,椭球拟合
- 互补滤波:简单可靠,适合垂直起降
- 卡尔曼滤波:精度更高,但调参复杂
好了,这一章的内容就到这里。传感器校准是飞控的基石,数据融合是姿态估计的灵魂。把这些搞扎实了,后面调PID才能事半功倍。