3. 传感器数据解读:加速度计、陀螺仪、磁力计、气压计日志的波形分析与异常识别

传感器是无人机的「眼睛」和「耳朵」。PX4 飞控依赖它们感知姿态、位置和高度。但传感器也会撒谎——噪声、漂移、饱和、数据丢失,这些都会让飞控做出错误判断。

我见过太多新手一上来就调 PID,结果炸机后发现是加速度计坏了。嗯,先读懂传感器日志,比什么都重要。

核心观点: 传感器数据质量决定飞控上限。日志分析的第一步,就是确认每个传感器是否「健康」。

3.1 加速度计:感受重力与振动

加速度计测量三轴加速度(m/s²)。静止时,它只感受到重力(约 9.81 m/s²)。

日志字段: vehicle_acceleration.xyz 或 sensor_accel.xyz。

3.1.1 正常波形长什么样?

  • 静止悬停: Z 轴 ≈ -9.81 m/s²,X/Y 轴 ≈ 0。波形平直,噪声幅度 < 0.2 m/s²。
  • 水平飞行: 三轴随姿态变化,但总矢量模值始终接近 9.81 m/s²。
  • 剧烈机动: 模值会短暂偏离,但不应超过 ±4 m/s² 的波动。

3.1.2 异常模式与诊断

异常现象 波形特征 可能原因
Z 轴偏大/偏小 静止时 Z 轴 ≠ -9.81,偏差 > 0.5 加速度计未校准,或温度漂移
高频毛刺 波形上叠加大量尖峰,频率 > 50 Hz 电机/螺旋桨振动传递到飞控
数据冻结 某轴数值长时间不变 传感器 I²C/SPI 通信中断
模值异常 总矢量模值 < 8 或 > 11 传感器损坏或受到强外力
我的经验: 有一次客户反馈飞机悬停时左右晃动。我打开日志一看,X 轴加速度计噪声达到 0.8 m/s²。后来发现是减震泡沫垫老化,换掉后波形立刻干净了。

3.2 陀螺仪:感知角速度的「平衡木」

陀螺仪测量三轴角速度(rad/s)。它决定了飞控能否稳住姿态。

日志字段: vehicle_angular_velocity.xyz 或 sensor_gyro.xyz。

3.2.1 正常波形特征

  • 静止: 三轴数值 ≈ 0,噪声 < 0.02 rad/s。
  • 匀速旋转: 对应轴输出稳定值,无锯齿或跳变。
  • 急停/急转: 波形平滑过渡,无过冲或振荡。

3.2.2 常见异常及处理

异常现象 波形特征 可能原因
零偏漂移 静止时数值缓慢偏离 0,持续增大 温度变化导致,需温飘补偿
数据跳变 某帧数值突然跳到 10 倍以上 电磁干扰或 SPI 时钟错误
饱和削顶 波形顶部被「切平」 角速度超出量程(如 IMU 型号不支持高速旋转)
注意: 陀螺仪数据跳变是炸机的高危信号。我曾经遇到一架飞机在空中突然翻转,日志显示 Y 轴陀螺仪在 0.1 秒内从 0 跳到 15 rad/s。飞控以为飞机在快速翻滚,于是反向猛打舵——结果直接倒扣。

3.3 磁力计:无人机的「指南针」

磁力计测量地磁场(μT),用于航向(偏航角)修正。但它非常脆弱,极易受干扰。

日志字段: sensor_mag.xyz。

3.3.1 正常波形特征

  • 水平旋转: X/Y 轴呈正弦/余弦变化,Z 轴基本稳定。
  • 总磁场强度: 应在当地地磁场值 ±5 μT 范围内(如北京约 55 μT)。
  • 无跳变: 波形连续,无毛刺或阶跃。

3.3.2 异常模式

异常现象 波形特征 可能原因
总强度突变 数值突然升高 10 μT 以上 附近有大电流导线或电机磁场
波形畸变 旋转时 X/Y 不是标准正弦波 未校准硬铁/软铁干扰
数据恒定 旋转时数值不变 传感器死机或 I²C 挂死
避坑指南: 我曾经在装配时把磁力计放在了电调正下方。起飞后航向一直偏 30°,日志显示总磁场强度从 55 μT 跳到了 80 μT。后来把磁力计移到机臂末端,问题解决。记住:磁力计要远离大电流和铁磁物质。

3.4 气压计:高度感知的「温度计」

气压计通过测量大气压(hPa)推算高度。但它对气流和温度极其敏感。

日志字段: sensor_baro.pressure 和 sensor_baro.altitude。

3.4.1 正常波形特征

  • 静止: 高度波动 < 0.3 m,气压波动 < 0.1 hPa。
  • 爬升/下降: 高度变化平滑,无台阶或反向跳变。
  • 温度影响: 开机前几分钟会有缓慢漂移(温飘)。

3.4.2 异常模式

异常现象 波形特征 可能原因
高度剧烈抖动 静止时高度波动 > 1 m 气压计暴露在螺旋桨气流中
高度漂移 静止时高度持续上升/下降 温度变化或气压计老化
数据冻结 气压值长时间不变 传感器通气孔堵塞
警告: 气压计数据冻结非常危险。飞控会认为高度不变,即使飞机已经掉到地面。我见过一次炸机,原因是气压计通气孔被胶水堵住了。日志显示高度一直卡在 10 米,实际飞机已经落地了。

3.5 传感器融合:谁在「说谎」?

飞控不会只信一个传感器。它会用 EKF(扩展卡尔曼滤波器)融合多个数据。但融合的前提是——你得先知道哪个传感器是可靠的。

下面这张图展示了传感器数据异常的典型诊断流程:

传感器异常诊断流程图 传感器异常诊断流程 读取传感器日志 数据是否连续? 是 噪声是否超标? 是 检查减震/屏蔽 否 数值是否在量程内? 否 传感器饱和/损坏 是 传感器正常 否 检查通信/接线 说明: 1. 数据连续性:检查是否有丢帧、冻结或跳变。 2. 噪声水平:对比静止状态下的波动幅度。 3. 量程检查:确认数值是否在传感器规格范围内。

3.6 实战:如何快速定位「问题传感器」?

拿到一份日志,我一般按这个顺序排查:

  1. 看连续性: 打开 sensor_* 数据,检查有没有断点或冻结。有的话先修通信。
  2. 看噪声: 截取一段静止数据,计算标准差。加速度计 > 0.3、陀螺仪 > 0.03 就要警惕。
  3. 看量程: 确认数值没有长时间处于最大值或最小值附近。
  4. 看一致性: 对比多个同类型传感器(如 IMU0 和 IMU1),差异过大说明某个坏了。
  5. 看融合结果: 打开 ekf2_innovations,如果某个传感器的 innovation 持续偏大,飞控已经在「抛弃」它了。
一句话总结: 传感器日志分析不是看数据漂不漂亮,而是看数据「讲不讲逻辑」。静止时该稳的稳,运动时该变的变,这才是好数据。