笔者先说一下,由于能力暂时不强,难免有误,有错的可以指出来,感谢~
1. 为什么需要鲁棒控制?
想象你正在设计一辆自动驾驶汽车的定速巡航系统。工程师在仿真软件里调试得非常完美,车速平稳得像老司机。但一到实际路试就出问题了:今天车上只坐了一个瘦子,控制效果很好;明天满载五个胖子和行李,车身变重、惯性变大,原来的“完美参数”就开始让车辆出现顿挫甚至震荡。
这就是模型不确定性。真实世界的被控对象 G_△(比如车辆)会因为载重、胎压、路面坡度等因素不断变化,不会乖乖地等于你纸上设计的那个名义模型 G 。
这篇笔记的核心,就是解决这类“模型老是变来变去”的问题,设计一个以不变应万变的鲁棒控制器 K 。
2. 用“乘性不确定性”描述模型波动
文中用一个非常直观的方式描述这种波动:乘性不确定性。
公式如下:
怎么理解这个公式呢?你可以把它看作一个“区间”:
G是你认为最靠谱的名义模型,比如“半载状态”的车。
Wᵣ 是波动的上界,是一个固定的传递函数。它在低频时很小(低频时模型一般比较准),在高频时增大(高频动态难以建模,误差更大)。
△ 是任意一个满足 |△|< 1 的稳定传递函数,它就像个“滑动变阻器”,在 Wᵣ 划定的边界内随机产生一种具体的波动。
这样,所有可能的真实车辆模型,都被装进了 (1 +△ Wᵣ) G 这个“集合”里。我们的目标就是设计一个控制器 K ,它能镇住这个集合里的所有模型。
3. 核心工具:混合灵敏度优化
怎么同时保证“稳定的控制”和“舒服的体验”?这就是混合灵敏度优化的精髓。它的设计思路很像是在玩一个“三个旋钮”的调音台,我们要同时关注三个关键传递函数:
1. 灵敏度函数
这是扰动 d 到误差 e 的传递函数。我们希望 S 尽量小,这意味着系统对外部干扰(比如突然吹来一阵横风)抑制能力强。这对应调音台上的低频增益旋钮,通过权函数 W₁ 来强调。
2. 控制灵敏度函数
这代表了控制器输出的“动作”大小。我们希望 R 不能太大,否则执行器(如油门/刹车)会剧烈动作甚至饱和。这对应执行器保护旋钮,通过权函数 W_2 来约束。
3. 补灵敏度函数
这关系到对模型波动的容忍度。为了系统能稳定,高频段的 T 必须滚降得足够快,以压制住模型不确定性带来的糟糕影响。这对应高频鲁棒旋钮,通过权函数 W₃ 来约束。
设计目标就变成一个:找到一个控制器 K ,让下面这一堆加权后的函数的最大“增益”都小于1(即它们的无穷范数小于1):
这就像一个“一揽子”协议,通过选择三个频域权函数 W₁, W₂, W₃,让你一次性把性能指标、执行器约束和鲁棒稳定性全都考虑进去,避免了过去那种“调一个参数,其他指标变差,只能反复试凑”的痛苦。
4. 搭建并求解鲁棒控制器
理论部分梳理讲完了,下面我们在 MATLAB 里实操一下。代码注释很详细,你可以配合符号对照表来理解。
G:名义模型
Wr:不确定性上界(波动边界)
W1:性能权函数(好的扰动抑制)
W2:控制权函数(防止执行器饱和)
W3:鲁棒权函数(保证高频稳定性)
简单解释一下这段代码:首先建好名义模型,然后根据实际经验或伯德图波动情况,设计三个偏心的权函数—— W₁ 偏心性能、 W₂ 偏心能耗、 W₃偏心鲁棒性。augw 函数会帮你把模型和权函数整合成一个标准的广义对象,而 hinfsyn 则负责求解控制器。最后看 gamma,只要它小于1,所有设计目标就都实现了。
这种方法的优势在于:只要权函数选得准,一次求解就能得到满足所有约束的控制器,非常适合处理模型会“随机漂移”的实际控制问题。