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 时需隔离

我建议采用「多级故障隔离」策略:

  1. 轻度异常:降低GPS权重,增加IMU的置信度
  2. 中度异常:完全禁用GPS位置修正,仅保留速度辅助
  3. 严重异常:彻底隔离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高度总是对不上。查了半天,原来是气压计的通气孔被标签纸挡住了。所以啊,硬件安装的细节也很重要,别光顾着写代码。