本实例使用非线性模型预测控制器对象和块来实现小车上倒立摆的摆起和平衡控制。
这个例子需要Optimization Toolbox™软件为非线性MPC提供默认的非线性规划求解器,以计算每个控制区间的最优控制运动。
如果〜mpcchecktoolboxinstalled(“optim”) disp ('优化工具箱需要运行此示例。')返回结束
该示例的工厂是摆锤/购物车组装,在哪里z是推车位置和θ是摆角。该系统的操纵变量是一个变量F表演车上。力之间的范围是-100
和100.
.冲动的干扰dF也可以推动钟摆。
假设摆/车组件的初始条件如下。
推车是静止的z=0
.
钟摆处于向下的平衡位置θ=-PI.
.
控制目标是:
摆起控制:首先摆起摆到一个倒立的平衡位置z=0
和θ=0
.
小车位置参考跟踪:移动小车到一个新的位置,改变步进设定值,保持摆锤倒立。
摆动平衡:当脉冲障碍的幅度2
应用于倒立摆,使摆保持平衡,使小车返回原来位置。
向下平衡位置是稳定的,而反向平衡位置是不稳定的,这使得单线性控制器的摆起控制更具挑战性,而非线性MPC易于处理。
在本例中,非线性MPC控制器具有以下I/O配置。
一个操纵变量:变量力(F)
两个测量输出:推车位置(z)和摆角(θ)
另外两个州,购物车速度(ZDOT.)和摆角速度(thetadot)不可衡量。
而小车位置的设定值,z,可以改变,摆角的设定值,θ, 总是0
(倒均衡位置)。
使用正确的尺寸创建一个非线性MPC控制器nlmpc.
对象。在本例中,预测模型具有4
州,2
输出,1
输入(MV)。
nx = 4;纽约= 2;nu = 1;nlobj = nlmpc(nx,ny,nu);
在标准成本函数中,默认情况下,零重量施加到一个或多个OV,因为没有比OVS更少。
预测模型具有示例时间0.1
秒数与控制器采样时间相同。
t = 0.1;nlobj。TS.=TS.;
将预测视野设置为10.
,这足以捕获工厂中的主要动态,但它不会损害计算效率。
nlobj.predictionhorizon = 10;
将控制水平设置为5
,这足以使控制器足够的自由度来处理不稳定的模式而不引入过度的决策变量。
nlobj。ControlHorizon = 5;
非线性模型预测控制的主要益处是它使用非线性动态模型来预测未来的植物行为跨各种操作条件。
该非线性模型通常是由一组差分和代数方程组成的第一原理模型(DAE)。在该示例中,在该示例中定义了一个离散时间推车和摆动系统Pendulumdt0.
函数。此功能集成了连续时间模型,Pendulumct0.
,控制区间之间采用多步前向欧拉法。非线性状态估计器也使用了相同的函数。
nlobj.model.statefcn =.“pendulumdt0”;
若要使用离散时间模型,请设置模型。IsContinuousTime
控制器的财产假
.
nlobj.model.iscontinuoustime = false;
预测模型使用了一个可选参数,TS.
,表示采样时间。使用此参数意味着,如果在设计期间更改预测样本时间,则不必修改Pendulumdt0.
文件。
nlobj.model.numberofparameters = 1;
两个工厂的输出分别是模型中的第一和第三状态,小车的位置和摆角。类中定义了相应的输出函数pendulumoutputfcn.
函数。
nlobj.model.outputfcn =.“pendulumOutputFcn”;
尽管可以在可能的情况下提供分析雅可比功能是最好的,因为它们显着提高了模拟速度。在此示例中,使用匿名函数为输出函数提供一个jacobian。
nlobj.jacobian.outputfcn = @(x,u,ts)[1 0 0 0;0 0 1 0];
由于您不为状态功能提供Jacobian,因此非线性MPC控制器在优化使用数值扰动期间估计状态曲线。这样做会在某种程度上减慢模拟。
与线性MPC相同,非线性MPC在每个控制间隔处解决受约束的优化问题。然而,由于工厂模型是非线性的,因此非线性MPC将最佳控制问题转换为具有非线性成本函数和非线性约束的非线性优化问题。
本例中使用的成本函数与线性MPC使用的标准成本函数相同,其中输出参考跟踪和操纵变量移动抑制被强制执行。因此,请指定标准的MPC调优权重。
nlobj.weights.outputvariables = [3 3];nlobj.weights.manipuldvariablesrate = 0.1;
推车位置仅限于该范围-10
至10.
.
nlobj.ov(1).min = -10;nlobj.ov(1).max = 10;
力的范围在-100
和100.
.
nlobj.MV.Min = -100;nlobj.MV.Max = 100;
在设计非线性MPC控制器对象之后,最好的做法是检查您为预测模型,状态,输出功能,自定义成本和自定义约束以及其雅各的函数和自定义的功能。为此,使用validateFcns
命令。此函数检测这些功能中的任何维度和数值不一致。
x0 = [0.1; 0.2; -pi / 2; 0.3];U0 = 0.4;validatefcns(nlobj,x0,u0,[],{ts});
模型。StateFcn就可以了。模型。OutputFcn就可以了。雅可比矩阵。OutputFcn就可以了。分析用户提供的模型、成本和约束功能齐全。
在该示例中,只有两个植物状态(推车位置和摆角)是可测量的。因此,您使用扩展的卡尔曼滤波器估计四个工厂状态。它的状态转换功能是定义的Pendulumstatefcn.m.
其测量函数定义在pendulummeasurentefcn.m.m.
.
EKF = ExtendedKalmanFilter(@PendulumStateFCN,@PendulummeArementFCN);
通过设置初始工厂状态和输出值来指定模拟的初始条件。此外,指定扩展卡尔曼滤波器的初始状态。
仿真区域的初始条件下面。
推车是静止的z= 0。
摆锤处于向下平衡位置,θ=-PI.
.
x = [0; 0; -pi; 0];Y = [x(1); x(3)];ekf.state = x;
m
是否以任何控制间隔计算的最佳控制移动。初始化m
到零,因为一开始施加在小车上的力是零。
mv = 0;
在模拟的第一阶段,摆从向下的平衡位置摆动到反向的平衡位置。此阶段的状态参考均为零。
Yref1 = [0 0];
在一段时间10.
秒,推车从位置移动0
至5
.设置此位置的状态参考。
yref2 = [5 0];
使用nlmpcmove
命令,计算每个控制间隔的最佳控制移动。此功能构造非线性编程问题,并使用它解决了它粉刺
从优化工具箱功能。
使用一个指定预测模型参数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,INFO] = NLMPCMOVE(NLOBJ,XK,MV,YREF,[],NLOPTIONS);%预测下次迭代的预测模型状态。预测(EKF,[MV; TS]);%实施第一最优控制移动和更新工厂状态。x = Pendulumdt0(x,mv,ts);%使用一些白噪声生成传感器数据。Y = x([1]) + randn(2,1)*0;%保存工厂状态显示。xhistory = [xhistory x];% #好< * AGROW >waitbar(百巴ct * Ts / 20日);结束关上(百巴)
绘制闭环响应。
figure subplot(2,2,1) plot(0:Ts:Duration,xHistory(1,:)) xlabel('时间')ylabel('z') 标题(“车位置”)子图(2,2,2)绘图(0:TS:持续时间,Xhistory(2,:))XLabel('时间')ylabel('ZDOT') 标题(“车速度”)子图(2,2,3)绘图(0:TS:持续时间,Xhistory(3,:))XLabel('时间')ylabel('theta') 标题(“摆角”) subplot(2,2,4) plot(0:Ts:Duration,xHistory(4,:)) xlabel('时间')ylabel(“thetadot”) 标题(“摆速度”)
的摆角图中显示钟摆在两秒内成功地向上摆动。在起摆过程中,小车的位移峰值偏差为-1
,在大约一段时间后又回到了原来的位置2
秒。
的车的位置图显示购物车成功移动到z=5
在两秒钟内。当推车移动时,摆动柱子达到峰值偏差1
弧度(57.
度数)并返回到颠覆的倒置平衡位置12.
秒。
您可以轻松使用第三方非线性编程求解器以及使用模型预测控制工具箱软件设计的非线性MPC对象。例如,如果您已从Embotech安装了Force Pro软件,则可以使用它们MPC Toolbox插件从您的中生成有效的自定义NLP求解器nlmpc.
对象并使用求解器进行仿真和代码生成。
属性生成自定义求解器nlmpctoforces
命令。您可以使用内部点(IP)求解器或顺序二次编程(SQP)求解器选择nlmpctoforcesOptions.
命令。
选择= nlmpcToForcesOptions ();选项。SolverName =“MyIPSolver”;选项。SolverType ='internalpoint';选项。参数= t;选项。x0 =[0, 0, -π;0];选项。m0=0;[coredata, onlinedata] = nlmpcToForces(nlobj,options);
的nlmpctoforces
函数生成自定义mex函数nlmpcmove_myipsolver
,可以用来加速闭环仿真。
x = [0; 0; -pi; 0];mv = 0;ekf.state = x;Y = [x(1); x(3)];hbar = waitbar(0,“模拟进展”);xHistory = x;为ct = 1:(20 / Ts)%设置参考资料如果CT * TS <10 Onlinedata.ref = Repmat(Yref1,10,1);其他的onlinedata。ref = repmat (yref2 10 1);结束使用电流测量的%校正先前预测。XK =正确(EKF,Y);%计算最佳控制使用Forces Pro Solver移动。[mv, onlinedata信息]= nlmpcmove_MyIPSolver (xk, mv, onlinedata);%预测下次迭代的预测模型状态。预测(EKF,[MV; TS]);%实施第一最优控制移动和更新工厂状态。x = Pendulumdt0(x,mv,ts);%使用一些白噪声生成传感器数据。Y = x([1]) + randn(2,1)*0;%保存工厂状态显示。xhistory = [xhistory x];% #好< * AGROW >waitbar(百巴ct * Ts / 20日);结束关上(百巴)
如预期的那样,闭环响应类似于使用的响应类似粉刺
像预期的那样。
此示例还需要Simulink®软件模拟Simulink万博1manbetx中的摆锤模型的非线性MPC控制。
如果〜mpcchecktoolboxinstalled('万博1manbetxsimulink') disp ('万博1manbetx运行这个例子需要Simulink ')返回结束
在Simulink中验证具有闭环仿真的非线性MPC控制器。万博1manbetx
打开Simulin万博1manbetxk模型。
mdl ='mpc_pendcartnmpc';Open_System(MDL)
在该模型中,非线性MPC控制器块配置为使用先前设计的控制器,nlobj
.
要在预测模型中使用可选参数,该模型具有连接到的Simulink总线块万博1manbetx参数个数
非线性MPC控制器块的输入端口。配置此总线块以使用TS.
参数,在MATLAB工作空间中创建一个总线对象,并配置总线创建器块来使用这个对象。为此,使用Creyeparameterbus.
函数。在此示例中,将总线对象命名“myBusObject”
.
(mdl createParameterBus (nlobj'/非线性MPC控制器'],“myBusObject”,{ts});
在M万博1manbetxatlab工作区中创建的Simulink总线对象“MyBusObject”和Bus Creator Block“MPC_PendCartNMPC /非线性MPC控制器”配置为使用它。
为以下内容运行模拟30.
秒。
Open_System([MDL/范围的]) sim (mdl)
在Simulink中进行的非线性仿真得到了与MATLAB万博1manbetx仿真相同的起摆和小车位置跟踪结果。还有一个推(脉冲干扰)dF
)应用于倒立摆时20.
秒。非线性MPC控制器成功拒绝干扰并将推车返回给z=5
和垂直平衡位置的钟摆。
您还可以使用来自Embotech FORCES PRO软件的FORCES非线性MPC块,使用生成的自定义NLP求解器来模拟非线性MPC。
如果您安装了FORCES PRO软件,请打开mpc_pendcartforcespro.
建模并运行到完成。闭环响应类似于使用粉刺
.
此示例说明了在MATLAB中设计和模拟非线性MPC的常规工作流程,并使用SIMULINK使用万博1manbetxnlmpc.
对象和非线性MPC控制器块。根据具体的非线性工厂特性和控制要求,实施细纹可以显着变化。关键设计挑战包括:
选择适当的视野,界限和重量
设计非线性状态估计
设计定制的非线性成本函数和约束函数
选择求解器选项或选择自定义NLP求解器
您可以在此示例中使用函数和Simulink模型作为其他非线性万博1manbetxMPC设计和仿真任务的模板。
这两个nlmpcmovecodegeneration.
来自模型预测控制工具箱软件的命令nlmpcmoveForces
command from FORCES PRO支万博1manbetx持MATLAB中的代码生成。从模型预测控制工具箱软件和非线性MPC块强制非线性MPC
来自Force Pro支持代码生成的块。万博1manbetx万博1manbetx
BdClose(MDL)