主要内容

质量弹簧系统的增益调度隐式和显式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”))

另请参阅

|

相关的话题