该实例采用非线性模型预测控制器对象和块来实现倒立摆在小车上的摆起和平衡控制。
此示例需要优化工具箱™软件,以提供默认非线性解法器编程为非线性的MPC在每个控制间隔计算最优控制移动。
如果〜mpcchecktoolboxinstalled('的Optim')DISP(运行此示例需要优化工具箱。)返回结束
本例中的工厂是一个摆/推车组装,其中ž是车的位置和THETA是摆角。该系统的操纵变量是一个可变力F作用于车。的力的范围之间-100
和100
。一个脉冲干扰DF可以推动钟摆为好。
承担摆锤/购物车组件下列初始条件:
车是在静止ž=0
。
摆锤是在向下的平衡位置,其中THETA=-π
。
控制目标是:
摆起控制:最初摆动摆到倒置的平衡位置,其中ž=0
和THETA=0
。
车位置参考追踪:将车用一步设定值变化的新位置,保持倒立钟摆。
摆平衡:当量级的脉冲干扰2
应用于倒立摆,使摆保持平衡,使小车恢复到原来的位置。
向下的平衡位置是稳定的,并且反转的平衡位置是不稳定的,这使得摆起控制单个线性控制器,其非线性MPC手柄容易更具挑战性。
在这个例子中,非线性MPC具有以下的I / O配置:
一个操纵变量:变量力(F)
两个测量的输出:车位置(ž)和摆角(THETA)
其他两个州,车速度(zdot)和摆角速度(thetadot)是无法衡量的。
而小车位置的设定值,ž可以变化,摆角的设定点,THETA, 总是0
(反转平衡位置)。
首先,创建一个具有适当尺寸的非线性MPC控制器nlmpc
宾语。在此实例中,预测模型具有4
状态,2
输出,和1
输入(MV)。
nx = 4;纽约= 2;ν= 1;nlobj = nlmpc(nx, ny, nu);
在标准成本函数中,默认情况下对一个或多个OVs应用零权值,因为与OVs相比,MVs更少。
预测模型的采样时间为0.1
秒,这是相同的控制器采样时间。
TS = 0.1;nlobj.Ts = TS;
设置预测地平线10
,这是足够长的时间来捕捉植物主要动力,但时间并不长,它伤害的计算效率。
nlobj.PredictionHorizon = 10;
设置控制地平线五
,这足够长,使控制器有足够的自由度来处理不稳定模式,而不会引入过多的决策变量。
nlobj.ControlHorizon = 5;
非线性模型预测控制的主要优点是,它采用了非线性动力学模型在大范围的操作条件来预测未来的工厂行为。
该非线性模型通常是由一组差分和代数方程模块(DAE)中的第一原理模型。在这个例子中,离散时间车和摆系统中所定义的pendulumDT0
函数。它集成了连续时间模型,pendulumCT0
使用多步向前欧拉方法控制间隔之间。相同的功能用于由非线性状态估计器为好。
nlobj.Model.StateFcn =“pendulumDT0”;
要使用离散时间模型,设置Model.IsContinuousTime
控制器的性能假
。
nlobj.Model.IsContinuousTime = FALSE;
预测模型使用的可选参数,TS
,表示样本时间。使用此参数意味着,如果在设计期间更改预测样本时间,则不必修改pendulumDT0
文件。
nlobj.Model.NumberOfParameters = 1;
两个植物输出是在第一和第三状态中的型号,车的位置和摆角,分别。指定使用匿名功能相应的输出功能。
nlobj.Model.OutputFcn = @(X,U,TS)[X(1);X(3)];
它是提供分析功能的雅可比只要有可能,因为它们显著提高仿真速度的最佳实践。在这个例子中,提供用于输出功能的雅可比。
nlobj.Jacobian。OutputFcn = @(x,u,Ts) [1 0 0 0;0 0 1 0];
既然你不为国家提供的功能雅可比,非线性MPC控制器使用估计数值扰动优化过程中的状态函数雅可比。这样做模拟减慢到一定程度。
像线性MPC,非线性MPC解决了在每个控制时间间隔受约束优化问题。然而,由于工厂模型是非线性的,非线性MPC最优控制问题转化为一个非线性优化问题具有非线性成本函数和非线性约束。
在此示例中使用的成本函数是由线性MPC,其中输出参考跟踪和操纵变量移动抑制被强制执行使用相同的标准的成本函数。因此,指定标准MPC调整权重。
nlobj.Weights。OutputVariables = [3 3];nlobj.Weights。ManipulatedVariablesRate = 0.1;
手推车的位置被限制在范围内-10年
至10
。
nlobj.OV(1).Min = -10;nlobj.OV(1)最大= 10;
力之间有着范围-100
和100
。
nlobj.MV.Min = -100;nlobj.MV.Max = 100;
设计非线性MPC控制器对象后,是检查你的预测模型,定制成本,以及自定义约束,规定的功能,以及它们的雅克比的最佳实践,采用validateFcns
命令。此命令检测这些函数中任何量纲和数值上的不一致。
x0 =[0.1; 0.2; 0.3 -π/ 2,);情况= 0.4;validateFcns(nlobj, x0, u0, [], {Ts});
Model.StateFcn是OK。Model.OutputFcn是OK。Jacobian.OutputFcn是OK。用户提供的模型,成本和约束函数的分析完成。
在本例中,只有两种状态(小车位置和摆角)是可测量的。因此,您可以使用扩展的卡尔曼滤波器来估计四种植物状态。其状态转换函数定义为pendulumStateFcn.m
和它的测量功能中所定义pendulumMeasurementFcn.m
。
EKF = extendedKalmanFilter(@pendulumStateFcn,@pendulumMeasurementFcn);
通过设定初始工厂状态和输出值指定的模拟的初始条件。另外,指定的扩展卡尔曼滤波器的初始状态。
仿真的初始条件为:
车是在静止ž= 0。
钟摆处于向下的平衡位置,THETA=-π
。
X = [0; 0; -pi; 0];Y = [X(1); X(3)];EKF.State = X;
MV
是在任意控制区间计算的最优控制步长。初始化MV
零,由于施加到车力是在一开始的零。
MV = 0;
在模拟的第一阶段,钟摆从一个向下的平衡位置上升到一个倒立的平衡位置。此阶段的状态引用均为零。
yref1 = [0 0];
在…的时候10
秒,从位置车移动0
至五
。设置此位置的状态引用。
yref2 = [5 0];
使用nlmpcmove
命令,计算每个控制区间的最优控制步长。该函数构造了一个非线性规划问题,并用fmincon
函数从优化工具箱。
使用。指定预测模型参数nlmpcmoveopt
对象,并将此对象传递给nlmpcmove
。
nloptions = nlmpcmoveopt;nloptions。参数= {Ts};
运行模拟20
秒。
持续时间= 20;HBAR = waitbar(0,“模拟进展”);xHistory = x;对于CT = 1:(20 / TS)%设置引用如果CT * TS <10 YREF = yref1;其他YREF = yref2;结束%正确先前预测使用电流测量xk =正确(EKF, y);%计算最优控制移动[MV,nloptions,信息] = nlmpcmove(nlobj,XK,MV,YREF,[],nloptions);%预测下一次迭代的预测模型状态预测(EKF,[MV; TS]);%首次实现最优控制移动和更新设备的状态。X = pendulumDT0(X,MV,TS);%产生具有某些白噪声传感器数据Y = X([1 3])+ randn(2,1)* 0.01;显示%保存设备的状态。xHistory = [xHistory X];%#确定<* AGROW>waitbar(百巴ct * Ts / 20日);结束关闭(HBAR);
画出闭环响应。
图副区(2,2,1)情节(0:TS:持续时间,xHistory(1,:))xlabel('时间')ylabel('Z')标题(“车位置”) subplot(2,2,2) plot(0:Ts:Duration,xHistory(2,:) xlabel(0:Ts:Duration,xHistory(2,:))'时间')ylabel(“zdot”)标题(“车速度”) subplot(2,2,3) plot(0:Ts:Duration,xHistory(3,:)) xlabel(0:Ts:Duration,xHistory(3,:))'时间')ylabel(“θ”)标题(“摆角”)副区(2,2,4)情节(0:TS:持续时间,xHistory(4,:))xlabel('时间')ylabel('thetadot')标题(“摆速度”)
该摆角图中显示了钟摆成功地在两秒钟向上摆动。在向上摆动的过程中,车被移动用的峰值偏差-1
,并返回到原来的位置周围的时间2
秒。
该车位置图中显示了车成功地移动到ž=五
在两秒。当小车移动时,钟摆的偏移峰值为1
弧度(57
并在大约一段时间内恢复到一个反向平衡的位置12
秒。
这个例子也需要的Simulink软件来模拟在Simul金宝appink摆模型的非线性MPC控制。
如果〜mpcchecktoolboxinstalled('金宝appSIMULINK')DISP(的金宝appSimulink需要运行这个例子。“)返回结束
验证具有在Simulink闭环模拟非线性MPC控制器。金宝app
打开Simulin金宝appk模型。
mdl ='mpc_pendcartNMPC';open_system(MDL)
在此模型中,非线性MPC控制器块被配置成使用先前设计的控制器,nlobj
。
在预测模型中使用的可选参数,该模型具有连接到一个总线的Simulink块金宝appPARAMS
非线性MPC控制器块的输入端口。要将此总线块配置为使用TS
参数,创建在MATLAB®工作区中的对象总线和配置总线创作者块使用此对象。要做到这一点,使用createParameterBus
函数。在这个例子中,命名总线对象“myBusObject”
。
createParameterBus(nlobj,[MDL“/非线性MPC控制器”),“myBusObject”{TS});
甲S金宝appimulink的总线对象“myBusObject”在MATLAB工作区创建,并且创建者总线块“mpc_pendcartNMPC /非线性MPC控制器”被配置为使用它。
运行模拟三十
秒。
open_system ([mdl/范围的])SIM(MDL)
相比于MATLAB仿真在Simulink非线性仿真产生相金宝app同摆起和车位置跟踪的结果。此外,推(脉冲干扰DF
)应用于倒立摆,时间为20
秒。非线性MPC控制器成功地抑制了干扰,使cart返回ž=五
摆到一个倒立的平衡位置。
无论是nlmpc
对象或非线性MPC控制器块支持代码生成。金宝app
本实施例说明在MATLAB和Simulink使用来设计的一般工作流程和模拟非线性MPC金宝appnlmpc
对象分别与非线性MPC控制器块。根据具体的非线性植物特性和控制要求上,实现细节可以显著变化。关键的设计挑战包括:
选择合适的范围,界限和重量
设计一个非线性的状态估计
设计自定义非线性成本函数和约束函数
选择求解器选项或选择自定义NLP求解器
您可以使用的功能和Simulink模型在本例中为其他非线性M金宝appPC设计和模拟任务模板。
bdclose(MDL)