本例展示了如何使用非线性模型预测控制器模块设计一个车道跟踪控制器。在这个例子中,你:
设计了一种用于车道跟踪的非线性MPC控制器。
比较了NLMPC与自适应MPC的性能。
车道跟踪系统是一种控制系统,它使车辆沿着高速公路车道的中心线行驶,同时保持用户设定的速度。车道跟踪场景如下图所示。
车道跟踪系统操纵车辆的纵向加速度和前转向角,以:
保持横向偏差和相对偏航角小。
保持纵向速度接近驾驶员设定的速度。
如果上述两个目标不能同时实现,就平衡它们。
在一个单独的车道保持辅助例子中,假设纵向速度是恒定的。有关更多信息,请参见基于模型预测控制的车道保持辅助系统.这个限制在这个例子中是放松的,因为纵向加速度在这个MIMO控制系统中是变化的。
另一个例子是通过间距控制增强车道跟踪系统,与检测到的领先车辆保持安全距离。有关更多信息,请参见车道跟踪控制与传感器融合和车道检测.
打开Simulin金宝appk模型。
mdl =“LaneFollowingNMPC”;open_system (mdl)
该模型包含四个主要组成部分:
车辆动力学:应用自行车模式横向动力学,并近似纵向动力学使用时间常数.
传感器动态:近似一个传感器,如相机,以计算横向偏差和相对偏航角。
车道跟随控制器:模拟非线性MPC和自适应MPC。
曲率预览器:检测当前时间步长的曲率和MPC控制器预测视界上的曲率序列。
文中详细讨论了车辆动力学和传感器动力学自适应巡航控制与传感器融合.本例将相同的模型应用于车辆和传感器动力学。
方法定义必要的车辆动力学和道路曲率参数LaneFollowingUsingNMPCData
脚本,它是PreLoadFcn
模型的回调。
NLMPC的连续时间预测模型具有如下状态方程和输出方程。状态方程定义在LaneFollowingStateFcn
.
预测模型包括一个不可测扰动模型。UD模型描述了NLMPC预计在工厂中遇到和拒绝的不可测扰动类型。在本例中,UD模型是一个积分器,其输入假设为白噪声。它的输出加上相对偏航角。因此,控制器预期在相对偏航角输出处会出现一个随机阶跃样不可测扰动,并准备在扰动发生时进行抑制。
创建一个具有七个状态、三个输出和两个输入的预测模型的非线性MPC控制器。该模型有两个MV信号:加速和转向。将道路曲率与纵向速度的乘积建模为实测扰动,将未测扰动建模为白噪声。
Nlobj = nlmpc(7,3,“MV”(1 - 2),“医学博士”3,“UD”4);
在标准代价函数中,默认情况下对一个或多个ov应用零权重,因为mv比ov少。
指定控制器采样时间、预测区间和控制区间。
nlobj。Ts = Ts;nlobj。PredictionHorizon = 10;nlobj。ControlHorizon = 2;
指定非线性植物模型的状态函数及其雅可比矩阵。
@(x,u) LaneFollowingStateFcn(x,u);nlobj. jacobean . statefcn = @(x,u) LaneFollowingStateJacFcn(x,u);
指定非线性植物模型的输出函数及其雅可比矩阵。输出变量为:
纵向速度
横向偏差
偏航角和偏航角输出扰动之和
nlobj.Model.OutputFcn = @ (x, u) [x (3); (5), (6) + x (7)];nlobj. jacobbian . outputfcn = @(x,u) [0 0 1 0 0 0 0 0 0;0 0 0 0 1 0;0 0 0 0 0 1 1];
为操作变量设置约束。
nlobj.MV(1)。Min = -3;最大加速度3 m/s^2nlobj.MV(1)。Max = 3;最小加速度-3 m/s^2nlobj.MV(2)。Min = -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
包含状态值。
情况
包含输入值。
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,情况,md0, {}, ref0);
模型。StateFcn是OK的。雅可比矩阵。StateFcn是OK的。模型。OutputFcn是OK。雅可比矩阵。OutputFcn是OK。分析了用户提供的模型、成本和约束函数。
在这个例子中,一个扩展的卡尔曼滤波器(EKF)提供了七个状态的状态估计。中定义了EKF的状态转移函数LaneFollowingEKFStateFcn
,测量函数定义为LaneFollowingEKFMeasFcn
.
本例中还使用路径跟踪控制系统块设计了自适应MPC (AMPC)控制器。该控制器采用了车辆动力学的线性模型,并随着纵向速度的变化在线更新模型。
在实践中,只要线性控制解决方案,如自适应MPC或增益调度MPC可以实现与非线性MPC相当的控制性能,您就会实现线性控制解决方案,因为它在计算上更有效。
为了比较NLMPC和AMPC的结果,对模型进行模拟并保存记录数据。
首先,利用非线性MPC对模型进行模拟。为此,设置controller_type
来1
.
Controller_type = 1;Sim (mdl) logsout1 = logsout;
其次,采用自适应MPC对模型进行模拟。为此,设置controller_type
来2
.
Controller_type = 2;Sim (mdl) logsout2 = logsout;
假设测量的输出通道1没有任何扰动。假设测量的2号输出通道没有扰动。假设添加到测量输出通道#3的输出扰动是集成白噪声。——>”模式。mpc对象的Noise属性为空。假设每个测量输出通道上都有白噪声。
绘制并比较模拟结果。
LaneFollowingCompareResults (logsout1 logsout2)
在第一个图中,非线性MPC和自适应MPC给出了几乎相同的转向角剖面。在机动过程中,横向偏差和相对偏航角接近于零。这一结果表明车辆正沿着期望的路径行驶。
非线性MPC和自适应MPC的纵向控制指令和性能略有不同。非线性MPC控制器具有更平滑的加速命令和更好的跟踪设定速度,尽管自适应MPC的结果也是可以接受的。
您还可以通过模型中的输出范围和输入范围查看结果。
设置控制器变量为非线性MPC。
Controller_type = 1;
本例介绍了如何设计一种车道跟随的非线性模型预测控制器。比较了非线性MPC和自适应MPC的性能。您可以根据应用程序的建模信息和计算能力选择非线性MPC或自适应MPC。
% close 金宝appSimulink模型bdclose (mdl)