本例说明如何控制三角翼飞机在机翼摇晃时的横滚和横滚速率。在本例中,系统模型是未知的。因此,需要使用模型参考自适应控制 (MRAC) 使控制系统与理想参考模型相匹配。飞机在 Simulink? 中建模,MRAC 控制器使用 Simulink Control Design? 软件提供的模型参考自适应控制模块实现。
翼摇是三角翼飞机在低速高攻角飞行时出现的一种现象。飞机会出现不期望的滚转振荡,使飞行员更难控制飞机。MRAC 控制器的目标是消除不期望的滚转振荡。然后,您可以设计一个基线控制器来实现所需的参考行为。
以下方程定义了翼摇模型的动力学特性。
这里
对于这个不确定的非线性系统,您的目标是设计一个控制器,使系统能够跟踪以下二阶参考模型。
?
这里
为滚动动力学指定以下简化的二阶标称模型。
A = [0 1; 0 0]; % Second integrator model
B = [0;1]; % Nominal control effective matrix
?将参考模型定义为之前定义的稳定二阶系统。控制器调整其不确定性模型,以实现与该模型相同的二阶行为。
Am = [0 1; -4 -2]; % Second intergrator model
Bm = [0;4]; % Nominal control effective matrix
指定标称模型和参考模型的初始条件。
theta_0 = 0; % Initial roll angle (rad)
p0 = 0; % Initial roll rate (rad/s)
xm = [0;0]; % Initial condition of the reference plant model
MRAC 控制器的目标是实现跟踪误差 的渐近收敛。
MRAC 控制器的结构如下
?
这里
模型参考自适应控制模块调整自适应控制项,以实现所需的参考模型跟踪。您还可以选择调整反馈和前馈控制增益。不过在本例中,控制增益是静态的。
翼摇系统的静态反馈和前馈控制增益的计算满足以下模型匹配条件。
?
?指定计算出的控制器增益。
Kx = [-4 -2]; % Feedback gain
Kr = 4; % Feedforward gain
MRAC 控制器在线估计模型的不确定性,并生成自适应控制动作
?以消除不确定性,从而恢复基线控制器的标称系统。自适应控制项使用以下模型对系统不确定性进行建模。
此处
使用模型参考自适应控制模块,可以选择以下特征向量定义之一。
在本例中,您将配置控制器使用所有三种方法并比较结果。
定义模型估计学习率 gamma_w 和跟踪误差权重 Q。
gamma_w = 100; % Learning rate
Q = 1; % Tracking error weight
?指定径向基函数核的参数。一般来说,配置 RBF 中心时要考虑系统可能的状态空间和带宽,以使核之间有足够的重叠。
N = 10; % Number of RBF kernels
cen_max = 2; % Upper limit for kernel centers
cen_min = -2; % Lower limit for kernel centers
bandwidth = 25; % Kernel bandwidth
打开翼摇控制系统的 Simulink 模型,将系统状态配置为不确定性模型特征向量。
mdl = "wingrockStates";
open_system(mdl)
?
在该模型中
设置模拟持续时间并模拟模型。
Tf = 40; % Simulation duration (s)
sim(mdl);
?将飞机滚动结果与参考指令进行比较。
open_system(mdl + "/Roll")
控制器无法实现平滑的二阶瞬态响应。
将 MRAC 控制器估计的扰动模型与真实扰动信号进行比较。
open_system(mdl + "/Disturbance")
当使用状态作为扰动模型特征时,控制器估计的线性扰动模型并不能准确代表真实的非线性扰动。
打开配置为使用非线性 RBF 作为不确定性模型特征向量的翼岩控制系统 Simulink 模型。除控制器参数已更新外,该模型与之前的模型完全相同。
mdl = "wingrockSHL";
open_system(mdl)
?仿真模型。
sim(mdl);
查看由此产生的控制器性能。
open_system(mdl + "/Roll")
控制器可对参考指令的变化做出更平滑的二阶响应。
将使用径向基函数估计的扰动与真实扰动进行比较。
open_system(mdl + "/Disturbance")
非线性特征向量可使控制器更准确地估计真实的非线性干扰。
打开配置为使用 SHL 神经网络输出作为不确定性模型特征向量的翼岩控制系统 Simulink 模型。该模型与之前的模型完全相同,只是更新了控制器参数。
mdl = "wingrockSHL";
open_system(mdl)
仿真模型。
sim(mdl);
查看由此产生的控制器性能。
open_system(mdl + "/Roll")
控制器可对参考指令的变化做出平滑的二阶响应。
将使用 SHL 神经网络估算的扰动与真实扰动进行比较。
open_system(mdl + "/Disturbance")
与 RBF 特征向量相比,神经网络近似器计算出的非线性特征向量更接近真实干扰。神经网络参数的配置也更简单。
打开翼摇控制系统的 Simulink 模型,配置为使用外部生成的自定义不确定性模型特征向量。如果您知道干扰和不确定性模型的结构,就可以使用该选项。在本例中,特征模块生成的特征向量与外部干扰模块中使用的特征向量相匹配。
mdl = "wingrockCustom";
open_system(mdl)
仿真模型。?
sim(mdl);
查看由此产生的控制器性能。
open_system(mdl + "/Roll")
控制器可对参考指令的变化做出更平滑的二阶响应。
将使用自定义特征向量估计的干扰与真实干扰进行比较。
open_system(mdl + "/Disturbance")
不出所料,使用基于扰动行为先验知识的自定义特征向量可以生成更准确的真实扰动模型。