4. 偏航控制中的非线性问题:死区效应、饱和限制、摩擦与滞环、非线性补偿策略

偏航控制,说白了就是让飞行器老老实实按你想要的航向走。但现实世界不是理想模型,你写好的PID参数到了真机上,经常会出现各种「不听话」的现象。我这些年调试过的偏航控制问题,十有八九都跟非线性因素有关。

今天咱们就把这些「捣蛋鬼」一个个揪出来,看看它们长什么样,怎么对付它们。

4.1 死区效应:小信号不管用

什么是死区?就是你给执行器发一个小指令,它根本不动。比如舵机或者电机,输入信号在±2%以内,输出就是0。为什么会这样?

  • 机械间隙:齿轮之间总有那么点空行程
  • 静摩擦力:力不够大,推不动
  • 电子噪声阈值:为了避免误动作,故意设的

我在项目中遇到过一架六旋翼,偏航角始终有±3度的振荡。查了半天,发现是舵机死区太大,小修正信号全被吃掉了。结果就是——不修偏,偏了才修,修就修过头。

死区对偏航控制的影响:

  • 稳态误差增大:小偏差无法被纠正
  • 极限环振荡:系统在死区边界来回跳
  • 响应迟钝:你感觉飞机在「飘」

怎么测死区?很简单。给一个斜坡输入,看输出什么时候开始动。我习惯用0.1%步长往上加,记录第一个非零输出对应的输入值。

4.2 饱和限制:执行器也有极限

饱和,就是执行器到了物理极限。舵机最大转90度,电机最大给100%油门,你再怎么加指令也没用。

偏航控制里最怕什么?积分饱和。你想想看,飞机偏航了,积分项拼命累积,但执行器已经饱和了,实际输出上不去。等偏差反过来,积分项还得慢慢「消化」之前累积的量——这就造成了严重的超调和振荡。

我曾经踩过的坑:

有一次调试大型无人机,偏航响应总是慢半拍。我盯着日志看了半天,发现积分项已经累积到300%了,但实际输出卡在100%。等飞机转回来,积分项还在那「赖着不走」,结果就是来回晃了五六秒才稳住。

饱和限制通常分两种:

类型 表现 典型场景
幅值饱和 输出被限制在最大最小值 电机PWM限幅、舵机角度限位
速率饱和 输出变化率被限制 舵机转速有限、电机加减速时间

4.3 摩擦与滞环:回不去的原点

摩擦这东西,在偏航轴上特别明显。尤其是带机械传动的系统,比如直升机尾桨、固定翼方向舵。

滞环是什么?你给正向指令和反向指令,同样的输入值对应的输出不一样。说白了就是「有去无回」——推过去一个位置,拉回来时它不回到原来的点。

为什么会这样?

  • 库仑摩擦:静摩擦大于动摩擦,启动那一下需要更大的力
  • 机械间隙:齿轮咬合有空程
  • 材料弹性变形:比如拉线传动的松弛

我记得有一次调试固定翼的方向舵,地面测试一切正常,上天后偏航总偏一个方向。后来发现是舵机拉线有滞环,回中位置偏了2度。地面看不出来,空中气流一吹就明显了。

我的经验:

滞环宽度如果超过控制精度的1/3,就必须做补偿。否则你永远别想消除稳态误差。

4.4 非线性补偿策略

好了,问题摆在这了,怎么解决?我这些年总结了一套组合拳,分三步走。

4.4.1 死区补偿

最直接的方法——加一个反向死区。在控制器输出后面,人为叠加一个偏置,让信号跳过死区。

// 死区补偿示例(C语言风格)
float deadband_compensate(float input, float deadband_width) {
    if (input > 0) {
        return input + deadband_width;
    } else if (input < 0) {
        return input - deadband_width;
    } else {
        return 0;
    }
}

注意:补偿量不能太大,否则会引入高频抖动。我一般取死区宽度的80%~90%,留点余量。

4.4.2 抗积分饱和

这个我强烈建议每个做偏航控制的人都加上。方法有很多,我常用的是条件积分法

  • 当执行器未饱和时,正常积分
  • 当执行器饱和时,停止积分
  • 或者更精细一点:当偏差和积分项同号时停止积分
// 条件抗积分饱和
float integrator = 0;
float anti_windup(float error, float output, float limit) {
    if (fabs(output) < limit) {
        integrator += error * dt;  // 正常积分
    }
    // 饱和时积分项保持不变
    return integrator;
}

4.4.3 摩擦与滞环补偿

对付摩擦,我习惯用前馈补偿。在控制器输出上叠加一个固定的小信号,用来克服静摩擦。

对付滞环,可以用逆模型补偿。先离线测出滞环曲线,然后在控制回路里做一个反向映射。

实用建议:

如果你不想搞太复杂,可以试试「抖动信号」——在控制输出上叠加一个高频小幅信号,让系统始终处于「微动」状态,这样静摩擦就变成了动摩擦,好对付得多。频率一般选控制周期的5~10倍,幅值取死区宽度的1/2。

4.5 知识体系总览

下面这张图,是我自己整理的非线性问题处理框架。你照着这个思路走,基本不会漏掉什么。

偏航控制非线性问题处理框架 死区效应 饱和限制 摩擦与滞环 其他非线性 影响:稳态误差 → 极限环振荡 → 响应迟钝 → 积分饱和 → 超调振荡 补偿策略 死区补偿 | 抗积分饱和 | 前馈补偿 | 逆模型补偿 | 抖动信号 工程实施要点 参数辨识 → 离线标定 → 在线自适应 → 安全限幅 → 故障保护 偏航控制稳定性提升

嗯,这张图基本把咱们今天讲的内容串起来了。从问题识别到补偿策略,再到工程实施,每一步都有对应的技术手段。

最后说一句:非线性补偿不是越多越好。加多了反而可能引入新的问题。我个人的习惯是——先测出非线性特性,然后只补偿最严重的那个环节。贪多嚼不烂,做控制尤其如此。