小车上倒立摆的控制
本例使用模型预测控制器(MPC)来控制推车上的倒立摆。
产品要求
本例需要Simulink®Control D金宝appesign™软件通过线性化非线性Simulink模型来定义MPC结构。
如果~ mpcchecktoolboxinstalled (“slcontrol”) disp (“金宝app运行此示例需要Simulink Control Design。”)返回结束
摆/车总成
本例中的设备是以下推车/摆组件,其中x推车位置和θ是摆角。
这个系统是通过施加一个可变力来控制的F在手推车上。当移动推车到新的位置或当脉冲扰动推动钟摆向前时,控制器需要保持钟摆直立dF应用于倒立摆的上端。
在Simulink中使用常用的模块对该工厂进行建模金宝app。
mdlPlant =“mpc_pendcartPlant”;load_system mdlPlant open_system ([mdlPlant'/摆车系统'],“力”)
控制目标
假设推车/摆组件的初始条件如下:
马车停在x=
0
.
倒立摆在直立位置静止不动θ=
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植物模型。金宝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”);
为工厂初始条件创建工作点规格。
opspec = operspec(mdlPlant);
第一种状态是推车位置x,其初始状态已知为0。
opspec.States(1)。已知=真实;opspec.States(1)。X = 0;
第三个状态是摆角θ,其初始状态已知为0。
opspec.States(3)。已知=真实;opspec.States(3)。X = 0;
使用这些规格计算工作点。
选项= findopOptions(“DisplayReport”、假);op = findop(mdlPlant,opspec,options);
得到指定工作点的线性工厂模型。
plant = linearize(mdlPlant,op,io);工厂。InputName = {“dF”;“F”};工厂。OutputName = {“x”;“θ”};
检查线性化植物的极点。
极(植物)
Ans = 0 -11.9115 -3.2138 5.1253
该装置有一个积分器和一个不稳定杆。
bdclose (mdlPlant)
MPC设计
植物有两个输入,dF而且F,和两个输出,x而且θ.在这个例子中,dF指定为MPC控制器使用的不可测扰动,以更好地抑制扰动。设置植物信号类型。
植物= setmpcsignals(植物,“ud”, 1“mv”2);
为了控制一个不稳定的设备,控制器采样时间不能太大(抗干扰能力差)或太小(计算负荷过大)。类似地,预测范围不能太长(植物不稳定模式将占主导地位)或太短(约束违反将不可预见)。本例中使用以下参数:
Ts = 0.01;预测地平线= 50;ControlHorizon = 5;mpcobj = mpc(plant,Ts,PredictionHorizon,ControlHorizon);
- - - >“权重。属性为空。假设默认值为0.00000。- - - >“权重。属性为空。假设默认为0.10000。- - - >“权重。OutputVariables属性为空。假设默认值为1.00000。对于输出y1和输出y2的零权重
对于可以施加到推车上的力有一个限制,这被指定为对操纵变量的硬约束F.
mpcobj.MV.Min = -200;mpcobj.MV.Max = 200;
在设计权重之前,衡量植物的投入和产出是一个很好的做法。在这种情况下,由于被操纵变量的范围比工厂输出的范围大两个数量级,将输入MV按比例缩放One hundred.
.
mpcobj.MV.ScaleFactor = 100;
为了提高控制器的鲁棒性,增加对MV变化率的权重0.1
来1
.
mpcobj.Weights.MVRate = 1;
为了达到平衡的性能,调整工厂产出的权重。第一个权重与推车位置相关x第二个权重与角度有关θ.
mpcobo . weights . ov = [1.2 1];
为了实现更积极的干扰抑制,通过将默认扰动模型增益乘以一个因子来增加状态估计器增益10
.
更新输入扰动模型。
扰动模型= getindist(mpcobj);setindist (mpcobj“模型”, disturbance_model * 10);
——>转换模型到离散时间。——>”模式。“扰动”属性为空:假设未测量的输入扰动#1是集成白噪声。假设测量的输出通道1没有任何扰动。假设添加到测量输出通道#2的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。
更新输出扰动模型。
getoutdist(mpcobj);setoutdist (mpcobj“模型”, disturbance_model * 10);
——>转换模型到离散时间。假设测量的输出通道1没有任何扰动。假设添加到测量输出通道#2的输出扰动是集成白噪声。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。
闭环仿真
通过Simulink中的闭环仿真验证MPC设计。金宝app
open_system ([mdlMPC/范围的]) sim (mdlMPC)
——>转换模型到离散时间。——>”模式。“噪音”属性为空。假设每个测量输出都有白噪声。
在非线性仿真中,成功地实现了所有的控制目标。
讨论
需要指出的是,所设计的MPC控制器有其局限性。例如,如果将步骤设定值更改为15
时,钟摆在转换过程中无法恢复直立位置。
为了在相同的上升时间内达到更长的距离,控制器在开始时对推车施加更大的力。结果,钟摆从其直立位置偏移了一个较大的角度,例如60
度。在这样的角度下,植物动态与获得的LTI预测模型有显著差异θ=0
.结果,对植物行为的预测误差超过了内置MPC鲁棒性所能处理的范围,控制器无法正常执行。
避免钟摆下降的一个简单的解决方法是通过添加软输出约束来限制钟摆位移θ减小约束软化的ECR权值。
mpcobj.OV(2)。Min = -pi/2;mpcobj.OV(2)。Max = pi/2;mpcobj.Weights.ECR = 100;
然而,有了这些新的控制器设置,就不可能在要求的上升时间内达到更长的距离了。换句话说,为了避免违反软输出约束,牺牲了控制器的性能。
为了在相同的上升时间内达到更长的距离,控制器需要更精确的不同角度的模型来提高预测。另一个例子小车倒立摆增益控制的MPC控制展示了如何使用增益调度MPC来实现更长的距离。
关闭Simulink金宝app模型。
bdclose (mdlMPC)