主要内容

使用非线性模型预测控制后的车道

这个例子展示了如何使用非线性模型预测控制器块设计一个车道跟踪控制器。在这个例子中,你:

  1. 设计一种车道跟踪非线性MPC控制器(NLMPC)。

  2. 将NLMPC与Adaptive MPC的性能进行比较。

介绍

车道跟踪系统是一种控制系统,使车辆在高速公路车道的中心线上行驶,同时保持用户设定的速度。下面的图描述了车道跟踪的场景。

车道之后的系统操纵车辆的纵向加速度和前转向角:

  • 保持横向偏差$ e_1 $相对偏航角$ e_2 $小的。

  • 保持纵向速度V_x美元靠近驾驶员速度。

  • 当上述两个目标无法同时实现时,要平衡它们。

在车道保持辅助的单独示例中,假设纵向速度是恒定的。有关更多信息,请参阅基于模型预测控制的车道保持辅助系统.在该示例中,在该示例中放宽该限制,因为纵向加速度在该MIMO控制系统中变化。

另一个例子增加了一个带有间隔控制的车道之后的系统,其中还保持了与检测到的引线轿厢的安全距离。有关更多信息,请参阅基于传感器融合和车道检测的车道跟踪控制

Simulink模型概述万博1manbetx

打开Simulin万博1manbetxk模型。

mdl =“LaneFollowingNMPC”;open_system (mdl)

此模型包含四个主要组件:

  1. 车辆动态:应用自行车模式计算横向车辆动力学,并利用时间常数近似计算纵向动力学$ \ tau $

  2. 传感器动力学:近似传感器,例如摄像机以计算横向偏差和相对偏航角。

  3. 车道跟随控制器:模拟非线性MPC和自适应MPC。

  4. 曲率预览器:检测当前时间步长的曲率和MPC控制器预测范围内的曲率序列。

车辆动力学和传感器动力学的详细讨论传感器融合的自适应巡航控制.这个例子将相同的模型应用于车辆和传感器动力学。

车辆动力学和道路曲率的参数

定义了必要的车辆动力学和道路曲率参数lanefollowingusingnmpcdata.脚本是一个preloadfcn.模型的回调。

设计非线性模型预测控制器

NLMPC的连续时间预测模型有以下状态方程和输出方程。状态方程定义在LaneFollowingStateFcn

该预测模型包括一个未测扰动(UD)模型。UD模型描述了NLMPC预计在工厂中遇到和拒绝何种类型的未测量干扰。在本例中,UD模型是一个积分器,其输入假定为白噪声。它的输出加上相对偏航角。因此,控制器期望在相对偏航角输出出现一个随机的类阶跃的不可测干扰,并准备在它发生时予以拒绝。

创建一个非线性MPC控制器,其预测模型有七个状态,三个输出和两个输入。该模型有两个MV信号:加速和转向。将道路曲率与纵向速度的乘积建模为实测扰动,将非实测扰动用白噪声建模。

nlobj = nlmpc (7 3'mv'(1 - 2),“医学博士”,3,“UD”4);
在标准代价函数中,默认情况下对一个或多个OVs应用零权,因为mv比OVs少。

指定控制器采样时间、预测范围和控制范围。

nlobj。Ts = t;nlobj。PredictionHorizon = 10;nlobj。ControlHorizon = 2;

指定非线性工厂模型及其雅可比的状态功能。

nlobj.Model.StateFcn = @(x,u) LaneFollowingStateFcn(x,u);nlobj.Jacobian.StateFcn = @(x,u) LaneFollowingStateJacFcn(x,u);

指定非线性工厂模型及其雅加诺斯的输出功能。输出变量是:

  • 纵向速度

  • 横向偏差

  • 偏航角和偏航角输出干扰的总和

nlobj.model.outputfcn = @(x,u)[x(3); x(5); x(6)+ x(7)];nlobj.jacobian.outputfcn = @(x,u)[0 0 1 0 0 0 0; 0 0 0 0 1 0 0; 0 0 0 0 0 1 1];

设置受操纵变量的约束。

nlobj.mv(1).min = -3;%最大加速度3 m / s ^ 2nlobj.MV(1)。Max = 3;%最小加速度-3米/秒^2nlobj.MV(2)。最小值= -1.13;%最小转向角-65nlobj.MV(2)。Max = 1.13;%最大转向角65

设置比例因子。

nlobj.ov(1).scalefactor = 15;%纵向速度的典型值nlobj.OV(2)。ScaleFactor = 0.5;%横向偏差范围nlobj.OV(3)。ScaleFactor = 0.5;相对偏航角的范围nlobj.mv(1).scalefactor = 6;转向角的%范围nlobj.mv(2).scalefactor = 2.26;%加速度范围nlobj.md(1).scalefactor = 0.2;曲率范围%

指定标准MPC成本函数中的权重。第三个输出,偏航角度允许浮动,因为只有两个操纵变量可以使其成为方形系统。在该示例中,只要第二输出,横向偏差,横向偏差没有静态误差就没有垂直态误差,在稳态处达到0。

nlobj.Weights.OutputVariables = [1 1 0];

对加速变化的惩罚更大,以获得平稳的驾驶体验。

nlobj.Weights.ManipulatedVariablesRate = [0.3 0.1];

使用该方法验证预测模型功能validateFcns命令。在这个操作点:

  • X0.包含状态值。

  • U0.包含输入值。

  • ref0包含输出参考值。

  • md0包含测量的扰动值。

X0 = [0.1 0.5 25 0.1 0.1 0.001 0.5];U0 = [0.125 0.4];Ref0 = [22 0 0];md0 = 0.1;validatefcns(nlobj,x0,u0,md0,{},ref0);
model.statefcn是好的。jacobian.statefcn还可以。model.outputfcn是可以的。jacobian.outputfcn还可以。分析用户提供的模型,成本和约束函数完成。

在这个例子中,扩展卡尔曼滤波器(EKF)为这七个状态提供状态估计。中定义了EKF的状态转移函数LaneFollowingEKFStateFcn,测量功能定义为LaneFollowingEKFMeasFcn

设计自适应模型预测控制器

在该示例中使用控制系统块之后的路径设计自适应MPC(AMPC)控制器。该控制器使用用于车辆动态的线性模型,并在纵向速度变化时在线更新模型。

在实践中,只要线性控制解决方案(如自适应MPC或增益调度MPC)能够实现与非线性MPC相当的控制性能,就可以实现线性控制解决方案,因为它的计算效率更高。

比较控制器性能

要比较NLMPC和AMPC的结果,请模拟模型并保存记录数据。

首先,利用非线性MPC对模型进行仿真。为此,设置controller_type1

controller_type = 1;SIM(MDL)logsout1 = logsout;

其次,使用Adaptive MPC模拟模型。为此,设置controller_type2

controller_type = 2;Sim (mdl) logsout2 = logsout;
假设对测量的输出通道#1没有增加任何干扰。假设没有干扰添加到测量输出通道#2。——>假设添加到测量输出通道#3的输出扰动为集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。

绘制并比较仿真结果。

LaneFollowingCompareresults(logsout1,logsout2)

在第一图中,非线性MPC和自适应MPC都提供了几乎相同的转向角分布。在操纵期间,横向偏差和相对横摆角接近于零。该结果意味着车辆沿着所需的路径行进。

非线性和自适应MPC的纵向控制命令和性能略有不同。非线性MPC控制器具有更平滑的加速命令和更好地跟踪集合速度,尽管自适应MPC的结果也是可接受的。

您还可以通过模型中的输出和输入范围来查看结果。

设置控制器变量为非线性MPC。

controller_type = 1;

结论

通过算例说明了如何设计非线性模型预测控制器。比较了非线性MPC和自适应MPC的性能。您可以根据您的应用程序的建模信息和计算能力选择非线性MPC或自适应MPC。

bdclose (mdl)

也可以看看

|

相关的话题