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 参数不确定性的具体建模

参数不确定性是最容易处理的,因为它有明确的数学形式。我一般这样建模:

参数标称值不确定范围典型来源
质量 m1.5 kg±30%载荷变化、电池消耗
惯量 Jdiag(0.01, 0.01, 0.02)±20%重心偏移、构型变化
升力系数 C_T1.0e-5±15%桨叶磨损、空气密度
力矩系数 C_M2.0e-7±20%电机老化、温度影响

注意,这些不确定范围不是拍脑袋定的。我建议你去做敏感性分析——把每个参数拉偏10%,看对闭环响应的影响有多大。影响大的参数,建模时要特别小心。

4.4 未建模动态——最头疼的部分

说实话,未建模动态是三类里最难搞的。为什么?因为你不知道它长什么样。

我遇到过最典型的例子:某次测试,飞机悬停时突然开始高频抖动。查了半天,发现是机臂的弹性模态被激励了。这个模态频率在80Hz左右,而我的控制器带宽是30Hz。按理说不会耦合,但实际就是发生了。

后来我总结,未建模动态通常表现为:

  • 高频谐振:结构模态、桨叶拍打
  • 时滞:通信延迟、计算延迟
  • 非线性:死区、饱和、摩擦

在统一框架里,我通常把未建模动态建模成有界扰动

|f_unmodeled| ≤ Δ_max

这个Δ_max怎么取?我的经验是:做一次扫频实验,看实际响应和模型预测的偏差有多大,取包络线的最大值。

避坑指南:我曾经在某个项目里把Δ_max取得太小,结果观测器估计不准,控制器补偿过头,反而把系统搞得不稳定。记住:宁可保守,不要激进。Δ_max取大一点,鲁棒性会更好,代价只是性能稍微下降。

4.5 外部扰动建模——风是最大的敌人

对于多旋翼来说,外部扰动主要就是风。我一般把风扰动分成两部分:

  1. 常值风:稳态的、方向固定的风。比如海边的海风。
  2. 阵风:随时间变化的、有随机性的风。比如楼宇间的湍流。

常值风好处理,用积分项就能消除。阵风就麻烦多了。我常用的阵风模型是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 知识体系结构图

下面这张图是我自己画的,把整个不确定性建模的框架串起来了。你看一眼就能明白各个模块的关系:

不确定性统一建模框架 参数不确定性 未建模动态 外部扰动 集总扰动 d_total 扰动观测器 (ESO/DOB) 前馈补偿 + 鲁棒反馈控制 图:不确定性统一建模与补偿流程

你看,从三个源头出发,汇聚成集总扰动,然后通过观测器估计,最后用前馈+反馈的方式补偿掉。这个流程我用了好多年,在多个机型上验证过,效果都很稳定。

4.8 小结

这一章我们聊了不确定性建模的三个源头,以及怎么把它们统一成一个框架。说白了就是:别管扰动从哪来,都当成一个总扰动来处理。这个思路简单、实用,而且数学上很干净。

下一章我们会讲怎么设计扰动观测器,以及观测器的带宽怎么选。嗯,到时候我会分享一个我踩过的坑——观测器带宽设太高会出什么问题。


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