4、传感器冗余(二):GPS/INS组合导航冗余、气压计与空速管冗余

好,咱们接着聊传感器冗余。上一节我们把IMU和磁力计那点事儿讲透了,这一节重点放在GPS/INS组合导航,还有气压计和空速管这对“难兄难弟”上。

说实话,GPS和INS的组合,是飞控系统里最经典的冗余搭档。为什么?因为这两货的缺点正好互补。GPS信号容易丢,但长期精度好;INS不受外界干扰,但时间长了就漂。你想想看,把它们捏在一起,不就是绝配吗?

GPS/INS组合导航的冗余策略

我个人习惯把GPS/INS冗余分成三个层次:

  1. 数据级冗余:多套GPS接收机 + 多套IMU
  2. 算法级冗余:不同的融合算法(卡尔曼滤波、互补滤波等)
  3. 决策级冗余:根据健康状态动态切换融合策略

先说数据级。我在项目中遇到过最头疼的问题——双GPS都好好的,但位置输出差了50米。查了半天,原来是其中一台GPS的天线被碳纤维机身遮挡了。所以我现在做设计,一定会要求GPS天线安装在机身顶部,而且两个天线之间至少隔开30厘米。

核心要点:双GPS冗余不是简单堆硬件,天线布局、射频干扰、共模故障都要考虑。我见过最惨的案例,两个GPS用同一个电源轨,一个短路两个全挂。

算法级冗余,说白了就是多准备几套融合算法。主卡尔曼滤波跑着,备用的互补滤波也在后台算。一旦主滤波器发散,立刻切过去。嗯,这里要注意——切换的时候要平滑过渡,不能出现位置跳变。

// 伪代码:GPS/INS融合切换逻辑
if (kalman_health == HEALTHY) {
    nav_output = kalman_output;
} else if (complementary_health == HEALTHY) {
    // 平滑过渡,防止跳变
    nav_output = nav_output * 0.9 + complementary_output * 0.1;
    // 逐渐增加互补滤波权重
} else {
    // 双算法都挂了,进入纯INS模式
    nav_output = ins_only_output;
    trigger_emergency_landing();
}

决策级冗余,这个就有点意思了。系统会实时评估每个传感器的健康状态,然后动态决定用哪个融合策略。比如GPS信号差的时候,就降低GPS的权重,多依赖INS。等GPS恢复了,再慢慢把权重调回来。

我的经验:GPS/INS融合里最容易踩的坑是时间同步。GPS的PPS脉冲和IMU的数据帧必须严格对齐,差1毫秒,融合出来的位置可能偏好几米。我曾经因为这个bug,在试飞时眼睁睁看着飞机在天上画“8”字...

气压计与空速管冗余

气压计和空速管,这对组合经常被忽视。很多人觉得,有GPS了还要什么气压计?有INS了还要什么空速管?

其实不是这样的。GPS在垂直方向上的精度很差,误差能到10米以上。而气压计测高度,精度可以到0.1米。空速管呢,它直接测量空速,这是飞机失速保护的关键数据。INS算出来的地速,在强风天根本不能用来判断失速。

传感器 测量值 优点 缺点
气压计 气压高度 垂直精度高、成本低 受温度影响、有延迟
空速管 空速 直接测量、失速保护关键 易结冰、易堵塞
GPS 海拔高度 绝对高度、无漂移 垂直精度差、更新率低

气压计的冗余,我建议至少用两颗。一颗装在飞控板内部,另一颗外置,通过气管引到机身侧面。为什么?因为飞控板内部的气压计会受到电路板发热的影响,读数会偏高。外置那颗虽然响应慢一点,但数据更准。

避坑指南:我曾经遇到过气压计在阳光下暴晒后,高度读数漂了20米。后来发现是气压计外壳受热膨胀,导致内部气压变化。解决方案是给气压计加遮光罩,或者用海绵隔热。

空速管的冗余,这个就更有意思了。小型无人机上,空速管经常被灰尘、昆虫堵塞。我见过最离谱的,一只蜘蛛在空速管里结了网,空速读数一直为零,飞控以为飞机没速度,疯狂加油门...

所以我现在做设计,一定会装两个空速管。一个装在机头,一个装在机翼前缘。两个空速管的数据会做交叉校验:

  1. 如果两个空速管读数一致,取平均值
  2. 如果一个读数异常(比如突然跳变),丢弃异常值,用另一个
  3. 如果两个都异常,切换到INS估算的空速

这里有个细节——空速管和气压计的数据可以互相验证。比如气压计显示高度在下降,但空速管显示空速在增加,那大概率是飞机在俯冲。如果空速管显示空速为零,但INS显示地速很大,那空速管八成是堵了。

实战经验:我做过一个项目,空速管和气压计装在同一个加热模块里。结果加热模块坏了,两个传感器同时失效。从那以后,我坚持把空速管和气压计的加热电路分开设计,避免共因故障。

最后说一句,传感器冗余不是越多越好。每增加一个传感器,就多一个故障点,多一份线束重量,多一份软件复杂度。我个人的原则是:关键参数(高度、空速)至少双冗余,非关键参数(比如温度)单冗余就够了。

嗯,这一节就到这里。下一节我们讲执行器冗余,舵机、电机、电调这些“出力”的家伙怎么搞冗余设计。到时候我会分享一个我踩过的坑——双舵机冗余,结果两个舵机打架,把舵面拉断了...