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

传感器是飞控的「眼睛」。眼睛花了,飞控再聪明也白搭。

我见过太多炸机案例,最后查出来都是传感器数据早就出了问题,只是没人去看日志。今天我们就把这四个关键传感器——加速度计、陀螺仪、磁力计、气压计——的日志数据掰开揉碎了讲清楚。

核心观点:传感器异常不是突然发生的,它一定会在日志里留下痕迹。学会看这些痕迹,你就能在炸机前发现问题。
传感器日志分析知识体系 四类传感器日志分析 加速度计 陀螺仪 磁力计 气压计 振动噪声分析 零偏漂移检测 磁场干扰识别 高度跳变检测 数据有效性检查 日志分析核心流程 1. 查看原始数据曲线 → 2. 对比理论值范围 3. 识别异常模式 → 4. 定位根因 → 5. 制定优化方案 每个传感器都有特定的「健康指标」,超出范围就要警惕

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²
我的习惯:先看 Z 轴。如果悬停时 Z 轴读数不是 -9.8 附近,说明加速度计标定有问题或者受到了严重振动干扰。

振动异常怎么识别?

打开日志,找到加速度计的频谱分析图。如果某个频率的幅值突然飙升,比如 100Hz 以上出现尖峰,那就是振动问题。

我曾经遇到一架四轴,悬停时 Z 轴振动幅值达到 6 m/s²。查了半天,发现是电机座松了一颗螺丝。拧紧后,振动直接降到 0.5 m/s² 以下。

注意:加速度计振动过大不仅影响姿态估计,还会导致 EKF 协方差膨胀,最终触发位置估计失效。这是很多「莫名其妙」炸机的真正原因。

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 轴的一半。这可能是电路板上的磁性元件导致的。
  • 动态干扰:电机启动后磁力计数据突然跳变。这是大电流产生的磁场。
判断标准:如果磁力计三轴数据的模长(sqrt(x²+y²+z²))在飞行中变化超过 0.15 Gauss,说明存在明显的动态磁场干扰。

我踩过的坑:

有一次做物流无人机,磁力计在起飞前校准得好好的,一上天就偏。查了两天日志,发现是电池连接线从磁力计旁边经过,大电流时产生的磁场干扰了读数。把线缆挪开 5 厘米,问题解决。

4.4 气压计:高度跳变的「元凶」

气压计通过测量大气压来推算高度。它的问题通常表现为高度跳变。

怎么看气压计数据?

在日志里找 sensor_baro 或 vehicle_air_pressure。重点关注两个指标:

  1. 气压值变化率:正常飞行中,气压变化应该平滑。如果出现瞬间跳变超过 10 Pa(约 0.8 米高度变化),就有问题。
  2. 噪声水平:静止时气压值的标准差应该在 1 Pa 以内。超过 3 Pa 说明气压计受到了气流干扰。
异常现象 可能原因 日志特征
高度突然下降 2 米又恢复 气压计进风口被遮挡 气压值瞬间升高又回落
高度持续漂移 温度变化导致 气压值缓慢变化,与温度曲线相关
高度噪声大 螺旋桨下洗气流影响 气压值高频抖动
重要提醒:气压计最怕的是「气压冲击」。比如快速下降时,气压计进风口如果正对气流方向,气压值会瞬间偏高,导致 EKF 误以为高度在上升。这就是为什么有些飞机快速下降时会「反弹」一下。

怎么优化?

我个人习惯在气压计外面加一个海绵罩,既能防气流冲击,又能减缓温度突变的影响。另外,在 PX4 参数里把 EKF2_BARO_GATE 设得宽松一点(比如 5.0),可以避免 EKF 被气压计异常值带偏。

4.5 综合判断:多传感器交叉验证

单个传感器出问题不可怕,可怕的是你只看一个传感器。我每次做日志分析,都会把四个传感器的数据放在一起看。

交叉验证的方法:

  • 加速度计 Z 轴和气压计高度应该趋势一致。如果加速度计显示下降,气压计却显示上升,肯定有一个有问题。
  • 陀螺仪和磁力计的航向应该吻合。如果磁力计航向突然偏了 30 度,但陀螺仪积分出来的航向没变,那就是磁力计被干扰了。
  • 气压计高度和 GPS 高度可以互相印证。如果气压计高度跳变但 GPS 高度平滑,优先相信 GPS。
我的经验:在日志里同时打开 estimator_status 主题,看 EKF 的 innovation 值。哪个传感器的 innovation 突然变大,就是哪个传感器出了问题。这比肉眼盯着原始数据快多了。