4、关键传感器日志分析:加速度计、陀螺仪、磁力计、气压计的数据解读与异常识别
传感器是飞控的「眼睛」。眼睛花了,飞控再聪明也白搭。
我见过太多炸机案例,最后查出来都是传感器数据早就出了问题,只是没人去看日志。今天我们就把这四个关键传感器——加速度计、陀螺仪、磁力计、气压计——的日志数据掰开揉碎了讲清楚。
4.1 加速度计:振动和偏置的「照妖镜」
加速度计测量的是比力,说白了就是重力加运动加速度。在悬停或平飞时,三轴读数应该稳定在某个值附近。
怎么看日志?
在 PX4 日志里,加速度计数据通常在 sensor_accel 或 vehicle_acceleration 主题下。我习惯先看三个轴的原始值曲线。
| 参数 | 正常范围(悬停) | 异常特征 |
|---|---|---|
| X 轴 | 0 ± 0.5 m/s² | 高频抖动 > 2 m/s² |
| Y 轴 | 0 ± 0.5 m/s² | 持续偏置 > 1 m/s² |
| Z 轴 | -9.8 ± 0.5 m/s² | 偏离 -9.8 超过 1 m/s² |
振动异常怎么识别?
打开日志,找到加速度计的频谱分析图。如果某个频率的幅值突然飙升,比如 100Hz 以上出现尖峰,那就是振动问题。
我曾经遇到一架四轴,悬停时 Z 轴振动幅值达到 6 m/s²。查了半天,发现是电机座松了一颗螺丝。拧紧后,振动直接降到 0.5 m/s² 以下。
4.2 陀螺仪:零偏漂移的「温度计」
陀螺仪测量角速度。静止时,三轴读数应该接近 0。但实际中,陀螺仪会有零偏——就是静止时也输出非零值。
零偏漂移怎么看?
在日志里找 sensor_gyro 主题。重点关注起飞前 10 秒的静止数据。
# 用 pyulog 提取陀螺仪静止数据示例
import pyulog
log = pyulog.Pyulog('flight.ulg')
gyro_data = log.get_dataset('sensor_gyro')
# 取前 10 秒数据计算均值
static_data = gyro_data[gyro_data['timestamp'] < 10_000_000]
print('X 轴零偏:', static_data['x'].mean())
print('Y 轴零偏:', static_data['y'].mean())
print('Z 轴零偏:', static_data['z'].mean())
正常零偏应该在 ±0.5 °/s 以内。如果超过 1 °/s,说明陀螺仪可能老化了,或者温度补偿出了问题。
温度影响有多大?
我记得有一次做高海拔测试,飞机从地面 20°C 飞到 5000 米高空,温度降到 -10°C。陀螺仪零偏从 0.2 °/s 漂到了 1.8 °/s。这就是典型的温度漂移。
| 温度变化 | 零偏变化(典型) | 影响程度 |
|---|---|---|
| ±10°C | ±0.3 °/s | 轻微 |
| ±30°C | ±1.0 °/s | 中等 |
| ±50°C | ±2.5 °/s | 严重 |
4.3 磁力计:最容易被干扰的「指南针」
磁力计测量磁场强度。它的问题最多,因为太容易被干扰了。
正常数据长什么样?
在日志里找 sensor_mag。水平旋转时,X 和 Y 轴应该呈现正弦波,幅值在 0.3-0.6 Gauss 之间(取决于地理位置)。Z 轴在水平时接近 0。
干扰怎么识别?
- 硬铁干扰:某个轴出现固定偏置。比如 X 轴始终偏大 0.2 Gauss。这通常是机架上的铁磁材料造成的。
- 软铁干扰:某个轴的幅值明显小于其他轴。比如 Y 轴幅值只有 X 轴的一半。这可能是电路板上的磁性元件导致的。
- 动态干扰:电机启动后磁力计数据突然跳变。这是大电流产生的磁场。
我踩过的坑:
有一次做物流无人机,磁力计在起飞前校准得好好的,一上天就偏。查了两天日志,发现是电池连接线从磁力计旁边经过,大电流时产生的磁场干扰了读数。把线缆挪开 5 厘米,问题解决。
4.4 气压计:高度跳变的「元凶」
气压计通过测量大气压来推算高度。它的问题通常表现为高度跳变。
怎么看气压计数据?
在日志里找 sensor_baro 或 vehicle_air_pressure。重点关注两个指标:
- 气压值变化率:正常飞行中,气压变化应该平滑。如果出现瞬间跳变超过 10 Pa(约 0.8 米高度变化),就有问题。
- 噪声水平:静止时气压值的标准差应该在 1 Pa 以内。超过 3 Pa 说明气压计受到了气流干扰。
| 异常现象 | 可能原因 | 日志特征 |
|---|---|---|
| 高度突然下降 2 米又恢复 | 气压计进风口被遮挡 | 气压值瞬间升高又回落 |
| 高度持续漂移 | 温度变化导致 | 气压值缓慢变化,与温度曲线相关 |
| 高度噪声大 | 螺旋桨下洗气流影响 | 气压值高频抖动 |
怎么优化?
我个人习惯在气压计外面加一个海绵罩,既能防气流冲击,又能减缓温度突变的影响。另外,在 PX4 参数里把 EKF2_BARO_GATE 设得宽松一点(比如 5.0),可以避免 EKF 被气压计异常值带偏。
4.5 综合判断:多传感器交叉验证
单个传感器出问题不可怕,可怕的是你只看一个传感器。我每次做日志分析,都会把四个传感器的数据放在一起看。
交叉验证的方法:
- 加速度计 Z 轴和气压计高度应该趋势一致。如果加速度计显示下降,气压计却显示上升,肯定有一个有问题。
- 陀螺仪和磁力计的航向应该吻合。如果磁力计航向突然偏了 30 度,但陀螺仪积分出来的航向没变,那就是磁力计被干扰了。
- 气压计高度和 GPS 高度可以互相印证。如果气压计高度跳变但 GPS 高度平滑,优先相信 GPS。
estimator_status 主题,看 EKF 的 innovation 值。哪个传感器的 innovation 突然变大,就是哪个传感器出了问题。这比肉眼盯着原始数据快多了。