质量弹簧系统的增益调度隐式和显式MPC控制
这个例子展示了如何使用多个MPC控制器块和多个显式MPC控制器块来实现非线性工厂的增益计划MPC控制。
系统描述
这个系统是由两个可能发生碰撞的质量组成的M1
而且平方米
分别连接到两个弹簧k1和k2。假设碰撞完全是非弹性的。质量M1被一个力F拉动,这是一个被操纵的变量。目标是使质量M1的位置y1跟踪一个给定的参考r。
动力学是双重的:当质量分离时,M1
自由地移动。否则,M1
而且平方米
一起移动。我们假设只有M1
位置和接触传感器可用于反馈。后者用于触发MPC控制器的切换。注意质量的位置和速度平方米
不能直接控制。除非另有说明,单位为MKS。
/ - \ k1 | | F <——| M1 |----/\/\/\-------------[|| 墙 || | |---/ || || k2 \-/ /----\ || 墙 ||]--/\/\/\-------------------| 平方米 | || || \----/ || || || ---- yeq2 ------------------ y1, y2 ---------------- yeq1——> y轴
该模型是[1]中提出的模型的简化版本。
模型参数
M1 = 1;%质量#1M2 = 5;%质量#2K1 = 1;%弹簧#1常数K2 = 0.1;%弹簧#2不变B1 = 0.3;%弹簧1号的摩擦系数B2 = 0.8;% 2号弹簧摩擦系数Yeq1 = 10;%弹簧1号的壁面安装位置Yeq2 = -10;%弹簧2号的壁面安装位置
工厂模式
这个例子的状态空间植物模型有以下输入和输出信号:
状态:质量的位置和速度
M1
操纵变量:拉力
F
测量扰动:恒定值
1
哪个能将弹簧力校准到正确的值测量输出:质量位置
M1
的状态空间模型M1
当群众没有接触时。
A1 = [0 1;-k1/M1 -b1/M1];B1 = [0 0;-1/M1 k1*yeq1/M1];C1 = [10 0];D1 = [0 0];sys1 = ss(A1,B1,C1,D1);Sys1 = setmpcsignals(Sys1,“医学博士”2);
——>假设未指定的输入信号是被操纵的变量。
定义两个质量接触时的状态空间模型。
A2 = [0 1;-(k1+k2)/(M1+M2) -(b1+b2)/(M1+M2)];B2 = [0 0;-1/(M1+M2) (k1*yeq1+k2*yeq2)/(M1+M2)];C2 = [10 0];D2 = [0 0];sys2 = ss(A2,B2,C2,D2);Sys2 = setmpcsignals(Sys2,“医学博士”2);
——>假设未指定的输入信号是被操纵的变量。
MPC控制器设计
指定控制器采样时间Ts
,预测层p
,控制视界米
.
Ts = 0.2;P = 20;M = 1;
设计了第一个MPC控制器,适用于大批量的情况M1
脱离了平方米
.
MPC1 = mpc(sys1,Ts,p,m);MPC1.Weights。Ov = 1;
- - - >“权重。属性为空。假设默认值为0.00000。- - - >“权重。属性为空。假设默认为0.10000。- - - >“权重。OutputVariables属性为空。假设默认值为1.00000。
在被操作的变量上指定约束。
MPC1。MV = struct(“最小值”,0,“马克斯”30岁的“杀鼠灵”, -10,“RateMax”10);
设计了第二种MPC控制器M1
而且平方米
在一起。
MPC2 = mpc(sys2,Ts,p,m);MPC2.Weights。Ov = 1;
- - - >“权重。属性为空。假设默认值为0.00000。- - - >“权重。属性为空。假设默认为0.10000。- - - >“权重。OutputVariables属性为空。假设默认值为1.00000。
在被操作的变量上指定约束。
MPC2。MV = struct(“最小值”,0,“马克斯”30岁的“杀鼠灵”, -10,“RateMax”10);
在Simulink®模拟增益计划MPC金宝app
模拟增益计划MPC控制使用多个MPC控制器块,它之间切换MPC1
而且MPC2
.打开并配置模型。
Y1initial = 0;M1的初始位置Y2initial = 10;M2的初始位置mdl =“mpc_switching”;open_system (mdl)如果动画被关闭,关闭动画系统如果存在(“animationmpc_switchoff”,“var”animationmpc_switchoff close_system([mdl .' /动画')明确animationmpc_switchoff结束
模式选择块输出一个模式
根据两个质量的相对位置和加速度,选择正确的系统动力学(质量M2或脱离或啮合)的信号。multi MPC控制器块使用MPC选择器
信号,它取决于相对质量位置,以参数形式在两个控制器之间切换。
模拟模型。
open_system ([mdl' /信号') sim(mdl) MPC1saved = MPC1;MPC2saved = MPC2;
——>转换模型到离散时间。假设添加到测量输出通道#1的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。——>转换模型到离散时间。假设添加到测量输出通道#1的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。 -->Converting model to discrete time. -->Assuming output disturbance added to measured output channel #1 is integrated white noise. -->The "Model.Noise" property is empty. Assuming white noise on each measured output.
使用两个控制器在所有条件下都能提供令人满意的性能。
重复模拟使用MPC1
只有
重复模拟,假设质量从未接触;也就是说,只使用控制器MPC1
.
MPC1 = MPC1saved;MPC2 = MPC1saved;sim (mdl)
在这种情况下,只要两个质量连接,性能就会下降。
重复模拟使用MPC2
只有
假设质量始终处于接触状态,重复模拟;也就是说,只使用控制器MPC2
.
MPC1 = MPC2saved;MPC2 = MPC2saved;sim (mdl)
在这种情况下,当质量分离时,性能下降,导致控制器施加过多的力。
bdclose (mdl);关闭(findobj (“标签”,“mpc_switching_demo”));
设计显式MPC控制器
为了减少在线计算工作量,您可以为每个操作条件创建一个显式MPC控制器,并使用Multiple explicit MPC Controllers块实现增益调度的显式MPC控制。要创建显式MPC控制器,首先定义控制器状态、输入信号和参考信号的工作范围。
为了得到控制器输入和输出扰动模型,使用getindist
而且getoutdist
,分别。输入扰动模型不存在,而输出扰动模型只有一个状态。
大小(getindist (MPC1saved))大小(getoutdist (MPC1saved))
具有0输出、0输入和0状态的状态空间模型。具有1个输出、1个输入和1个状态的状态空间模型。
要显示控制器的初始状态,使用mpcstate
.
mpcstate (MPC1saved)
MPCSTATE对象与字段Plant:[0 0]扰动:0噪声:[1x0 double] LastMove: 0协方差:[3x3 double]
使用相应的传统控制器创建显式MPC范围对象,MPC1
.
range = generateExplicitRange(MPC1saved);
指定控制器状态的范围。这两个MPC1
而且MPC2
包含以下状态:
质量的位置和速度
M1
积分器来自默认的输出扰动模型
range.State.Min(:) = [-10;-8;-3];range.State.Max(:) = [10;8;3];
如果可能的话,利用你对植物的了解来定义状态范围。当状态与物理参数不对应时,设置状态变量的范围有时很困难。在这种情况下,建议使用典型的参考信号和扰动信号(包括模型不匹配)进行多次开环植物模拟,以收集反映状态范围的数据。
请注意,如果在运行时,这些自变量中的一个超出了它的范围,控制器将返回一个错误状态,并将被操作的变量设置为它们的最后值。因此,不要低估这些范围是很重要的。
对于这个系统,您可以激活可选选项est.state
输出多个MPC控制器块,并使用范围查看估计的状态。在模拟控制器响应时,使用覆盖预期工作范围的参考信号。
定义参考信号的范围。选择的参考范围小于M1
位置范围。
range.Reference.Min = -8;range.Reference.Max = 8;
使用定义的MV约束指定被操作的变量范围。
range.ManipulatedVariable.Min = 0;range.ManipulatedVariable.Max = 30;
定义测量扰动信号的范围。由于测量的扰动是恒定的,在恒定值周围指定一个小范围,1
.
range. measured扰动。min = 0.9;range. measureddisturbed . max = 1.1;
创建一个显式的MPC控制器,对应于MPC1
使用指定的范围对象。
expMPC1 = generateExplicitMPC(MPC1saved,range);
已发现/未开发区域:4/ 0
创建一个显式的MPC控制器,对应于MPC2
.自MPC1
而且MPC2
在相同的状态和输入范围上进行操作,并且具有相同的约束,则可以使用相同的范围对象。
expMPC2 = generateExplicitMPC(MPC2saved,range);
已发现/未开发地区:5/ 0
一般情况下,不同控制器的显式MPC范围可能不匹配。例如,控制器可能具有不同的约束或状态范围。在这种情况下,为每个控制器创建一个单独的显式MPC范围对象。
验证显式MPC控制器
在实现增益调度的显式MPC之前,验证每个显式MPC控制器的性能是一个很好的实践。例如,比较的性能MPC1
而且expMPC1
,模拟各控制器的闭环响应sim卡
.
R = [0 (30,1);5 * 1 (160 1);5 * 1 (160 1)];[Yimp,Timp,Uimp] = sim(MPC1saved,350,r,1);[Yexp,Texp,Uexp] = sim(expMPC1,350,r,1);
——>转换模型到离散时间。假设添加到测量输出通道#1的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。
比较两个控制器的设备输出和操纵变量序列。
图subplot(2,1,1) plot(Timp,Yimp,“b -”Texp Yexp,“r——”网格)在包含(“时间(s)”) ylabel (“输出”)标题(“显式MPC验证”)传说(“隐式政策委员会”,“明确的政策委员会”) subplot(2,1,2) plot(Timp,Uimp,“b -”Texp单边递减,“r——”网格)在ylabel (“MV”)包含(“时间(s)”)
隐式控制器和显式控制器的闭环响应和操纵变量序列匹配。类似地,您可以验证的性能expMPC2
相对于MPC2
.
如果隐式控制器和显式控制器的响应不匹配,请调整显式MPC范围,并创建新的显式MPC控制器。
模拟增益计划显式MPC
要实现增益调度的显式MPC控制,将“Multiple MPC Controllers”块替换为“Multiple explicit MPC Controllers”块。
expModel =“mpc_switching_explicit”;open_system (expModel)
运行模拟。
sim (expModel)
要查看模拟结果,请打开信号范围。
open_system ([expModel' /信号'])
增益调度显式MPC控制器提供与增益调度隐式MPC控制器相同的性能。
参考文献
[1] a . Bemporad, S. Di Cairano, I. V. Kolmanovsky和D. Hrovat,“汽车应用多体磁致动器的混合建模和控制”,in第46届IEEE决策与控制大会, 2007年,洛杉矶新奥尔良。
bdclose (expModel)关闭(findobj (“标签”,“mpc_switching_demo”))