第四节:传感器基础(下)——磁力计、气压计与数据融合的必要性

好,咱们接着聊传感器。上一节我把加速度计和陀螺仪讲透了,这一节咱们把剩下的几个关键传感器搞定:磁力计、气压计。说实话,这两个传感器在飞控里经常被轻视,但真正做高精度姿态解算时,它们的作用不可替代。

4.1 磁力计工作原理与地磁模型

磁力计,说白了就是电子指南针。它测量的是地球磁场的方向和强度。但这里有个坑——地磁场本身很弱,而且极易受干扰。

4.1.1 工作原理

目前主流的是霍尔效应磁力计和磁阻磁力计。我习惯用磁阻式的,比如HMC5883L或IST8310。它们内部有四个磁阻桥臂,外加磁场变化时,电阻值会变,通过差分电压就能算出磁场大小。

输出是三维的:Bx、By、Bz,单位通常是高斯(Gauss)或微特斯拉(μT)。1 Gauss = 100 μT,地磁场强度大约在0.25-0.65 Gauss之间。

关键点:磁力计输出的是载体坐标系下的磁场矢量。要得到航向角,需要把它转换到水平坐标系下。

4.1.2 地磁模型

地球磁场不是均匀的。它从地理南极附近出发,进入地理北极附近。磁北极和地理北极之间有大约11.5度的偏差,这叫磁偏角。不同地区磁偏角不同,需要查表修正。

我做过一个项目,在深圳飞得好好的,拿到北京就偏了十几度。查了半天才发现是磁偏角没更新。嗯,这个教训挺深刻的。

地磁场还有倾角——在北半球,磁场方向是斜向下指向地面的。这个倾角在姿态解算中其实很有用,可以用来辅助俯仰和横滚的估计。

实用技巧:地磁场强度随高度变化很小,但随纬度变化明显。如果你做的是高空飞行器(比如平流层气球),需要实时更新地磁模型参数。

4.2 磁力计校准——硬铁与软铁

磁力计最让人头疼的就是校准。不校准的话,数据根本没法用。我见过太多新手拿着原始数据直接算航向,结果飞机原地打转。

4.2.1 硬铁干扰

硬铁干扰来自永磁体或带磁性的金属。比如电机磁铁、扬声器、甚至螺丝刀。它的特点是:偏移量恒定

在三维空间中,硬铁干扰表现为一个固定的偏移向量。校准方法很简单:让传感器在空间中旋转,采集足够多的点,然后找球心。

理想情况下,磁力计数据应该落在一个球面上。硬铁干扰让球心偏移了。校准就是把这个偏移找出来减掉。

// 硬铁校准示例(简化版)
// 采集N个点,求球心
float cx = 0, cy = 0, cz = 0;
for (int i = 0; i < N; i++) {
    cx += mag_x[i];
    cy += mag_y[i];
    cz += mag_z[i];
}
cx /= N; cy /= N; cz /= N;

// 校准后的值
mag_x_cal = mag_x_raw - cx;
mag_y_cal = mag_y_raw - cy;
mag_z_cal = mag_z_raw - cz;

注意:采集数据时一定要让传感器在三维空间充分旋转,覆盖所有方向。只在一个平面转,校准效果会很差。

4.2.2 软铁干扰

软铁干扰来自可磁化的材料,比如铁壳、钢架。它的特点是:改变磁场方向,导致球体变成椭球体。

软铁校准比硬铁复杂。需要做椭球拟合,求出3x3的变换矩阵。我一般用最小二乘法做椭球拟合,代码量不大但效果很好。

我曾经在一个金属外壳的无人机上做测试,磁力计数据直接变形了。硬铁校准后还是不对,最后做了软铁校准才搞定。那段时间我天天对着椭球拟合公式发呆……

完整校准流程:

  1. 采集三维空间中的磁力计数据(至少几百个点)
  2. 做硬铁校准:求球心偏移
  3. 做软铁校准:求椭球变换矩阵
  4. 验证:校准后的数据应落在单位球面上

4.3 气压计原理与高度估计

气压计用来测高度。原理很简单:气压随高度增加而降低。但实际用起来,问题不少。

4.3.1 工作原理

常用的是MEMS气压计,比如BMP280、MS5611。内部有一个薄膜,气压变化时薄膜形变,电容值改变,通过ADC读出。

输出是气压值,单位Pa或hPa。标准海平面气压是1013.25 hPa。

高度计算公式(简化版):

// 气压转高度(国际标准大气模型)
float pressureToAltitude(float pressure, float seaLevelPressure) {
    return 44330.0f * (1.0f - pow(pressure / seaLevelPressure, 1.0f / 5.255f));
}

这个公式假设大气是理想气体,温度递减率固定。实际中会有偏差,但够用。

4.3.2 实际应用中的坑

气压计最怕的是:温度

  • 风的影响:无人机飞行时,螺旋桨气流会直接冲击气压计,导致读数剧烈波动。我习惯把气压计放在飞控板中央,用海绵或泡沫包裹,减少气流影响。
  • 温度影响:气压计自身发热会导致读数漂移。开机前几分钟和稳定后的读数可能差好几米。我一般会做温度补偿,或者等传感器稳定后再用。

避坑指南:我曾经在室内飞无人机,气压计高度跳了2米,以为是传感器坏了。后来发现是空调开关导致的局部气压变化。所以室内用气压计要格外小心。

4.3.3 高度估计的改进

单纯用气压计算高度,噪声大、漂移明显。我一般会结合加速度计做互补滤波或卡尔曼滤波。

基本思路:气压计提供长期稳定的高度参考,加速度计积分提供短期快速响应。两者融合,效果远好于单独使用任何一个。

4.4 传感器数据融合的必要性

讲到这里,你可能已经感觉到了:每个传感器都有毛病。

  • 加速度计:高频噪声大,受振动影响
  • 陀螺仪:有零偏漂移,积分会发散
  • 磁力计:易受干扰,需要校准
  • 气压计:受风和温度影响,响应慢

单独用任何一个,都做不出可靠的姿态估计。所以必须做数据融合。

数据融合的核心思想:利用不同传感器的优势,弥补各自的短板。

举个例子:陀螺仪短期精度高但长期漂移,加速度计和磁力计长期稳定但短期噪声大。把它们融合起来,就能得到既稳定又灵敏的姿态估计。

常用的融合方法有:

  1. 互补滤波:简单高效,适合资源受限的MCU
  2. 卡尔曼滤波:理论最优,但计算量大
  3. Mahony/Madgwick滤波:专门针对姿态解算的优化算法

我个人习惯在入门阶段先用互补滤波,理解透了再上卡尔曼。直接上卡尔曼容易迷失在矩阵运算里,反而忽略了物理本质。

你想想看,如果陀螺仪告诉你飞机转了10度,加速度计告诉你现在重力方向偏了8度,你信谁?数据融合就是回答这个问题。

重要提醒:数据融合不是万能的。如果传感器原始数据质量太差(比如磁力计没校准、加速度计饱和),再好的融合算法也救不了。所以,先把传感器校准好,再做融合。

本章知识体系

下面这张图总结了本章的核心内容,帮你理清思路:

传感器基础(下)知识体系 磁力计 工作原理 地磁模型 磁偏角/倾角 硬铁校准 软铁校准 椭球拟合 气压计 MEMS原理 气压→高度公式 风的影响 温度漂移 互补滤波 卡尔曼滤波 加速度计 重力方向 俯仰/横滚 高频噪声 振动干扰 陀螺仪 角速度 姿态积分 零偏漂移 积分发散 传感器数据融合 互补滤波 | 卡尔曼滤波 | Mahony/Madgwick 取长补短 → 稳定、准确的姿态估计 最终姿态输出

这张图把四个传感器的特点、问题以及融合的必要性串起来了。你可以看到,每个传感器都有短板,但通过数据融合,它们能互相弥补。

好了,这一节的内容就到这儿。磁力计和气压计的原理、校准方法,以及为什么必须做数据融合,我都讲清楚了。下一节咱们开始动手写代码,把理论变成实际可用的姿态解算算法。


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