4. 不确定性建模:参数不确定性、未建模动态与外部扰动的统一框架
做飞控这么多年,我越来越觉得,抗风扰控制的核心其实就一句话:你得先知道你在跟谁打架。说白了,不确定性建模就是给对手画个像——它有多重?气动特性变没变?风从哪来?
很多同学一上来就调PID参数,调了半天发现换个载荷就炸了。嗯,这就是没把不确定性搞清楚。我个人习惯,在设计控制器之前,先花30%的时间把不确定性模型搭好。这步做扎实了,后面事半功倍。
4.1 不确定性从哪来?——三个源头
我一般把不确定性分成三类,你想想看,是不是都能对号入座:
- 参数不确定性:质量、惯量、气动系数这些,说白了就是模型里的数字不准。比如你标称质量是1.5kg,挂了个相机变成1.8kg,这就是参数不确定性。
- 未建模动态:你用的模型是简化过的,比如忽略了电机动态、结构柔性、陀螺效应。这些没写进方程的东西,就是未建模动态。
- 外部扰动:风、气流、甚至机臂被人碰了一下。这些是环境强加给你的力/力矩。
核心观点:这三种不确定性,在数学上可以统一成一个框架。别分开处理,否则控制器会变得又笨又脆。
4.2 统一建模框架——我常用的方法
我个人习惯用集总不确定性的思路。什么意思呢?就是把所有不确定性和扰动,打包成一个“总扰动”,然后想办法估计它、补偿它。
假设你的标称模型是:
M₀ * a = F + d
其中M₀是标称惯量矩阵,a是角加速度,F是控制力矩,d是总扰动。这个d包含了:
- 参数偏差:(M - M₀) * a
- 未建模动态:f_unmodeled
- 外部扰动:d_ext
写成公式就是:
d = (M - M₀) * a + f_unmodeled + d_ext
你看,这样就把所有东西都塞进了一个变量d里。接下来你只需要设计一个观测器去估计d,然后在控制律里把它抵消掉就行。
我的经验:我在做某款物流无人机时,载荷从空载到满载质量变化了40%。用这个统一框架,只调了一个观测器带宽参数,就覆盖了全部工况。要是分开建模,光参数表就得列三页。
4.3 参数不确定性的具体建模
参数不确定性是最容易处理的,因为它有明确的数学形式。我一般这样建模:
| 参数 | 标称值 | 不确定范围 | 典型来源 |
|---|---|---|---|
| 质量 m | 1.5 kg | ±30% | 载荷变化、电池消耗 |
| 惯量 J | diag(0.01, 0.01, 0.02) | ±20% | 重心偏移、构型变化 |
| 升力系数 C_T | 1.0e-5 | ±15% | 桨叶磨损、空气密度 |
| 力矩系数 C_M | 2.0e-7 | ±20% | 电机老化、温度影响 |
注意,这些不确定范围不是拍脑袋定的。我建议你去做敏感性分析——把每个参数拉偏10%,看对闭环响应的影响有多大。影响大的参数,建模时要特别小心。
4.4 未建模动态——最头疼的部分
说实话,未建模动态是三类里最难搞的。为什么?因为你不知道它长什么样。
我遇到过最典型的例子:某次测试,飞机悬停时突然开始高频抖动。查了半天,发现是机臂的弹性模态被激励了。这个模态频率在80Hz左右,而我的控制器带宽是30Hz。按理说不会耦合,但实际就是发生了。
后来我总结,未建模动态通常表现为:
- 高频谐振:结构模态、桨叶拍打
- 时滞:通信延迟、计算延迟
- 非线性:死区、饱和、摩擦
在统一框架里,我通常把未建模动态建模成有界扰动:
|f_unmodeled| ≤ Δ_max
这个Δ_max怎么取?我的经验是:做一次扫频实验,看实际响应和模型预测的偏差有多大,取包络线的最大值。
避坑指南:我曾经在某个项目里把Δ_max取得太小,结果观测器估计不准,控制器补偿过头,反而把系统搞得不稳定。记住:宁可保守,不要激进。Δ_max取大一点,鲁棒性会更好,代价只是性能稍微下降。
4.5 外部扰动建模——风是最大的敌人
对于多旋翼来说,外部扰动主要就是风。我一般把风扰动分成两部分:
- 常值风:稳态的、方向固定的风。比如海边的海风。
- 阵风:随时间变化的、有随机性的风。比如楼宇间的湍流。
常值风好处理,用积分项就能消除。阵风就麻烦多了。我常用的阵风模型是Dryden模型,它的功率谱密度长这样:
Φ(ω) = σ² * (2L/πV) * 1/(1 + (Lω/V)²)
其中σ是风速标准差,L是湍流尺度,V是飞行速度。这个模型能生成符合实际物理的风速序列。
但在统一框架里,我不需要这么精细的模型。我只需要知道:阵风是有界的,且变化速率有限。所以外部扰动可以建模为:
|d_ext| ≤ D_max
|d_dot_ext| ≤ D_rate_max
这两个界决定了观测器的带宽需求。D_rate_max越大,观测器就需要越快的响应速度。
4.6 统一框架的数学表达
好了,现在我们把所有东西合在一起。系统的实际动力学是:
M * a = F + d_total
其中总扰动:
d_total = (M - M₀) * a + f_unmodeled + d_ext
而标称模型是:
M₀ * a₀ = F
控制目标就是让实际加速度a跟踪标称加速度a₀,通过补偿d_total来实现。
这个框架的好处是:你只需要设计一个观测器来估计d_total,然后在前馈通道里把它抵消掉。至于d_total内部是什么成分,观测器不关心,你也不需要关心。
核心思想:把复杂问题简单化。三种不确定性,一个观测器搞定。这就是鲁棒抗风扰控制的第一性原理。
4.7 知识体系结构图
下面这张图是我自己画的,把整个不确定性建模的框架串起来了。你看一眼就能明白各个模块的关系:
你看,从三个源头出发,汇聚成集总扰动,然后通过观测器估计,最后用前馈+反馈的方式补偿掉。这个流程我用了好多年,在多个机型上验证过,效果都很稳定。
4.8 小结
这一章我们聊了不确定性建模的三个源头,以及怎么把它们统一成一个框架。说白了就是:别管扰动从哪来,都当成一个总扰动来处理。这个思路简单、实用,而且数学上很干净。
下一章我们会讲怎么设计扰动观测器,以及观测器的带宽怎么选。嗯,到时候我会分享一个我踩过的坑——观测器带宽设太高会出什么问题。
公众号:蓝海资料掘金营,微信deep3321