3、传感器故障诊断:基于残差分析的IMU故障检测、GPS信号质量评估与故障隔离、气压计高度数据有效性校验
传感器,说白了就是飞控系统的「眼睛」和「耳朵」。眼睛花了,耳朵聋了,飞机肯定要出事儿。我做飞控这些年,见过太多因为传感器故障导致的炸机案例。嗯,今天咱们就聊聊怎么给这些传感器「看病」。
3.1 基于残差分析的IMU故障检测
IMU(惯性测量单元)是飞控最核心的传感器。它要是坏了,整个系统基本就废了。我个人习惯用残差分析来检测IMU故障,这个方法简单又实用。
什么是残差?
说白了,就是「实际测量值」和「预测值」之间的差值。正常情况下,这个差值应该很小。如果突然变大,那肯定是有问题了。
核心思想:利用IMU的冗余信息,构建一致性检验方程。
举个例子,加速度计和陀螺仪的数据其实是有关联的。我们可以用陀螺仪的数据预测加速度计的输出,然后对比实际测量值。残差超过阈值,就说明有问题。
// 残差计算伪代码
float predict_accel = gyro_to_accel(gyro_data); // 用陀螺仪预测加速度
float residual = fabs(accel_measured - predict_accel); // 计算残差
if (residual > THRESHOLD_HIGH) {
// 故障标志位置1
imu_fault_flag = 1;
// 触发报警
fault_alarm();
}
我在项目中遇到过一个问题:残差阈值设得太小,导致频繁误报。后来我调整了策略,采用自适应阈值——根据飞行状态动态调整。悬停时阈值小一点,机动飞行时阈值大一点。效果好了很多。
小技巧:建议同时监控多个残差通道,比如三轴加速度和三轴角速度,共6个残差。单一通道的异常可能是噪声,多个通道同时异常才是真故障。
3.2 GPS信号质量评估与故障隔离
GPS这东西,有时候挺不靠谱的。城市峡谷、树荫遮挡、电磁干扰,都可能导致信号变差。你想想看,如果GPS突然跳变几十米,飞控还傻乎乎地跟着跑,那飞机不就飞丢了吗?
GPS信号质量评估指标:
| 指标 | 正常范围 | 异常表现 |
|---|---|---|
| HDOP(水平精度因子) | < 1.5 | > 2.5 时信号较差 |
| 卫星颗数 | > 8 | < 6 时定位不可靠 |
| 位置跳变幅度 | < 0.5m/s | > 2m/s 时可能异常 |
| 速度一致性 | 与IMU速度偏差 < 1m/s | 偏差 > 3m/s 时需隔离 |
我建议采用「多级故障隔离」策略:
- 轻度异常:降低GPS权重,增加IMU的置信度
- 中度异常:完全禁用GPS位置修正,仅保留速度辅助
- 严重异常:彻底隔离GPS,切换到纯惯性导航或视觉导航
注意:千万不要在GPS故障时直接丢弃所有数据。我曾经遇到过GPS信号短暂丢失后又恢复的情况,如果直接丢弃,会导致位置跳变。正确的做法是:故障期间保持位置预测,恢复后平滑过渡。
还有一个坑——GPS时间同步问题。GPS数据有延迟,一般50-200ms不等。如果不做时间对齐,残差分析会误报。我习惯在接收GPS数据时打上时间戳,然后和IMU数据做插值对齐。
3.3 气压计高度数据有效性校验
气压计看起来简单,其实挺娇气的。温度变化、气流扰动、甚至飞机本身的螺旋桨下洗流,都会影响它的读数。
气压计常见故障模式:
- 堵塞故障:气压计通气孔被灰尘或水滴堵住,读数卡死
- 漂移故障:温度变化导致零位漂移,高度缓慢变化
- 冲击故障:剧烈机动导致气压突变,产生尖峰噪声
我个人习惯用「三冗余校验」来判断气压计是否有效:
// 气压计高度有效性校验
bool baro_valid_check(float baro_alt, float imu_alt, float gps_alt) {
// 1. 与IMU积分高度对比
float diff_imu = fabs(baro_alt - imu_alt);
if (diff_imu > 5.0f) return false; // 偏差超过5米
// 2. 与GPS高度对比(GPS高度可用时)
if (gps_available) {
float diff_gps = fabs(baro_alt - gps_alt);
if (diff_gps > 10.0f) return false; // 偏差超过10米
}
// 3. 检查变化率是否合理
float baro_rate = (baro_alt - baro_alt_prev) / dt;
if (fabs(baro_rate) > 10.0f) return false; // 垂直速度超过10m/s
return true;
}
关键点:气压计高度校验不能只看绝对值,还要看变化率。我曾经遇到一个案例,气压计读数缓慢漂移,绝对值偏差不大,但积分后高度误差越来越大。后来我加入了「长时间漂移检测」——如果气压计高度和IMU积分高度的偏差持续增大,就判定为故障。
嗯,这里还要提一下「地面校准」的重要性。每次起飞前,我建议做一次气压计零点校准。记录当前地面气压值,作为高度计算的基准。如果起飞后气压计读数突然跳变,很可能是基准值出了问题。
故障隔离后的处理策略:
| 故障类型 | 处理方式 | 恢复条件 |
|---|---|---|
| IMU故障 | 切换到备用IMU,或降级为GPS+磁力计模式 | 残差连续正常超过10秒 |
| GPS故障 | 切换到纯惯性导航,限制飞行范围 | 信号质量恢复且稳定超过30秒 |
| 气压计故障 | 使用GPS高度或IMU积分高度替代 | 三冗余校验通过后恢复 |
最后说一句:传感器故障诊断不是万能的。它只能检测「已经发生」的故障,对于「即将发生」的故障(比如IMU温度过高、GPS信号逐渐变差),我建议加上预测性维护机制。说白了,就是监控传感器的健康状态趋势,提前预警。
避坑指南:我曾经在调试时发现,气压计和GPS高度总是对不上。查了半天,原来是气压计的通气孔被标签纸挡住了。所以啊,硬件安装的细节也很重要,别光顾着写代码。