主要内容

摆起控制使用非线性模型预测控制的钟摆

这个示例使用一个非线性模型预测控制器对象和块来实现倒立摆的摆起控制和平衡车。

这个例子需要优化工具箱™软件提供的默认非线性规划求解非线性MPC在每个控制区间计算最优控制移动。

摆/车总成

工厂对于这个例子是一个摆/车装配,在哪里z车位置和吗θ摆角。这个系统的被控变量是一个变量F购物车。力的范围之间-100年One hundred.。一个脉冲干扰dF也可以把钟摆。

控制目标

假设以下初始条件摆/车组装。

  • 购物车是静止的z=0

  • 钟摆正处在一个向下的平衡位置θ=

控制目标是:

  • 摆起控制:最初摇摆摆到一个倒置的平衡位置z=0θ=0

  • 车的位置参考跟踪:将车移动到一个新的位置与定位点一步变化,保持摆倒。

  • 摆平衡:当一个脉冲干扰的大小2应用于倒立摆,摆平衡,购物车并返回到原来的位置。

向下的平衡位置是稳定的,倒不稳定平衡位置,这使得摆起控制更具挑战性的一个线性控制器,该非线性MPC容易处理。

控制结构

在这个例子中,非线性MPC控制器具有以下的I / O配置。

  • 一个操纵变量:变量力(F)

  • 两个测量输出:车位置(z)和摆角(θ)

另外两个州,马车速度(zdot)和摆角速度(thetadot没有可衡量的。

虽然购物车的定位点的位置,z可以改变,选点的摆角,θ,总是0(反向平衡位置)。

创建非线性MPC控制器

创建一个非线性MPC控制器使用一个适当的尺寸nlmpc对象。在这个例子中,预测模型4州,2输出,1输入(MV)。

nx = 4;纽约= 2;ν= 1;nlobj = nlmpc (nx、纽约、ν);
零权重应用于一个或多个ov因为有MVs比ov少。

预测模型的样本的时间0.1秒,这是一样的控制器样品时间。

t = 0.1;nlobj。Ts=Ts;

设置预测地平线10,这是足够长的时间来捕捉植物的主要动力,但不久它伤害了计算效率。

nlobj。PredictionHorizon = 10;

设置控制地平线5,这是足够长的时间来给控制器足够的自由度来处理不稳定模式不引入过多的决策变量。

nlobj。ControlHorizon = 5;

指定非线性植物模型

非线性模型预测控制的主要好处是,它使用非线性动力学模型来预测植物的行为在未来跨广泛的操作条件。

这种非线性模型通常是第一个原则模型组成的一组微分和代数方程(拓扑)。在这个例子中,离散时间车和摆系统的定义pendulumDT0函数。这个函数将连续时间模型,pendulumCT0,控制之间的间隔使用多步向前欧拉方法。所使用的相同的功能也是非线性状态估计量。

nlobj.Model。StateFcn =“pendulumDT0”;

使用离散时间模型,设置Model.IsContinuousTime控制器的属性

nlobj.Model。IsContinuousTime = false;

预测模型使用一个可选参数,Ts,代表样品时间。使用这个参数意味着,如果你改变预测样本时间在设计,您不需要修改pendulumDT0文件。

nlobj.Model。NumberOfParameters = 1;

两个工厂输出第一个和第三个状态的模型,分别为小车位置和摆角。对应的输出函数的定义pendulumOutputFcn函数。

nlobj.Model。OutputFcn =“pendulumOutputFcn”;

最好是尽可能提供雅可比矩阵分析功能练习,因为他们大大提高仿真速度。在这个例子中,提供的雅可比矩阵输出函数使用一个匿名函数。

nlobj.Jacobian。OutputFcn =@(x,u,Ts) [1 0 0 0; 0 0 1 0];

因为你不提供可比的态函数,非线性MPC控制器估计状态函数中雅可比矩阵优化使用数值摄动。在某种程度上这样做降低模拟。

定义成本和约束

像线性MPC,非线性MPC解决约束优化问题在每个时间间隔的控制。然而,由于植物模型是非线性,非线性MPC将最优控制问题转化为一个非线性优化问题的非线性成本函数和非线性约束。

这个示例中使用的成本函数是相同的标准成本函数所使用的线性MPC,输出跟踪参考和操纵变量移动抑制执行。因此,指定标准政策委员会调整权重。

nlobj.Weights。OutputVariables = 3 [3];nlobj.Weights。ManipulatedVariablesRate = 0.1;

车的位置是有限的范围-10年10

nlobj.OV (1)。最小值= -10;nlobj.OV (1)。Max = 10;

力有一个范围之间-100年One hundred.

nlobj.MV。最小值= -100;nlobj.MV。Max = 100;

验证非线性MPC控制器

设计一个非线性MPC控制器对象后,最佳实践是检验预测模型的函数定义,态函数,输出功能,定制的成本,和自定义约束,以及他们的雅克比。为此,使用validateFcns命令。该函数检测任何空间,这些函数的数值不一致。

x0 =[0.1; 0.2; 0.3 -π/ 2,);情况= 0.4;validateFcns (nlobj x0,情况,[],{Ts});
模型。StateFcn就可以了。模型。OutputFcn就可以了。雅可比矩阵。OutputFcn就可以了。用户提供的模型分析、成本和约束函数完成。

状态估计

在这个示例中,只有两个植物状态(小车位置和摆角)是可衡量的。因此,您估计植物四个州使用扩展卡尔曼滤波。其状态转换函数中定义pendulumStateFcn.m和它的测量中定义的函数pendulumMeasurementFcn.m

EKF = extendedKalmanFilter (@pendulumStateFcn @pendulumMeasurementFcn);

在MATLAB®闭环仿真

指定模拟的初始条件通过设置初始植物状态和输出值。同时,指定扩展卡尔曼滤波器的初始状态。

模拟区域的初始条件。

  • 购物车是静止的z= 0。

  • 钟摆是一个向下的平衡位置,θ=

x =[0, 0, -π;0];y = x (x (1); (3)];卡尔曼滤波器。国家= x;

mv最优控制移动计算在任何控制间隔。初始化mv为零,因为力量应用于车是零开始。

mv = 0;

在第一阶段的模拟,钟摆摆动从平衡位置向下一个倒置的平衡位置。国家参考这个阶段都是零。

yref1 = [0 0];

一次的10秒,马车从位置05。设置状态参考这个职位。

yref2 = [5 0];

使用nlmpcmove在每个控制命令,计算最优控制移动区间。这个函数构造一个非线性规划问题,并解决它使用fmincon函数的优化工具箱。

指定使用一个预测模型参数nlmpcmoveopt对象,并将该对象传递给nlmpcmove

nloptions = nlmpcmoveopt;nloptions。参数= {Ts};

运行仿真20.秒。

时间= 20;百巴= waitbar (0,“模拟进展”);xHistory = x;ct = 1:(20 / Ts)%设置引用如果ct * Ts < 10 yref = yref1;其他的yref = yref2;结束%正确使用电流测定先前的预测。xk =正确(卡尔曼滤波器,y);%计算最优控制动作。(mv, nloptions信息)= nlmpcmove (yref nlobj xk, mv, [], nloptions);%为下一次迭代预测模型预测状态。预测(卡尔曼滤波器,[mv;Ts]);%实现第一次最优控制移动和更新植物状态。x = pendulumDT0 (x, mv, Ts);%与一些白噪声生成传感器数据。3 y = x ([1]) + randn (2, 1) * 0.01;%保存植物状态显示。xHistory = [xHistory x];% #好< * AGROW >waitbar(百巴ct * Ts / 20日);结束关上(百巴)

情节闭环响应。

图次要情节(2 2 1)情节(0:Ts:持续时间、xHistory(1:))包含(“时间”)ylabel (“z”)标题(“车位置”次要情节(2,2,2)情节(0:Ts:持续时间、xHistory(2:))包含(“时间”)ylabel (“zdot”)标题(“车速度”次要情节(2,2,3)图(0:Ts:持续时间、xHistory(3:))包含(“时间”)ylabel (“θ”)标题(“摆角”次要情节(2,2,4)图(0:Ts:持续时间、xHistory(4:))包含(“时间”)ylabel (“thetadot”)标题(“摆速度”)

摆角图显示钟摆成功波动在两秒。在摆起过程中,购物车是流离失所的灵敏度1,回到原来的位置的时候2秒。

车的位置图显示,购物车成功举措z=5在两秒。车移动时,钟摆是流离失所的灵敏度1弧度(57度),回到一个倒置的平衡位置的时间12秒。

闭环仿真与MATLAB FORCESPRO解算器

您可以很容易地使用第三方非线性规划解算器的非线性MPC对象设计使用模型预测控制工具箱软件。例如,如果你安装了从Embotech FORCESPRO软件,你可以使用他们MPC工具箱插件生成一个有效的定制的NLP解算器从你nlmpc对象,并使用模拟解算器和代码生成。

首先,生成一个定制的解算器使用nlmpcToForces命令。您可以选择使用一个内点(IP)解算器或序贯二次规划(SQP)解算器使用nlmpcToForcesOptions命令。

选择= nlmpcToForcesOptions ();选项。SolverName =“MyIPSolver”;选项。SolverType =“InteriorPoint”;选项。参数= t;选项。x0 =[0, 0, -π;0];选项。mv0=0;[coredata, onlinedata] = nlmpcToForces (nlobj、期权);

nlmpcToForces函数生成一个定制的墨西哥人的功能nlmpcmove_MyIPSolver,你可以使用它来加快闭环模拟。

x =[0, 0, -π;0];mv = 0;卡尔曼滤波器。国家= x;y = x (x (1); (3)];百巴= waitbar (0,“模拟进展”);xHistory = x;ct = 1:(20 / Ts)
%如果ct * Ts < 10 onlinedata设置引用。ref = repmat (yref1 10 1);onlinedata。ref = repmat (yref2 10 1);结束
%正确使用电流测定先前的预测。xk =正确(卡尔曼滤波器,y);
%计算最优控制移动使用FORCESPRO解算器。[mv, onlinedata信息]= nlmpcmove_MyIPSolver (xk, mv, onlinedata);
%为下一次迭代预测模型预测状态。预测(卡尔曼滤波器,[mv;Ts]);
%实现第一次最优控制移动和更新植物状态。x = pendulumDT0 (x, mv, Ts);
%与一些白噪声生成传感器数据。3 y = x ([1]) + randn (2, 1) * 0.01;
%保存植物状态显示。xHistory = [xHistory x];% #好< * AGROW > waitbar(百巴ct * Ts / 20日);最终关闭(百巴)

正如所料,闭环响应类似于一个获得使用fmincon像预期的那样。

闭环的仿真模型万博1manbetx

验证非线性MPC控制器的闭环仿真模型。万博1manbetx

打开仿真软件模型。万博1manbetx

mdl =“mpc_pendcartNMPC”;open_system (mdl)

在这个模型中,非线性MPC控制器的块被配置为使用以前设计的控制器,nlobj

使用可选参数的预测模型,该模型有一个仿真软件总线阻塞连接万博1manbetx参数个数非线性MPC控制器的输入端口。配置该总线块使用Ts参数,在MATLAB工作区中创建一个总线对象和配置总线创造者块使用这个对象。为此,使用createParameterBus函数。在这个例子中,总线对象名称“myBusObject”

(mdl createParameterBus (nlobj“/非线性MPC控制器”),“myBusObject”,{Ts});
万博1manbetx在MATLAB仿真软件总线对象“myBusObject”创建工作区。总线创造者块“mpc_pendcartNMPC /非线性MPC控制器”配置为使用它。

运行仿真30.秒。

open_system ([mdl/范围的])sim (mdl)

模型中的非线性模拟产生相同的摆起和车位置跟踪结果相比,M万博1manbetxATLAB仿真。同时,推动(脉冲干扰dF)应用于倒立摆的20.秒。非线性MPC控制器成功地拒绝干扰并返回购物车z=5和钟摆倒置的平衡位置。

闭环仿真模型FORCESPRO解算器万博1manbetx

您还可以使用的部队非线性MPC块Embotech FORCESPRO软件来模拟非线性MPC使用生成的自定义NLP的能手。

如果你有安装FORCESPRO软件,简单地取代非线性MPC块在上面的模型FORCESPRO非线性MPC块FORCESPRO MPC模块在图书馆部分浏览器。在块对话框中,指定coredata控制器的数据结构和启用模型参数输入。经常保持信号如以下图片。

闭环响应类似于一个使用fmincon

结论

这个示例演示了一个通用工作流设计和模拟非线性MPC在MATLAB和Simulink仿真使用万博1manbetxnlmpc对象和非线性MPC控制器,分别。根据特定的非线性植物的特点和控制要求,实现细节可以发生显著的变化。关键设计挑战包括:

  • 选择适当的视野、边界和权重

  • 设计一个非线性状态估计量

  • 设计一个自定义非线性成本函数和约束功能

  • 选择求解选项或选择一个定制的NLP的能手

您可以使用功能和仿真软件模型在这个例子作为其他非线性MPC模万博1manbetx板设计和仿真任务。

这两个nlmpcmoveCodeGeneration从模型预测控制工具箱软件和命令nlmpcmoveForces命令从FORCESPRO支持在MATLAB代码万博1manbetx生成。两个非线性模型预测控制工具箱软件和MPC块力非线性MPC块从FORCESPRO支持模型的代码生成。万博1manbetx万博1manbetx

另请参阅

功能

对象

相关的例子

更多关于