4. 执行器冗余设计:舵机/电机冗余与控制分配策略

执行器冗余,说白了就是给飞机多装几套“手脚”。

我在做物流无人机项目时,遇到过最头疼的问题就是舵机卡死。那次试飞,飞机刚离地3米,副翼舵机突然卡在15度位置。幸好我们提前做了冗余设计,另一套舵机立刻接管,飞机才没翻过去。从那以后,我对执行器冗余这块就特别上心。

4.1 舵机冗余:双套备份

舵机冗余最常见的方式就是双舵机并联。两个舵机通过连杆同时驱动同一个舵面。

你想想看,如果一个舵机坏了,另一个还能继续工作。但这里有个坑——两个舵机如果较劲,反而会互相消耗。

⚠️ 避坑指南
我曾经在项目里吃过亏:两个舵机型号不同,响应速度不一致。结果一个舵机拼命往前推,另一个拼命往后拉,舵面纹丝不动,电流却飙升到3A。最后舵机烧了,飞机也炸了。
教训:冗余舵机必须型号一致,且做同步校准。

舵机冗余的典型架构:

  • 热备份:两个舵机同时通电,同时接收指令。一个失效,另一个无缝切换。
  • 冷备份:主舵机工作,备舵机断电。主舵机故障时,备舵机才上电启动。
  • 表决模式:三个舵机同时工作,取两个相同的结果执行。这是最可靠的,但成本也最高。

我个人习惯用热备份。虽然功耗大一点,但切换时间几乎为零。冷备份有个问题——备舵机上电瞬间会有冲击,搞不好会带偏舵面。

4.2 电机冗余:双绕组电机

电机冗余,最经典的就是双绕组电机。说白了,就是一台电机里绕了两套线圈。

正常工作时,两套绕组同时出力。如果一套绕组烧了,另一套还能继续转。只不过功率会下降一半。

双绕组电机的关键参数:

参数 正常模式 单绕组故障
最大功率 100% 50%
最大扭矩 100% 50%
效率 85% 78%
温升 正常 偏高(需降额使用)
💡 经验之谈
双绕组电机不是简单的“1+1=2”。两套绕组之间有互感,设计不好会互相干扰。我建议两套绕组采用不同的PWM频率,比如一套用8kHz,另一套用10kHz。这样能避免拍频干扰。

4.3 控制分配策略

有了冗余的执行器,接下来就是怎么分配控制指令了。这里我重点讲两种方法:伪逆法和加权分配法。

4.3.1 伪逆法

伪逆法,说白了就是解一个超定方程组。

假设你有4个舵机,但只需要控制3个轴(滚转、俯仰、偏航)。那就有4个未知数,3个方程。解不唯一,怎么办?用伪逆求最小范数解。

数学上,控制分配可以写成:

v = B * u

其中v是期望的控制力矩(3x1),B是控制效率矩阵(3xn),u是执行器输出(nx1)。

伪逆解为:

u = B^T * (B * B^T)^(-1) * v

代码实现:

// 伪逆法控制分配
// 输入:期望力矩 v[3],控制效率矩阵 B[3][n]
// 输出:执行器指令 u[n]
void pseudo_inverse_allocation(float v[3], float B[3][MAX_ACTUATORS], float u[MAX_ACTUATORS], int n) {
    // 计算 B * B^T
    float BBT[3][3] = {0};
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            for (int k = 0; k < n; k++) {
                BBT[i][j] += B[i][k] * B[j][k];
            }
        }
    }
    
    // 求逆(3x3矩阵求逆,这里简化处理)
    float inv_BBT[3][3];
    matrix_inverse_3x3(BBT, inv_BBT);
    
    // 计算 u = B^T * inv(B*B^T) * v
    float temp[3] = {0};
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            temp[i] += inv_BBT[i][j] * v[j];
        }
    }
    
    for (int i = 0; i < n; i++) {
        u[i] = 0;
        for (int j = 0; j < 3; j++) {
            u[i] += B[j][i] * temp[j];
        }
    }
}
🔧 实用技巧
伪逆法有个问题:它不考虑执行器的物理限制。比如舵机只能转±30度,但伪逆算出来可能要求转45度。所以一定要加限幅处理。我一般会在伪逆后面再加一层“限幅-重分配”的迭代。

4.3.2 加权分配法

加权分配法,就是给不同的执行器分配不同的“权重”。

比如,主舵机权重0.8,备舵机权重0.2。正常情况下,主舵机出力多。如果主舵机故障,就把它的权重降到0,备舵机权重升到1。

加权分配的数学形式:

u = W * B^T * (B * W * B^T)^(-1) * v

其中W是对角权重矩阵,对角线元素就是每个执行器的权重。

权重怎么设?我分享一个经验:

  • 健康执行器:权重设为1.0
  • 部分故障:权重设为0.3~0.7(根据故障程度)
  • 完全失效:权重设为0.001(不要设为0,防止矩阵奇异)
⚠️ 注意
权重不能突变!我曾经试过故障瞬间把权重从1降到0,结果控制力矩突变,飞机猛地抖了一下。正确的做法是:用一阶低通滤波平滑过渡,时间常数设0.1~0.3秒。

4.4 控制分配流程图

下面这张图展示了整个控制分配的流程:

执行器冗余控制分配流程图 期望控制力矩 v 执行器故障检测 是否有故障? 无故障 伪逆法分配 有故障 更新权重矩阵 W 加权分配法 执行器指令 u 图:执行器冗余控制分配决策流程

4.5 实际项目中的取舍

说了这么多,最后聊聊实际项目怎么选。

我做过一个农业植保机,成本敏感,用了双舵机热备份+伪逆法。因为植保机飞行速度慢,对控制精度要求不高,伪逆法够用了。

另一个是测绘无人机,要求高可靠性。我用了三余度舵机+加权分配法。虽然成本翻倍,但故障率降低了两个数量级。

📌 总结一下我的建议:
  • 低成本项目:双舵机热备份 + 伪逆法
  • 高可靠项目:三余度舵机 + 加权分配法
  • 电机冗余:双绕组电机,两套绕组用不同PWM频率
  • 权重切换:一定要加平滑过渡,别让飞机“打哆嗦”

嗯,执行器冗余这块就讲这么多。记住一点:冗余不是简单的堆硬件,而是系统性的设计。从舵机选型到控制分配,每一步都要想清楚。


公众号:蓝海资料掘金营,微信deep3321