4. 传感器与数据融合:飞控的“感官”与“大脑”

无人机能稳定飞行,靠的是传感器感知自身状态,再通过数据融合“拼”出一个完整的姿态。说白了,飞控就是个“盲人摸象”的过程——每个传感器都有缺陷,但合在一起就能还原真相。

我个人习惯把传感器比作人的感官:加速度计是内耳前庭,陀螺仪是半规管,磁力计是方向感,GPS是眼睛,气压计是触觉。缺了哪一个,飞控都会“晕头转向”。

核心观点:没有完美的传感器,只有好的融合算法。单个传感器的误差是必然的,但通过互补滤波或卡尔曼滤波,我们可以让系统整体精度远超任何单一传感器。

无人机传感器数据融合架构 无人机传感器数据融合架构 加速度计 陀螺仪 磁力计 GPS 气压计 预处理:校准 / 零偏补偿 / 滤波 / 坐标变换 数据融合核心 互补滤波 / 卡尔曼滤波 / 扩展卡尔曼滤波 输出:姿态角 / 位置 / 高度 / 航向 每个传感器都有弱点,但融合后能互相弥补。例如:加速度计不能长期依赖(噪声大),陀螺仪会漂移,磁力计怕干扰,GPS更新慢,气压计受温度影响。

4.1 加速度计原理与校准

加速度计测量的是比力——说白了就是物体受到的加速度,包括重力。三轴加速度计输出三个轴的加速度值,单位是 g 或 m/s²。

你想想看,无人机悬停时,加速度计读到的应该是 (0, 0, -1)g。但实际读出来往往不是这样。为什么?因为存在零偏误差和刻度因子误差。

校准方法:六面法

我建议用六面法做加速度计校准。把传感器分别朝上、朝下、朝左、朝右、朝前、朝后六个方向静置,记录每个方向的读数。然后拟合出零偏和刻度因子。

我的经验:校准时要确保传感器完全静止。我曾经在桌面上校准,结果桌子本身有微小振动,导致校准参数偏了0.5%。后来我改用大理石平台,效果好了很多。

// 加速度计六面法校准伪代码
// 采集六个面的数据:+X, -X, +Y, -Y, +Z, -Z
// 每个面采集 N 个样本取平均
float acc_bias[3];
float acc_scale[3];

for (axis = 0; axis < 3; axis++) {
    // 正方向读数应接近 +1g,负方向应接近 -1g
    acc_bias[axis] = (pos_avg[axis] + neg_avg[axis]) / 2.0f;
    acc_scale[axis] = (pos_avg[axis] - neg_avg[axis]) / 2.0f; // 理想值为 1g
}

// 校准公式:acc_calibrated = (acc_raw - bias) / scale

4.2 陀螺仪原理与零偏补偿

陀螺仪测量角速度,单位是 °/s 或 rad/s。MEMS 陀螺仪基于科里奥利效应——一个振动的质量块在旋转时会受到侧向力,通过检测这个力就能算出角速度。

陀螺仪最大的问题是零偏漂移。刚上电时零偏是一个值,运行几分钟后可能变了。温度变化、振动都会影响零偏。

零偏补偿策略:

  • 静态零偏采集:上电后静止 2-3 秒,取平均值作为初始零偏
  • 温度补偿:建立零偏-温度曲线,实时查表修正
  • 在线估计:融合算法中把零偏作为状态变量,实时估计

避坑指南:我曾经遇到过陀螺仪零偏在飞行中突然跳变的情况。排查后发现是电源纹波过大导致的。后来我在陀螺仪供电引脚上加了一个 10μF 电容,问题就解决了。记住:传感器对电源质量非常敏感。

4.3 磁力计与地磁校准

磁力计测量地球磁场,用于确定航向(偏航角)。但磁力计非常脆弱——电机电流、铁磁材料、高压线都会干扰它。

硬铁干扰 vs 软铁干扰:

干扰类型 来源 表现 校准方法
硬铁干扰 永磁体、电机磁钢 磁场中心偏移 椭圆拟合,求偏移量
软铁干扰 铁磁材料(螺丝、机架) 磁场形状畸变 椭球拟合,求变换矩阵

地磁校准步骤:

  1. 将无人机在空中缓慢旋转,覆盖所有姿态
  2. 采集三轴磁力计数据,绘制散点图
  3. 理想情况下,数据点应分布在一个球面上
  4. 实际数据会形成一个椭球,用最小二乘法拟合椭球参数
  5. 用拟合参数将椭球校正为球体

关键点:磁力计校准必须在无磁干扰的环境中进行。我习惯在空旷的草地上校准,远离建筑物和金属物体。校准完成后,检查偏航角是否准确——用指南针对比,误差应在 ±2° 以内。

4.4 GPS 定位原理(RTK/差分GPS)

普通 GPS 精度在 2-5 米,对于无人机来说勉强够用。但如果你需要厘米级定位——比如精准降落、测绘——就必须上 RTK 或差分 GPS。

原理简述:

  • 标准 GPS:卫星发射信号,接收机测量传播时间,计算距离。误差来自电离层、对流层、卫星钟差、多路径效应。
  • 差分 GPS(DGPS):地面基准站已知精确位置,计算误差修正值,发送给移动站。精度可到亚米级。
  • RTK(实时动态差分):基准站将载波相位观测值发给移动站,移动站利用载波相位差分,精度可达 2-5 厘米。
定位方式 精度 更新率 适用场景
标准 GPS 2-5 m 5-10 Hz 普通航线飞行
差分 GPS 0.5-1 m 5-10 Hz 农业植保、巡检
RTK 2-5 cm 10-20 Hz 精准降落、测绘、编队

我的建议:RTK 虽然精度高,但依赖基准站和数传链路。如果数传断连,RTK 会降级为普通 GPS。设计飞控时一定要做好降级处理——我见过因为 RTK 丢星导致无人机飞丢的案例。

4.5 气压计高度测量

气压计通过测量大气压力推算高度。标准大气压下,每升高 1 米,气压下降约 12 Pa。但实际环境复杂——温度变化、风、螺旋桨下洗气流都会影响气压计读数。

气压计使用要点:

  • 安装位置:放在飞控板中央,远离电机和电调。最好用海绵或泡沫包裹,减少风的影响
  • 温度补偿:气压计内部通常有温度传感器,用于补偿温度漂移
  • 滤波:气压计噪声较大,需要低通滤波。我习惯用截止频率 2-5 Hz 的 IIR 滤波器
  • 融合:单独使用气压计高度会抖动,必须与加速度计、GPS 高度融合

避坑指南:我曾经在冬天飞行时发现气压计高度一直在缓慢下降,以为是传感器坏了。后来发现是气压计窗口被冰堵住了。嗯,这个教训让我学会了在寒冷天气飞行前检查气压计通气孔。

4.6 数据融合:把碎片拼成完整画面

单个传感器都有硬伤。加速度计短期精度高但长期会漂移?不对——加速度计长期精度差(噪声累积),短期精度好。陀螺仪短期精度好但长期会漂移。磁力计容易受干扰。GPS 更新慢。气压计受风影响。

互补滤波:最简单的融合方法。加速度计和磁力计提供长期参考,陀螺仪提供短期动态响应。用高通滤波器处理陀螺仪信号,低通滤波器处理加速度计信号,加起来就是融合结果。

卡尔曼滤波:更高级的方法。把系统状态(姿态、位置、速度)和传感器观测值建模,用预测-更新迭代估计最优状态。

// 互补滤波姿态融合(简化版)
// 输入:陀螺仪角速度 gx, gy, gz
//       加速度计计算的姿态角 acc_roll, acc_pitch
//       磁力计计算的航向 mag_yaw
// 输出:融合后的姿态角 roll, pitch, yaw

float Kp = 0.5f;  // 比例增益,控制加速度计修正速度

// 误差 = 加速度计估计 - 陀螺仪积分估计
float error_roll = acc_roll - roll;
float error_pitch = acc_pitch - pitch;

// 用误差修正陀螺仪积分
roll += (gx + Kp * error_roll) * dt;
pitch += (gy + Kp * error_pitch) * dt;
yaw += gz * dt;  // 偏航角依赖磁力计修正

核心思想:数据融合不是简单的平均,而是信任不同的传感器在不同频率下的表现。陀螺仪信任高频,加速度计信任低频,GPS 信任长期位置,气压计信任高度变化趋势。理解了这个,你就能设计出稳定的飞控。

我个人习惯在飞控调试阶段把每个传感器的原始数据和融合后的数据都打印出来,画成曲线对比。这样能直观地看到融合效果——比如加速度计的高频噪声被滤掉了,陀螺仪的漂移被拉回来了。嗯,调试数据融合就像调音师调音,需要耐心和耳朵(眼睛)。