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(扩展卡尔曼滤波器)融合多个数据。但融合的前提是——你得先知道哪个传感器是可靠的。
下面这张图展示了传感器数据异常的典型诊断流程:
3.6 实战:如何快速定位「问题传感器」?
拿到一份日志,我一般按这个顺序排查:
- 看连续性: 打开
sensor_*数据,检查有没有断点或冻结。有的话先修通信。 - 看噪声: 截取一段静止数据,计算标准差。加速度计 > 0.3、陀螺仪 > 0.03 就要警惕。
- 看量程: 确认数值没有长时间处于最大值或最小值附近。
- 看一致性: 对比多个同类型传感器(如 IMU0 和 IMU1),差异过大说明某个坏了。
- 看融合结果: 打开
ekf2_innovations,如果某个传感器的 innovation 持续偏大,飞控已经在「抛弃」它了。
一句话总结: 传感器日志分析不是看数据漂不漂亮,而是看数据「讲不讲逻辑」。静止时该稳的稳,运动时该变的变,这才是好数据。