主要内容

小车上倒立摆的控制

本实例使用模型预测控制器(MPC)来控制小车上的倒立摆。

产品要求

这个例子需要Simulink®Control万博1manbetx Design™软件通过线性化非线性Simulink模型来定义MPC结构。

如果~ mpcchecktoolboxinstalled ('slcontrol') disp (“万博1manbetx需要Simulink控制设计来运行这个例子。”返回结束

摆/车总成

这个例子的工厂是下面的推车/摆总成,其中x推车的位置是和吗θ为摆角。

通过施加变量来控制该系统F在购物车。当小车移动到一个新的位置或当钟摆被冲量干扰向前推时,控制器需要保持钟摆直立dF施加在倒摆的上端。

该工厂以Simulink为模拟的常用块。万博1manbetx

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

控制目标

假设小车/摆总成的初始条件如下:

  • 马车停在原地不动x0

  • 倒立摆在直立的位置是静止的θ0

控制目标是:

  • 车可以移动到一个新的位置之间-10年10有一个步骤设置改变。

  • 当跟踪这样的设定值变化时,上升时间应小于4秒(为性能考虑),超调量应小于5百分比(适用于鲁棒性)。

  • 当脉冲扰动的大小为2,小车应返回到其原始位置,最大位移1.钟摆也应恢复到直立位置,最大角位移为15度(0.26弧度)。

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

控制结构

对于本例,使用单个MPC控制器:

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

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

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

mdlmpc =“mpc_pendcartImplicitMPC”;open_system (mdlMPC)

虽然车速度X_DOT.和摆角速度theta_dot是可从工厂模型,使设计情况更现实,他们被排除作为MPC测量。

当小车位置设定值变化时(阶跃输入),摆角设定值不变(0=直立位置)。

线性植物模型

由于MPC控制器需要用于预测的线性时间不变(LTI)工厂模型,因此在初始操作点处线性化Simulink工厂模型。万博1manbetx

指定线性化输入和输出点。

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”);

为工厂初始条件创建操作点规范。

opspec = operspec (mdlPlant);

第一种状态是购物车位置x已知初始状态为0。

opspec.States(1)。知道= true;opspec.States(1)。x = 0;

第三种状态是摆角θ已知初始状态为0。

opspec.States(3)。知道= true;opspec.States(3)。x = 0;

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

选择= findopOptions (“DisplayReport”、假);op = findop (mdlPlant、opspec选项);

获得指定工作点的线性对象模型。

工厂=线性化(op, mdlPlant io);工厂。InputName = {“dF”“F”};工厂。OutputName = {“x”“θ”};

检查线性化的植物的极点。

极(植物)
Ans = 0 -11.9115 -3.2138 5.1253

该装置有一个积分器和一个不稳定极点。

bdclose (mdlPlant)

MPC设计

植物有两个输入,dFF,和两个输出,xθ.在这个例子中,dF被指定为MPC控制器使用的未测量干扰,以便更好的干扰抑制。设置工厂信号类型。

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

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

t = 0.01;PredictionHorizon = 50;ControlHorizon = 5;mpcobj = mpc(植物、Ts、PredictionHorizon ControlHorizon);
- >“MPC”对象的“权重”属性为空。假设默认为0.00000。- >“权重”属性“MPC”对象的“权重”属性为空。假设默认为0.10000。- >“MPC”对象的“权重”属性为空。假设默认为1.0万。对于输出的输出Y1和零重量为Y2

在多大的力可以施加到小车上是有限制的,这被指定为操纵变量的硬约束F

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

在设计重量之前,按比例计算工厂的投入和产出是一个很好的做法。在这种情况下,由于被操纵变量的范围比被操作对象输出的范围大两个数量级,因此将输入的MV按比例缩放100.

mpcobj.MV.ScaleFactor = 100;

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

mpcobj.Weights.MVRate = 1;

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

mpcobj.Weights.OV = [1.2 1];

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

更新输入干扰模型。

disturbance_model = getindist (mpcobj);setindist (mpcobj“模型”, disturbance_model * 10);
——>模型转换为离散时间。——>”模式。“mpc”对象的干扰属性为空:假设未测输入干扰#1为综合白噪声。假设对测量的输出通道#1没有增加任何干扰。——>假设添加到测量输出通道2上的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

更新输出干扰模型。

disturbance_model = getoutdist (mpcobj);setoutdist (mpcobj“模型”, disturbance_model * 10);
——>模型转换为离散时间。假设对测量的输出通道#1没有增加任何干扰。——>假设添加到测量输出通道2上的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

闭环仿真

在Simulink中进行闭环仿真验证MPC设计。万博1manbetx

open_system ([mdlMPC/范围的]) sim (mdlMPC)
——>模型转换为离散时间。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

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

讨论

需要指出的是,所设计的MPC控制器有其局限性。例如,如果您将步骤设置更改增加为15时,钟摆在过渡过程中无法恢复其垂直位置。

为了在相同的上升时间内达到较长的距离,控制器在开始时对小车施加较大的力。结果,钟摆从它的直立位置被移出一个更大的角度,如60度。在这样的角度下,植物动态与在θ0.结果,对对象行为的预测误差超过了内置MPC鲁棒性所能处理的范围,控制器无法正常运行。

一个简单的解决方法是通过添加软输出约束来限制摆的位移θ减少约束软化时的ECR重量。

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

然而,使用这些新的控制器设置,它不再可能在所需的上升时间内达到更长的距离。换句话说,为了避免违背软输出约束,牺牲了控制器的性能。

为了在同一上升时间内达到更大的距离,控制器需要在不同角度上建立更精确的模型来提高预测精度。另一个例子在购物车上获得预定的MPC控制倒立的倒置演示了如何使用增益调度MPC来实现较长的距离。

关闭Simulink万博1manbetx模型。

bdclose (mdlMPC)

相关话题