这个例子展示了如何使用显式模型预测控制不稳定的飞机饱和作动器。
有关使用传统MPC控制器控制同一工厂的示例,请参见极不稳定的飞机.
飞机线性开环动力学模型的状态空间矩阵如下:
A = [-0.0151 -60.5651 0 -32.174;-0.0001 -1.3411 0.9929 0;0.00018 43.2541 -0.86939 0;0 0 1 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];
创建工厂,并指定初始状态为零。
工厂= ss (A, B, C, D);x0 = 0 (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;负]、[-100;负)},“马克斯”,{[0.5;正]、[正]100;},“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(植物、t、p、m,重量、MV, OV);
显式MPC执行传统MPC控制器定义的MPC控制律的等效显式分段仿射。为了从传统MPC控制器生成显式MPC控制器,必须为每个控制器状态、参考信号、操纵变量和测量扰动指定范围。这样就保证了多参数二次规划问题是在这些范围定义的参数空间中求解的。
获取用于初始化的范围结构
要获得可以为每个参数指定范围的范围结构,请使用generateExplicitRange
命令。
范围= 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.ManipulatedVariable.Min = [MV (1) .Min;MV(2)。分钟]- 1;range.ManipulatedVariable.Max = [MV (1) .Max;MV(2)。马克斯]+ 1;
构造显式MPC控制器
使用generateExplicitMPC
命令获取带有前面指定的参数范围的显式MPC控制器。
mpcobjExplicit = generateExplicitMPC(mpcobj, range);显示器(mpcobjExplicit)
发现/未开拓的地区:476/0明确MPC控制器 --------------------------------------------- 控制器样品时间:0.05(秒)多面区域:476数量的参数:10是解决方案简化:没有状态估计:默认卡尔曼增益 --------------------------------------------- “mpcobjExplicit类型。为原始的隐式MPC设计。“mpcobjExplicit类型。'的有效参数范围。“mpcobjExplicit类型。OptimizationOptions'用于多参数QP计算的选项。“mpcobjExplicit类型。piecewiseaffinsolution '的区域和增益在每个解决方案。
为了连接相应增益相同且并集为凸集的区域对,使用简化
命令“准确”
方法。这种做法可以在不牺牲性能的情况下减少显式MPC控制器的内存占用。
mpcobjExplicitSimplified =简化(mpcobjExplicit,“准确”);显示器(mpcobjExplicitSimplified)
区域分析:465/465明确MPC控制器 --------------------------------------------- 控制器样品时间:0.05(秒)多面区域:465数量的参数:10是解决方案简化:是的状态估计:默认卡尔曼增益 --------------------------------------------- “mpcobjExplicitSimplified类型。为原始的隐式MPC设计。“mpcobjExplicitSimplified类型。'的有效参数范围。“mpcobjExplicitSimplified类型。OptimizationOptions'用于多参数QP计算的选项。“mpcobjExplicitSimplified类型。piecewiseaffinsolution '的区域和增益在每个解决方案。
减少了分段仿射区域的数量。
你可以回顾任何由显式MPC控制律定义的分段仿射划分的二维部分。
获取用于初始化的绘图参数结构
要获得可以指定要绘制哪个2-D区域的参数结构,请使用generatePlotParameters
函数。
params = generatePlotParameters (mpcobjExplicitSimplified);
为2-D图指定参数
在本例中,绘制俯仰角(第4个状态变量)与它的参考值(第2个参考信号)。所有其他参数必须固定在其各自范围内的值。
修正其他状态变量。
params.State.Index = [1 2 3 5 6];params.State.Value = [0 0 0 0];
固定其他参考信号。
params.Reference.Index = 1;params.Reference.Value = 0;
解决操纵变量。
params.ManipulatedVariable.Index = [1 2];params.ManipulatedVariable.Value = [0 0];
绘制2-D区域
使用plotSection
命令绘制前面定义的2-D部分。
plotSection (mpcobjExplicitSimplified params);轴([-10 10 -10 10])螺旋角(x_4)”) ylabel ('节距角参考(r_2)')
要运行此示例,需要Simulink®。万博1manbetx
如果~ mpcchecktoolboxinstalled (“万博1manbetx模型”) disp (运万博1manbetx行这个示例需要Simulink(R)。)返回结束
在Simulink中对线性被控对象模型进行闭环控制仿真。万博1manbetx要这样做,对于MPC控制器块,设置明确的MPC控制器财产mpcobjExplicitSimplified
.
mdl =“empc_aircraft”;open_system (mdl) sim (mdl)
闭环响应与设计的传统MPC控制器相同极不稳定的飞机.
[1] P. Kapasouris, M. Athans,和G. Stein,“具有饱和驱动器的不稳定装置的反馈控制系统的设计”,Proc, IFAC计算机协会。非线性控制系统设计,佩加蒙出版社,第302—307页,1990
[2] A. Bemporad, A. Casavola,和E. Mosca,“通过预测参考管理约束线性系统的非线性控制”,IEEE®反式。自动控制AC-42卷,编号3,页340-349,1997。
bdclose (mdl)