主要内容

小车倒立摆增益控制的MPC控制

本例使用增益调度模型预测控制器控制推车上的倒立摆。

摆/车总成

本例中的设备是以下推车/摆组件,其中x推车位置和θ是摆角。

这个系统是通过施加一个可变力来控制的F在手推车上。当移动推车到新的位置或当脉冲扰动推动钟摆向前时,控制器需要保持钟摆直立dF应用于倒立摆的上端。除非另有说明,单位均为MKS系统。

在Simulink中使用常用的模块对该工厂进行建模金宝app。

mdlPlant =“mpc_pendcartPlant”;load_system mdlPlant open_system ([mdlPlant'/摆车系统'),“力”

控制目标

假设推车/摆组件的初始条件如下:

  • 马车停在x0

  • 倒立摆在直立位置静止不动θ0

控制目标为:

  • 小车可以移动到一个新的位置之间-15年而且15度与阶跃设定值变化。

  • 当跟踪这样的设定值变化时,上升时间应该小于4秒(对于性能而言),超调应该小于5百分比(健壮性)。

  • 当一个量级的脉冲扰动2应用于摆锤时,小车应以最大位移1.摆也应恢复到直立位置,峰值角位移为15度(0.26弧度)。

对于倒立摆来说,直立位置是一个不稳定的平衡,这使得控制任务更具挑战性。

增益计划MPC的选择

小车上倒立摆的控制,一个MPC控制器就能将推车移动到-10到10之间的新位置。但是,如果将步长设定值更改为15,则在转换过程中钟摆无法恢复其直立位置。

为了在相同的上升时间内达到更长的距离,控制器在开始时对推车施加更大的力。结果,钟摆从其直立位置偏移了一个较大的角度,例如60度。在这样的角度下,植物动态与获得的LTI预测模型有显著差异θ0.结果,对植物行为的预测误差超过了内置MPC鲁棒性所能处理的范围,控制器无法正常执行。

避免钟摆下降的一个简单的解决方法是通过添加软输出约束来限制钟摆位移θ降低ECR权重(从默认值1e5到100),以进一步软化输出约束。

mpcobj.OV(2)。Min = -pi/2;mpcobj.OV(2)。Max = pi/2;mpcobj.Weights.ECR = 100;

然而,有了这些新的控制器设置,就不可能在要求的上升时间内达到更长的距离。换句话说,为了避免违反软输出约束,牺牲了控制器的性能。

为了将推车移动到-15到15之间的新位置,同时保持相同的上升时间,控制器需要在不同角度拥有更准确的模型,以便控制器可以使用它们进行更好的预测。增益调度MPC允许您通过在不同的工作点设计多个MPC控制器并在运行时在它们之间切换来解决非线性控制问题。

控制结构

在这个例子中,使用增益调度MPC控制器:

  • 一个被操纵的变量:可变力F

  • 两个测量输出:推车位置x和摆角θ

  • 一种未测量的干扰:脉冲干扰dF

mdlMPC =“mpc_pendcartGSMPC”;open_system (mdlMPC)

在每个控制间隔,一维查找表块接收输入的测量值θ,并选择特定控制器的指标(在候选MPC控制器中),该控制器是为其中的一个工作点设计的θ更接近观测到的那个。选定的控制器然后为当前观察到的工厂输出计算被操纵变量的最优值。

尽管推车速度x_dot和钟摆角速度theta_dot可从工厂模型中获得,为了使设计案例更加真实,它们被排除在MPC测量之外。

当推车位置设定值变化时(步长输入),摆角设定值是恒定的(0=直立姿势)。

线性植物模型

由于MPC控制器需要线性时不变(LTI)植物模型进行预测,在三个不同的工作点线性化Simulink植物模型。金宝app

指定线性化输入和输出点

io(1) = linio([mdlPlant .' / dF '), 1“openinput”);io(2) = linio([mdlPlant .“楼”), 1“openinput”);io(3) = linio([mdlPlant .'/摆车系统'), 1“openoutput”);io(4) = linio([mdlPlant .'/摆车系统'), 3,“openoutput”);

创建以下三个操作点的规格,其中推车和摆都是静止的:

  • 摆在80度,指向右(θπ/ 4 * 9

  • 摆正(θ0

  • 摆在80度,指向左边(θπ/ 4 * 9)请注意,第一个和最后一个工作点不是平衡条件,因此状态的时间导数不一定为零。

角度= [-4*pi/9 0 4*pi/9];ct = 1:长度(角度)

创建工作点规范。

opspec(ct) = operspec(mdlPlant);

第一种状态是推车位置x

opspec (ct) .States(1)。已知=真实;opspec (ct) .States(1)。X = 0;

第二种状态是推车速度x_dot(如果点不是稳态,则不为零)。

opspec (ct) .States(2)。SteadyState = false;

第三个状态是摆角θ

opspec (ct) .States(3)。已知=真实;opspec (ct) .States(3)。X =角度(ct);

第四个状态是角速度theta_dot(如果点不是稳态,则不为零)。

opspec (ct) .States(4)。SteadyState = false;
结束

使用这些规格计算工作点。

选项= findopOptions(“DisplayReport”、假);[op,opresult] = findop(mdlPlant,opspec,options);

得到指定工作点的线性工厂模型。

plants =线性化(mdlPlant,op,io);
bdclose (mdlPlant)

多重MPC设计

在每个工作点设计一个MPC控制器,并建立相应的线性工厂模型。

状态= mpcverbosity(“关闭”);ct = 1:长度(角度)

获取单个植物模型并设置信号名称。

Plant = plants(:,:,ct);工厂。在putName = {“dF”“F”};工厂。OutputName = {“x”“θ”};

植物有两个输入,dF而且F,和两个输出,x而且θ.在这个例子中,dF指定为MPC控制器用于预测的不可测扰动。设置植物信号类型。

植物= setmpcsignals(植物,“ud”, 1“mv”2);

为了控制一个不稳定的设备,控制器采样时间不能太大(抗干扰能力差)或太小(计算负荷过大)。类似地,预测范围不能太长(植物不稳定模式将占主导地位)或太短(约束违反将不可预见)。本例中使用以下参数:

Ts = 0.01;预测地平线= 50;ControlHorizon = 5;mpcobj = mpc(plant,Ts,PredictionHorizon,ControlHorizon);

根据工作点指定标称输入和输出值。

mpcobj.Model.Nominal.Y = [0;opresult(ct).States(3).x];mpcobj.Model.Nominal.X = [0;0;opresult(ct).States(3).x;0];mpcobj.Model.Nominal.DX = [0;opresult(ct).States(2).dx;0;opresult(ct).States(4).dx];

我们可以对推车施加多大的力是有限制的,这被指定为对操纵变量的硬约束F

mpcobj.MV.Min = -200;mpcobj.MV.Max = 200;

在设计权重之前,衡量植物的投入和产出是一个很好的做法。在这种情况下,由于被操纵变量的范围比工厂输出的范围大两个数量级,将输入MV缩放100。

mpcobj.MV.ScaleFactor = 100;

为了提高控制器的鲁棒性,增加对MV变化率的权重0.11

mpcobj.Weights.MVRate = 1;

为了达到平衡的性能,调整工厂产出的权重。第一个权重与推车位置相关x第二个权重与角度有关θ

mpcobo . weights . ov = [1.2 1];

为了实现更积极的干扰抑制,通过将默认扰动模型增益乘以一个因子来增加状态估计器增益10

更新输入扰动模型。

扰动模型= getindist(mpcobj);setindist (mpcobj“模型”, disturbance_model * 10);

更新输出扰动模型。

getoutdist(mpcobj);setoutdist (mpcobj“模型”, disturbance_model * 10);

将MPC控制器保存到MATLAB工作区。

assignin (“基地”, (“货币政策委员会”num2str (ct)], mpcobj);
结束mpcverbosity(状态);

闭环仿真

通过Simulink中的闭环仿真验证MPC设计。金宝app

open_system ([mdlMPC/范围的]) sim (mdlMPC)
——>转换模型到离散时间。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。——>转换模型到离散时间。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。——>转换模型到离散时间。——>”模式。Noise" property is empty. Assuming white noise on each measured output. -->Converting model to discrete time. -->The "Model.Noise" property is empty. Assuming white noise on each measured output.

在非线性仿真中,成功地实现了所有的控制目标。

关闭Simu金宝applink模型。

bdclose (mdlMPC)

另请参阅

相关的话题