这个例子展示了如何使用线性时变模型预测控制器(LTV MPC)控制车上的倒立摆。
这个例子需要Simulink®软件来模拟非线万博1manbetx性摆模型。
如果~ mpcchecktoolboxinstalled (“万博1manbetx模型”) disp (运万博1manbetx行这个示例需要Simulink (R)。)返回结束
这个例子的工厂是下面的摆/车总成,其中z推车的位置是和吗θ为摆角。
这个系统的操纵变量是一个变力F在推车上行动。力的范围在-100到100之间。当小车移动到一个新的位置或当钟摆被冲量干扰向前推时,控制器需要保持钟摆直立dF应用于倒立摆的上端。
对摆/车组件假设以下初始条件:
马车停在原地不动z=0
.
倒立摆在直立的位置是静止的θ=0
.
控制目标是:
车可以移动到一个新的位置之间-20
和20.
有一个步骤设置改变。
当跟踪这样的设定值变化时,上升时间应小于4秒(为性能考虑),超调量应小于10
百分比(鲁棒性)。
当脉冲扰动的大小为4
当应用于摆时,小车和摆应以较小的位移回到原来的位置。
倒立摆的直立位置是一个不稳定的平衡,这使得控制任务更具挑战性。
在小车上倒立摆的控制,一个单一的MPC控制器能够移动推车到一个新的位置之间-10年
和10
.然而,如果您增加步骤设置更改为20.
时,钟摆在过渡过程中无法恢复其垂直位置。
为了在相同的上升时间内达到较长的距离,控制器在开始时对小车施加较大的力。结果,钟摆从它的直立位置移动了一个更大的角度,例如60
度。在这样的角度下,植物动态与在θ=0
.结果,对对象行为的预测误差超过了内置MPC鲁棒性所能处理的范围,控制器无法正常运行。
为了避免摆的下落,一个简单的解决方案是通过添加软输出约束来限制摆的位移θ减少约束软化时的ECR重量。
mpcobj.OV(2)。Min = -π/ 2;mpcobj.OV(2)。Max =π/ 2;mpcobj.Weights.ECR = 100;
然而,使用这些新的控制器设置,它不再可能在所需的上升时间内达到更长的距离。换句话说,为了避免违背软输出约束,牺牲了控制器的性能。
把车移到一个新的位置-20
和20.
在保持上升时间相同的情况下,控制器需要在不同角度有更准确的模型,以便控制器更好地利用它们进行预测。自适应MPC允许你通过在运行时更新线性时变的对象模型来解决非线性控制问题。
在本例中,使用单个LTV MPC控制器:
一个操纵变量:可变力F.
两个测量输出:车的位置z和摆角θ.
mdlMPC =“mpc_pendcartLTVMPC”;open_system (mdlMPC);
因为所有的植物状态都是可测量的,所以在自适应MPC块中直接使用它们作为自定义估计状态。
当小车位置设定值变化时(阶跃输入),摆角设定值不变(0
=直立位置)。
在每个控制区间,LTV MPC要求从当前时间开始的每个预测步骤都有一个线性对象模型k
时间k + p
,在那里p
是预测视界。
在这个例子中,车和摆的动力系统被描述为第一原理模型。该模型由一组微分和代数方程(DAEs)组成,定义为pendulumCT
函数。有关详细信息,请参见pendulumCT.m
.
Simulink模型中的逐次线性化模块在运行时生成LTV模型。万博1manbetx在每个预测步骤,块获得状态空间矩阵一个
,B
,C
,D
然后将它们转换成离散时间的值。初始植物状态x(k)直接从植物中测量。被控对象输入序列包含MPC控制器在前一个控制区间内产生的最优动作。
MPC控制器设计在其标称平衡工作点。
x0 = 0 (4,1);情况= 0 (1,1);
利用ode分析得到一个线性植物模型。
[~,~,A,B,C,D] =钟摆ct (x0, u0);植物= ss(A,B,C([1 3],:),D([1 3],:));位置和角度百分比
为了控制不稳定的设备,控制器的采样时间不能太大(抗扰性差)或太小(计算负荷过大)。同样,预测范围不能太长(电站不稳定模式将占主导地位)或太短(违反约束将不可预见)。在这个例子中使用以下参数:
t = 0.01;PredictionHorizon = 60;ControlHorizon = 3;
创建MPC控制器。
mpcobj = mpc(汇集(植物、Ts), Ts, PredictionHorizon, ControlHorizon);
- - - >“权重。mpc对象的操纵变量属性为空。假设默认的0.00000。- - - >“权重。mpc对象的操控变量率属性为空。假设默认的0.10000。- - - >“权重。mpc对象的属性为空。假设默认的1.00000。对于输出(s) y1和输出(s) y2的零权重
对于施加到小车上的力有一个限制,这是通过对操纵变量的硬约束来指定的F.
mpcobj.MV.Min = -100;mpcobj.MV.Max = 100;
在设计重量之前,按比例计算工厂的投入和产出是一个很好的做法。在这种情况下,由于被操纵变量的范围比被操作对象输出的范围大两个数量级,因此将输入的MV按比例缩放One hundred.
.
mpcobj.MV.ScaleFactor = 100;
为了提高控制器的鲁棒性,增加权重对MV变化率的影响0.1
来1
.
mpcobj.Weights.MVRate = 1;
为了达到平衡性能,调整工厂产量的权重。第一个重量与车的位置有关z,第二个重量与角度有关θ.
mpcobj.Weights.OV = [0.6 1.2];
用增益作为摆角的输出扰动模型。这代表了快速的短期变化。
setoutdist (mpcobj“模型”, (0; tf (1)));
使用自定义状态估计,因为所有的植物状态都是可测量的。
setEstimator (mpcobj“自定义”);
在Simulink中进行闭环仿真验证MPC设计。万博1manbetx
open_system ([mdlMPC/范围的]);sim (mdlMPC)
——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。
在非线性仿真中,所有控制目标均成功实现。
bdclose (mdlMPC);