主要内容

具有不稳定极点飞行器的显式MPC控制

这个例子展示了如何使用显式MPC控制一个不稳定的飞机与饱和执行器。

有关使用传统MPC控制器控制同一工厂的示例,请参见具有不稳定极点的飞机的MPC控制

定义飞机模型

下面的线性时不变模型是由一架飞机在高度3000英尺,速度为0.6马赫([1])时的纵向动力学线性化得到的。开环模型有以下状态空间矩阵:

A = [-0.0151 -60.5651 0 -32.174;-0.0001 -1.3411 0.9929 0;0.00018 43.2541 -0.86939 0;0 0 10 0];B = [-2.516 -13.136;-0.1689 - -0.2514;-17.251 - -1.5766;0 0];C = [0 1 0 0;0 0 0 1]; D = [0 0; 0 0];

线性模型的输入、状态和输出表示在非线性模型工作点与各自标称值的偏差。

这里的状态变量是:

  • 前进速度(ft/sec)

  • 攻角(度)

  • 俯仰速率(度/秒)

  • 俯仰角(度)

操纵变量为升力角和襟副翼角,单位为度。攻角和俯仰角是测量输出,需要进行调节。

创建工厂,并将初始状态指定为0。

plant = ss(A,B,C,D);X0 = 0 (4,1);

开环系统不稳定。

潮湿(植物)
极阻尼频率时间常数(rad/秒)(秒)-7.50e-03 + 5.56e-02i 1.34e-01 5.61e-02 1.33e+02 5.56e-02 5.61e-02 5.45e+00 -1.00e+00 5.45e+00 -1.83e-01 -7.66e+00 1.00e+00 7.66e+00 1.30e-01

MPC控制器设计

为了获得显式MPC控制器,必须首先设计一个能够实现控制目标的传统(隐式)模型预测控制器。

MV约束

两个被操纵的变量都被限制在+/- 25度之间。使用比例因子来促进MPC调优。比例因子的典型选择是操作范围的上限/下限。

MV = struct(“最小值”{-25、-25},“马克斯”25},{25日,“ScaleFactor”, {50,50});

OV尺度因子

指定工厂产出的比例因子。

OV = struct(“ScaleFactor”, {60 60});

权重

控制任务是在避免由于输入饱和引起的不稳定的情况下,对分段常数参考值实现零偏移。由于在MPC控制器中MV和OV变量都已缩放,因此MPC权重是无量纲的,并应用于缩放后的MV和OV值。

对于这个例子,通过指定一个比俯仰角更大的权重来强调攻击角的跟踪。

权重= struct(“MV”[0 0],“MVRate”(0.1 - 0.1),机汇的, 200年[10]);

构造传统MPC控制器

使用指定的植物模型、0.05秒(20 Hz)的采样时间、10步的预测范围、2步的控制范围以及先前指定的权重、约束和比例因子创建MPC控制器。

mpcobj = mpc(plant,0.05,10,2,Weights,MV,OV);

计算闭环直流增益矩阵

计算闭环的稳态输出灵敏度。零值意味着被测量的设备输出可以跟踪所需的输出参考设定值。

cloffset (mpcobj)
——>转换模型到离散时间。假设添加到测量输出通道#1的输出扰动是集成白噪声。假设添加到测量输出通道#2的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。Ans = 1.0e-11 * 0.1085 -0.0058 0.1224 -0.0355

明确的政策委员会

可以证明,约束将MPC控制器的状态空间划分为许多多面体区域,这样在每个区域内,MPC控制律是一个特定的仿射状态和参考函数,其系数取决于区域。显式MPC离线计算所有这些区域及其相对控制律。在线时,控制器只需选择并应用相对于当前区域的预计算解,因此它不必在每个控制步骤中求解约束二次优化问题。有关显式MPC的更多信息,请参见明确的政策委员会

生成显式MPC控制器

显式MPC执行传统MPC控制器定义的MPC控制律的等效显式分段仿射版本。要从传统的MPC控制器生成显式MPC控制器,必须为每个控制器状态、参考信号、操纵变量和测量扰动指定范围。这样做可以确保二次规划问题在由这些范围定义的空间中得到解决。如果在运行时,这些自变量中的一个超出了它的范围,控制器返回一个错误状态,并将被操作的变量设置为它们的最后值。因此,不要低估这些范围是很重要的。

要生成合适的范围,首先要获得控制器状态的一些信息。

显示输入和输出扰动模型的大小

为了得到控制器输入和输出扰动模型,使用getindist而且getoutdist,分别。

大小(getindist (mpcobj))大小(getoutdist (mpcobj))
具有0输出、0输入和0状态的状态空间模型。具有2个输出、2个输入和2个状态的状态空间模型。

输入扰动模型不存在,而输出扰动模型有两种状态。

显示控制器初始状态

要显示控制器的初始状态,使用mpcstate

mpcstate (mpcobj)
MPCSTATE对象与字段Plant:[0 0 0 0 0]扰动:[0 0]噪声:[1x0 double] LastMove:[0 0]协方差:[6x6 double]

正如预期的那样,Kalman估计器使用的植物模型有4个状态,扰动模型又增加了2个状态,需要2个状态来保存被操纵变量的最后一个值,总共8个状态。

获取一个用于初始化的范围结构

若要创建可以为每个状态、引用和操作变量指定范围的范围结构,请使用generateExplicitRange

range = generateExplicitRange(mpcobj);

指定控制器状态、引用和操纵变量的范围

MPC控制器状态按顺序包括来自植物模型、扰动模型、噪声模型和被操纵变量的最后一个值的状态。当状态与物理参数不对应时,设置状态变量的范围有时很困难。在这种情况下,建议使用典型的参考信号和扰动信号(包括模型不匹配)进行多次开环植物模拟,以收集反映状态范围的数据。

对于本例,如下所示,高估状态变量的实际变化范围。

range.State.Min(:) = [-600 -90 -50 -90 -90 -90];range.State.Max(:) = [1600 90 50 90 90 90 90];

指定参考信号的范围

通常你知道在工厂的标称工作点上使用的参考信号的实际范围。用于生成显式MPC控制器的范围必须至少与实际范围一样大。

range.Reference.Min = [-1;-11];range.Reference.Max = [1;11];

指定操作变量的范围

如果操纵变量受到约束,用于生成显式MPC控制器的范围必须至少与这些限制一样大。

range.ManipulatedVariable.Min = [MV(1).Min;MV(2)。Min] - 1;range.ManipulatedVariable.Max = [MV(1).Max;MV(2)。Max] + 1;

构造显式MPC控制器

使用generateExplicitMPC命令获取前面指定的参数范围的显式MPC控制器。

empcobj = generateExplicitMPC(mpcobj, range);显示器(empcobj)
发现/未开拓的地区:81/0明确MPC控制器  --------------------------------------------- 控制器样品时间:0.05(秒)多面区域:81数量的参数:10是解决方案简化:没有状态估计:默认卡尔曼增益  --------------------------------------------- “empcobj类型。MPC’的原始隐式MPC设计。“empcobj类型。Range'表示有效的参数范围。“empcobj类型。OptimizationOptions'用于多参数QP计算的选项。“empcobj类型。pieceaffinresolution '用于每个解决方案中的区域和增益。

要连接对应增益相同且并集为凸集的区域对,请使用简化命令使用“准确”方法。这种做法可以在不牺牲性能的情况下减少显式MPC控制器的内存占用。

empcobj simplified =简化(empcobj,“准确”);显示器(empcobjSimplified)
区域分析:77/77明确MPC控制器  --------------------------------------------- 控制器样品时间:0.05(秒)多面区域:77数量的参数:10是解决方案简化:是的状态估计:默认卡尔曼增益  --------------------------------------------- “empcobjSimplified类型。MPC’的原始隐式MPC设计。“empcobjSimplified类型。Range'表示有效的参数范围。“empcobjSimplified类型。OptimizationOptions'用于多参数QP计算的选项。“empcobjSimplified类型。pieceaffinresolution '用于每个解决方案中的区域和增益。

减少了分段仿射区域的数量。

沿给定截面分段仿射划分

您可以绘制控制器状态空间的2D部分,并查看该部分中的区域。对于本例,绘制由俯仰角(第4个状态变量)与它的参考信号(第2个参考信号)定义的状态空间的2D部分。为此,您必须首先创建一个图结构,在其中将所有其他状态(和参考信号)固定为各自范围内的特定值。

为初始化创建一个plot参数结构

若要创建参数结构,可以指定随后绘制哪个2-D部分,请使用generatePlotParameters函数。

plotpars = generatePlotParameters(empcobjSimplified);

*为2-D图指定参数

指定除第4个状态变量之外的所有状态变量的索引(这意味着允许第4个状态变量变化)。然后将固定状态变量的值指定为0。

plotpars.State.Index = [1 2 3 5 6];plotpars.State.Value = [0 0 0 0 0];

指定第一个参考信号的索引(因此允许第二个参考信号变化),并将其值固定为零。

plotpars.Reference.Index = 1;plotpars.Reference.Value = 0;

将两个被操纵的变量都修正为零。

plotpars.ManipulatedVariable.Index = [1 2];plotpars.ManipulatedVariable.Value = [0 0];

绘制二维剖面

使用plotSection命令绘制前面定义的2-D部分。

plotSection (empcobjSimplified plotpars);轴([-10 10 -10 10])俯仰角(x_4)) ylabel (俯仰角参考(r_2)

使用Simulink®进行模拟万博1manbetx

在Simulink中模拟线性植物模型的闭环控制。万博1manbetx要做到这一点,对于MPC控制器块,设置显式MPC控制器财产empcobjSimplified.对于本例,此属性已经设置。

mdl =“empc_aircraft”;open_system (mdl)

使用Simulink从命令行模拟系统万博1manbetxsim卡命令。

sim (mdl)

打开显示操纵变量和飞机输出响应的范围

open_system (“empc_aircraft / MV”) open_system (“empc_aircraft/攻角响应”) open_system ('empc_aircraft/俯仰角响应'

所设计的闭环响应与传统MPC控制器的特性相同具有不稳定极点的飞机的MPC控制

参考文献

[1] P. Kapasouris, M. Athans,和G. Stein,“带饱和执行器的不稳定装置反馈控制系统设计”,IFAC Symp非线性控制系统设计,佩加蒙出版社,第302—307页,1990年

[2] A. Bemporad, A. Casavola, E. Mosca,“基于预测参考管理的约束线性系统非线性控制”,IEEE®反式。自动控制, AC-42卷,no。3, pp. 340-349, 1997。

bdclose (mdl)

相关的话题