这个例子展示了如何使用显式模型预测控制来控制带有饱和执行器的不稳定飞机。
有关使用传统MPC控制器控制同一设备的示例,请参阅不稳定极点飞机的MPC控制.
飞机线性开环动力学模型的状态空间矩阵如下:
A=[-0.0151-60.5651-0-32.174;-0.0001-1.3411 0.9929 0;0.00018 43.2541-0.86939 0;0.01 0 0];B=[-2.516-13.136;-0.1689-0.2514;-17.251-1.5766;0];C=[0 1 0 0;0 0 0 1];D=[0;0];
创建工厂,并指定初始状态为零。
设备=ss(A,B,C,D);x0=零(4,1);
操纵变量为升降舵角和襟翼角。迎角和俯仰角为待调节的测量输出。
系统的开环响应是不稳定的。
极(植物)
Ans = -7.6636 + 0.0000i 5.4530 + 0.0000i -0.0075 + 0.0556i -0.0075 - 0.0556i
为了获得显式MPC控制器,必须首先设计一个能够实现控制目标的传统(隐式)模型预测控制器。
MV约束
两个操纵变量都限制在+/-25度之间。由于设备输入和输出具有不同的数量级,因此您还可以使用比例因子来促进MPC调整。比例系数的典型选择是上限/下限或工作范围。
MV=结构(“敏”{-25、-25},“马克斯”25},{25日,“ScaleFactor”,{50,50});
OV约束
两个电厂的输出都有限制,以限制第一个预测视界步骤的下冲。另外,指定输出的比例因子。
OV =结构(“敏”,{[-0.5;-Inf],-100;-Inf]},“马克斯”,{[0.5;Inf],[100;Inf]},“ScaleFactor”, {1200});
砝码
控制任务是为分段常数引用获得零偏移,同时避免由于输入饱和而造成的不稳定性。由于MV和OV变量在MPC控制器中已经缩放,MPC权值是无量纲的,并应用于缩放的MV和OV值。在本例中,使用相同的OV权值对两个输出进行相同的惩罚。
权重=结构(“MV”[0 0],“MVRate”(0.1 - 0.1),机汇的,[10 10]);
构造传统的MPC控制器
使用指定的工厂模型、采样时间和视界创建MPC控制器。
t = 0.05;%样品时间p = 10;%预测地平线m = 2;%控制地平线mpcobj=mpc(设备、Ts、p、m、重量、MV、OV);
显式MPC执行由传统MPC控制器定义的MPC控制律的等效显式分段仿射版本。要从传统MPC控制器生成显式MPC控制器,必须指定每个控制器状态、参考信号、操纵变量和测量干扰的范围。这样做可以确保多参数二次规划问题在这些范围定义的参数空间中得到解决。
获取用于初始化的范围结构
要获得可以为每个参数指定范围的范围结构,请使用生成ExplicitRange
指挥部。
范围=generateExplicitRange(mpcobj);
——>模型转换为离散时间。——>假设添加到测量输出通道#1的输出扰动为集成白噪声。——>假设添加到测量输出通道2上的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。
指定控制器状态的范围
MPC控制器的状态依次包括被控对象模型、扰动模型和噪声模型的状态。当状态与物理参数不对应时,设置状态变量的范围有时很困难。在这种情况下,为了收集反映状态范围的数据,建议使用典型参考信号和干扰信号进行多次开环仿真。
range.State.Min (,) = -10000;range.State.Max (,) = 10000;
指定参考信号的范围
通常你知道在电厂标称工作点使用的参考信号的实际范围。用于生成显式MPC控制器的范围必须至少与实际范围一样大。
range.Reference.Min =(1; -11年);range.Reference.Max = [11] 1;;
指定操纵变量的范围
如果操纵变量受到约束,用于生成显式MPC控制器的范围必须至少与这些限制一样大。
range.manufactedVariable.Min=[MV(1).Min;MV(2).Min]-1;range.manufactedVariable.Max=[MV(1).Max;MV(2).Max]+1;
构造显式MPC控制器
使用generateExplicitMPC
命令获取带有前面指定的参数范围的显式MPC控制器。
mpcobjExplicit = generateExplicitMPC(mpcobj, range);显示器(mpcobjExplicit)
发现/未探索的区域:483/0显式MPC控制器------------------------------------------控制器采样时间:0.05(秒)多面体区域:483个参数数量:10个是简化的解决方案:无状态估计:默认Kalman增益------------------------------------对于原始隐式MPC设计,键入“mpcobjExplicit.MPC”。对于参数的有效范围,键入“mpcobjExplicit.Range”。对于使用的选项,键入“mpcobjExplicit.OptimizationOptions”多参数QP计算中的d。键入“mpcobjExplicit.分段仿射解”用于区域和每个解中的增益。
要连接相应增益相同且并集为凸集的区域对,请使用简化
命令“准确”
方法。这种做法可以在不牺牲性能的情况下减少显式MPC控制器的内存占用。
mpcobjExplicitSimplified =简化(mpcobjExplicit,“准确”);显示(mpcobjExplicitSimplified)
区域分析:471/471明确MPC控制器 --------------------------------------------- 控制器样品时间:0.05(秒)多面区域:471数量的参数:10是解决方案简化:是的状态估计:默认卡尔曼增益 --------------------------------------------- “mpcobjExplicitSimplified类型。为原始的隐式MPC设计。“mpcobjExplicitSimplified类型。'的有效参数范围。“mpcobjExplicitSimplified类型。OptimizationOptions'用于多参数QP计算的选项。“mpcobjExplicitSimplified类型。piecewiseaffinsolution '的区域和增益在每个解决方案。
减少了分段仿射区域的数量。
你可以回顾任何由显式MPC控制律定义的分段仿射划分的二维部分。
获取用于初始化的绘图参数结构
要获得可以指定要绘制哪个2-D区域的参数结构,请使用generatePlotParameters
功能。
params = generatePlotParameters (mpcobjExplicitSimplified);
指定二维绘图的参数
在本例中,绘制俯仰角(第4个状态变量)与它的参考值(第2个参考信号)。所有其他参数必须固定在其各自范围内的值。
修正其他状态变量。
params.State.Index=[1 2 3 5 6];params.State.Value=[0 0];
固定其他参考信号。
params.Reference.Index=1;params.Reference.Value=0;
解决操纵变量。
params.manufactedVariable.Index=[12];params.manufactedVariable.Value=[0];
绘制2-D区域
使用plotSection
用于绘制先前定义的二维剖面的命令。
plotSection (mpcobjExplicitSimplified params);轴([-10 10 -10 10])螺旋角(x_4)”) ylabel ('节距角参考(r_2)')
要运行此示例,需要Simulink®。万博1manbetx
如果~mpcchecktoolbox已安装(“万博1manbetxsimulink”) disp ('万博1manbetx运行此示例需要Simulink(R)。')返回结束
在Simulink中模拟线性对象模型的闭环控制。为此,对于MPC控制器块,设置万博1manbetx明确的MPC控制器财产mpcobjExplicitSimplified
.
mdl=“empc_飞机”;开放式系统(mdl)sim卡(mdl)
闭环响应与设计的传统MPC控制器相同不稳定极点飞机的MPC控制.
[1] P.Kapasouris、M.Athans和G.Stein,“具有饱和执行器的不稳定设备的反馈控制系统设计”,Proc, IFAC计算机协会。非线性控制系统设计,佩加蒙出版社,第302-307页,1990年
[2] A. Bemporad, A. Casavola,和E. Mosca,“通过预测参考管理约束线性系统的非线性控制”,IEEE®Trans。自动控制AC-42卷,编号3,页340-349,1997。
bdclose (mdl)