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 个周期正常才恢复使用。
嗯,关于故障检测与隔离,今天就讲到这里。下一节我们聊聊故障切换的具体实现——怎么在毫秒级完成传感器切换,保证飞控不中断。