3、传感器数据解读:IMU加速度计数据分析、陀螺仪数据分析、磁力计数据解读与校准验证
传感器是飞控的「眼睛」和「耳朵」。我常说一句话:日志分析的第一步,不是看控制参数,而是看传感器数据是否干净。如果传感器数据本身就有问题,后面所有的分析都是白费功夫。
这一章,我们重点拆解三个核心传感器:加速度计、陀螺仪、磁力计。我会结合我在实际项目中踩过的坑,告诉你如何从日志中快速判断传感器状态。
核心观点:传感器数据解读不是「看数值」,而是「看趋势、看噪声、看一致性」。数值对不代表传感器好,数值跳变也不代表传感器坏。
3.1 加速度计数据分析
加速度计测量的是比力(Specific Force),说白了就是「重力 + 运动加速度」的合成量。在悬停或匀速飞行时,它应该只感受到重力。
3.1.1 静态数据特征
飞机静止在地面时,加速度计三轴输出的模值应该接近 1g(约 9.81 m/s²)。我习惯看 vehicle_acceleration 或 sensor_accel 主题。
- 模值检查:计算 sqrt(x² + y² + z²),正常范围 9.5 ~ 10.2 m/s²。超出这个范围,说明传感器可能有偏置或温漂。
- 轴间分配:水平放置时,Z 轴接近 -9.81,X/Y 轴接近 0。如果 X 或 Y 轴有较大读数,说明飞机没放平,或者传感器安装有角度。
- 噪声水平:静止时,各轴读数波动应小于 ±0.05 m/s²。波动过大,说明传感器本身噪声大,或者受到了振动干扰。
我的经验:有一次我排查一架四轴飞行中高度漂移的问题。看日志发现加速度计 Z 轴噪声达到 ±0.3 m/s²,但模值正常。后来发现是减震海绵老化,高频振动耦合到了传感器上。换掉减震垫,问题解决。
3.1.2 动态数据特征
飞行过程中,加速度计数据会叠加运动加速度。这时候不能只看模值,要看变化趋势。
- 加减速阶段:前向加速时,X 轴(机头方向)会出现正向尖峰,峰值与加速度大小成正比。
- 转弯阶段:向心加速度会在水平面产生分量,与角速度配合分析可以判断转弯是否协调。
- 振动特征:如果加速度计数据出现高频振荡(频率 > 50 Hz),说明电机或螺旋桨的振动传递到了传感器。
| 飞行阶段 | 加速度计特征 | 常见问题 |
|---|---|---|
| 静止 | 模值 ≈ 9.81,各轴稳定 | 偏置误差、温漂 |
| 悬停 | 模值 ≈ 9.81,有轻微波动 | 振动耦合、减震失效 |
| 前飞加速 | X 轴正向尖峰,Z 轴略微减小 | 加速度计饱和、数据截断 |
| 急转弯 | 水平面出现向心加速度分量 | 与陀螺仪数据不匹配 |
3.2 陀螺仪数据分析
陀螺仪测量角速度,单位是 rad/s。它是姿态控制的核心输入。陀螺仪数据好不好,直接决定了飞控能不能稳住飞机。
3.2.1 零偏稳定性
静止时,陀螺仪三轴输出应该接近 0。但实际上会有微小偏差,这就是零偏(Bias)。
- 零偏大小:正常 MEMS 陀螺仪零偏在 ±0.1 rad/s 以内。超过 ±0.3 rad/s,说明传感器老化或温度影响严重。
- 零偏稳定性:静止 10 秒,零偏变化应小于 0.02 rad/s。如果零偏持续漂移,说明温补没做好。
- 艾伦方差分析:高级一点的方法,可以用艾伦方差(Allan Variance)分析陀螺仪的噪声类型。不过日常排查,看零偏稳定性就够了。
注意:PX4 内部有陀螺仪零偏在线估计(ekf2_gyro_bias)。如果日志中 bias 值持续增大或频繁跳变,说明传感器本身有问题,或者振动环境太恶劣。
3.2.2 动态响应
飞行中,陀螺仪数据应该平滑跟随操纵指令。我习惯看 vehicle_angular_velocity 和 actuator_controls 的对应关系。
- 响应延迟:从遥控器打杆到陀螺仪数据变化,延迟应小于 20 ms。延迟过大,说明滤波器参数太保守。
- 噪声水平:悬停时,角速度噪声应小于 ±0.05 rad/s。噪声过大,会导致控制器输出抖动,电机声音发「毛」。
- 饱和检查:陀螺仪量程通常为 ±2000 °/s(约 ±35 rad/s)。如果日志中出现接近量程的数据,说明飞行过于激烈,数据可能被截断。
3.3 磁力计数据解读与校准验证
磁力计是航向估计的重要依据。但它也是最容易受干扰的传感器。我见过太多因为磁力计问题导致飞丢的案例。
3.3.1 数据特征
磁力计测量的是地球磁场 + 机载磁场干扰的合成量。正常数据应该满足:
- 模值稳定:地磁场强度约 0.25 ~ 0.65 Gauss(因纬度而异)。模值波动应小于 ±0.05 Gauss。
- 旋转不变性:飞机绕任意轴旋转 360°,磁力计三轴数据应构成一个球面(或椭球面)。
- 无突变:磁力计数据不应出现阶跃式跳变。跳变通常意味着外部磁场干扰(如电机大电流、高压线)。
3.3.2 校准验证方法
PX4 的磁力计校准会生成偏移量(offset)和缩放矩阵(scale)。但校准做没做好,不能只看状态码,要看实际数据。
# 查看磁力计校准参数
param show CAL_MAG0_ID
param show CAL_MAG0_OFFS_X
param show CAL_MAG0_OFFS_Y
param show CAL_MAG0_OFFS_Z
param show CAL_MAG0_SCALE_X
param show CAL_MAG0_SCALE_Y
param show CAL_MAG0_SCALE_Z
我验证校准质量的方法很简单:
- 地面旋转测试:拿起飞机,绕各轴缓慢旋转 360°,同时记录
sensor_mag数据。 - 模值一致性:旋转过程中,模值变化应小于 ±0.1 Gauss。变化过大,说明校准不充分。
- 椭球拟合:将三轴数据画成 3D 散点图,应该接近一个球体。如果是椭球,说明 scale 参数没校准好。
- 航向对比:对比磁力计推算的航向与 GPS 航向(运动方向)。两者差异应小于 10°。差异过大,说明磁力计受干扰或校准错误。
我曾经遇到过一架飞机,每次飞出去 200 米就开始画圈。看日志发现磁力计模值在飞行中从 0.45 Gauss 跳到了 0.8 Gauss。后来排查发现是机臂上的 LED 灯带,大电流时产生了强磁场。把灯带供电线远离磁力计,问题解决。
3.4 传感器数据综合分析框架
单个传感器看完了,还得把它们放在一起看。我总结了一个「三板斧」分析框架:
这个框架的核心思想是:不要孤立地看一个传感器。加速度计和陀螺仪的数据应该相互印证,磁力计和 GPS 航向应该相互印证。如果出现矛盾,优先怀疑受干扰可能性最大的传感器。
3.5 常见问题与排查思路
最后,我整理了几个我在项目中遇到的高频问题,以及对应的排查思路:
| 现象 | 可能原因 | 日志中怎么看 |
|---|---|---|
| 悬停时高度漂移 | 加速度计 Z 轴噪声大 / 偏置不准 | 看 sensor_accel 的 Z 轴噪声和 ekf2_accel_bias |
| 航向缓慢偏转 | 磁力计受干扰 / 校准不准 | 看 sensor_mag 模值变化和 ekf2_heading 偏差 |
| 飞机高频抖动 | 陀螺仪噪声大 / 滤波器参数不当 | 看 vehicle_angular_velocity 的频谱特征 |
| 起飞后立即侧翻 | 加速度计或陀螺仪零偏严重 | 看静止时的 sensor_accel 和 sensor_gyro 初始值 |
重要提醒:传感器数据解读需要结合飞行日志的上下文。同一组数据,在悬停时是「正常噪声」,在高速前飞时可能就是「异常振动」。不要套公式,要理解物理含义。