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 知识体系总览
下面这张图,是我自己整理的非线性问题处理框架。你照着这个思路走,基本不会漏掉什么。
嗯,这张图基本把咱们今天讲的内容串起来了。从问题识别到补偿策略,再到工程实施,每一步都有对应的技术手段。
最后说一句:非线性补偿不是越多越好。加多了反而可能引入新的问题。我个人的习惯是——先测出非线性特性,然后只补偿最严重的那个环节。贪多嚼不烂,做控制尤其如此。