3. 故障检测与隔离:基于残差的故障检测、阈值设定方法、传感器一致性校验

各位同学,咱们接着聊。上一节讲了冗余架构怎么搭,但架构搭好了,传感器到底有没有出问题,你得有个判断方法。说白了,就是怎么知道哪个传感器在「说谎」。

我个人习惯把故障检测比作「抓内鬼」。三个陀螺仪,两个说飞机在右转,一个说在左转,你信谁?嗯,这里就要用到我们今天讲的核心——残差分析。

3.1 基于残差的故障检测:原理与实战

残差是什么?简单说,就是「测量值」和「期望值」的差值。

你想想看,如果传感器是好的,它的输出应该和系统模型预测的值差不多。如果差得远了,那大概率是坏了。

数学上,残差 r 可以写成:

r = y_measured - y_estimated

其中 y_measured 是传感器实际读数,y_estimated 是根据其他健康传感器或模型推算出来的值。

我在项目中遇到过一件事:某次试飞,GPS 突然跳了 50 米。但 IMU 数据是正常的。残差瞬间从 0.1 米飙到 49.9 米。检测逻辑立刻触发,把 GPS 踢出了融合滤波器。这就是残差检测的典型应用。

核心思想: 残差接近零 → 传感器正常;残差显著偏离零 → 传感器故障。

但这里有个坑:残差不能只看绝对值。因为不同传感器的噪声水平不一样。GPS 噪声大,残差 0.5 米可能正常;加速度计噪声小,残差 0.1 m/s² 可能就有问题。

3.2 阈值设定方法:别拍脑袋,要讲科学

阈值怎么设?我见过不少新手直接拍脑袋设个固定值。结果要么误报太多,要么漏报。

我个人建议用统计方法。具体来说,有几种常用套路:

  • 3σ 原则: 采集一段正常飞行数据,计算残差的均值和标准差。阈值设为 μ ± 3σ。理论上,正常数据 99.7% 落在这个范围内。
  • 自适应阈值: 根据飞行状态动态调整。比如悬停时阈值小,大机动时阈值大。因为机动本身就会引入更大的残差。
  • 卡方检验: 对于多维残差向量,用卡方分布设定阈值。适合多传感器联合检测。

举个例子,我当年做四旋翼飞控时,陀螺仪残差的阈值是这样算的:

// 伪代码示例
float mean = 0.002;   // 静态采集的均值
float std = 0.015;    // 静态采集的标准差
float threshold = mean + 3.0 * std;  // 约 0.047 rad/s

if (fabs(residual) > threshold) {
    // 触发故障标志
    fault_flag = TRUE;
}

小技巧: 阈值不要设得太死。我习惯加一个「迟滞区间」。比如触发阈值是 0.05,恢复阈值是 0.03。这样可以避免在临界点来回抖动。

3.3 传感器一致性校验:三选二,还是二选一?

一致性校验,说白了就是「对答案」。三个传感器,如果两个读数接近,第三个差得远,那少数服从多数。

常用的方法有:

  • 两两比较法: 计算每对传感器之间的差值。如果某传感器与另外两个的差值都超过阈值,判定为故障。
  • 中值法: 取三个传感器的中值作为参考值。偏离中值太远的传感器被隔离。
  • 投票机制: 三个传感器,两两一致则通过。如果三个都不一致,进入「无共识」状态,系统降级运行。

我曾经在六旋翼上用过一种「加权一致性校验」。每个传感器根据历史可靠性分配权重。可靠性高的传感器,在投票时话语权更大。效果不错,但实现起来稍微复杂一些。

注意: 一致性校验不能解决「共模故障」。比如三个同型号的陀螺仪同时受温度影响漂移,它们读数仍然一致,但都是错的。所以硬件上要尽量用不同原理的传感器(比如 MEMS 陀螺仪 + 光纤陀螺仪)。

3.4 故障隔离:踢出去,别犹豫

检测到故障后,要果断隔离。我见过一些系统,检测到故障后还犹豫要不要用,结果把整个状态估计带偏了。

隔离策略一般分两种:

  • 硬隔离: 直接把故障传感器的数据权重设为零,不再参与融合。
  • 软隔离: 降低故障传感器的权重,但保留部分信息。适合故障程度较轻的情况。

我个人更倾向于硬隔离。因为飞控系统对实时性要求极高,软隔离的计算开销大,而且容易引入不确定性。

隔离后还要做一件事:记录故障日志。包括故障时间、残差大小、传感器编号等。方便事后分析原因。

3.5 实战中的避坑指南

最后,分享几个我踩过的坑:

  • 阈值设得太小: 曾经有一次,我把阈值设得太严,结果飞机一抖就触发故障切换。后来发现是机架共振导致的。解决办法是加一个低通滤波器,先平滑残差再判断。
  • 忘记考虑时延: 不同传感器的采样频率和传输时延不同。直接比较原始数据会引入虚假残差。要对齐时间戳后再计算。
  • 隔离后不恢复: 有些故障是瞬态的(比如电磁干扰)。隔离后如果传感器恢复正常,应该允许它重新加入。我习惯加一个「恢复计时器」,连续 N 个周期正常才恢复使用。

嗯,关于故障检测与隔离,今天就讲到这里。下一节我们聊聊故障切换的具体实现——怎么在毫秒级完成传感器切换,保证飞控不中断。