此示例示出了如何设计使用非线性模型预测控制器块以下车道控制器。在这个例子中,您可以:
设计行车以下非线性MPC控制器(NLMPC)。
比较NLMPC的自适应MPC的性能。
阿继车道系统是一种控制系统,保持沿高速公路车道的中心线在车辆行进,同时保持用户设定的速度。下面的车道场景在以下图所示。
甲以下车道系统操纵两个纵向加速度和所述车辆的前轮转向角:
保持横向偏差和相对偏航角小。
保持的纵向速度接近驾驶员设定的速度。
平衡时,他们不能同时满足上述两个目标。
在车道保持的一个单独的例子辅助,假定的纵向速度是恒定的。欲了解更多信息,请参阅车道保持辅助系统的使用模型预测控制。因为纵向加速度在该MIMO控制系统而变化这个限制是在这个例子中放宽。
又如增强与间隔控制,其中来自所检测的引导车的安全距离也保持一个车道以下的系统。欲了解更多信息,请参阅里在与传感器融合和Lane检测控制。
例如添加文件夹到MATLAB®路径。
让addpath(完整文件(matlabroot,'例子','MPC','主要'));
打开Simulin金宝appk模型。
MDL ='LaneFollowingNMPC';open_system(MDL)
此模型包含四个主要部分组成:
车辆动态:应用自行车模式横向车辆动力学的,并且使用近似的时间常数的纵向动力学。
传感器动力学:近似的传感器诸如相机来计算横向偏差和相对偏航角。
车道追踪控制器:模拟非线性MPC和自适应MPC。
曲率预览器:检测该曲率在当前时间步骤并在MPC控制器的预测范围曲率序列。
车辆动态和传感器动力学在更详细地讨论的自适应巡航控制系统与传感器融合。本实施例中适用于车辆和传感器动力学相同的模型。
必要的车辆动力学和道路曲率参数使用的定义LaneFollowingUsingNMPCData
脚本是PreLoadFcn
回调模型。
对于NLMPC连续时间预测模型具有以下状态和输出方程。状态方程中定义LaneFollowingStateFcn
。
预测模型包括未测量的干扰(UD)模型。该UD模型描述了遭遇类型未测量的干扰NLMPC预计,并拒绝在工厂。在这个例子中,UD模型是具有其输入端的积分器假设为白噪声。其输出被加到相对偏航角。因此,控制器期望的随机阶梯状未测量的干扰发生在相对偏航角输出和制备,当它发生拒绝它。
创建与具有七个状态,三个输出,和两个输入的预测模型中的非线性的MPC控制器。该模型有两个MV信号:加速和转向。道路曲率和纵向速度的乘积被建模为测量的干扰,并且未测量的干扰是由白噪声建模。
nlobj = nlmpc(7,3,'MV'[1 2],'MD',3,'UD',4);
在标准的成本函数,零个权重是通过默认,因为有比的MV OVS少施加到一个或多个OVS。
指定控制器的采样时间,预测范围,并控制视野。
nlobj.Ts = TS;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米/秒^ 2nlobj.MV(1)最大= 3;%最小加速度-3米/秒^ 2nlobj.MV(2).Min = -1.13;%最小转向角-65nlobj.MV(2)最大= 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是OK。Jacobian.StateFcn是OK。Model.OutputFcn是OK。Jacobian.OutputFcn是OK。用户提供的模型,成本和约束函数的分析完成。
在这个例子中,扩展卡尔曼滤波器(EKF)提供的7个州状态估计。用于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”对象的“Model.Noise”属性是空的。假设在每个测得的输出信道的白噪声。
情节和仿真结果进行比较。
LaneFollowingCompareResults(logsout1,logsout2)
在第一个图中,都非线性MPC和MPC自适应得到几乎相同的转向角轮廓。横向偏差和相对偏航角是操纵期间接近于零。这一结果意味着,车辆沿着期望的路径行进。
非线性和自适应MPC纵向控制命令和性能略有不同。非线性MPC控制器具有顺畅的加速命令和设定速度的更好的跟踪,虽然从自适应MPC的结果是可以接受的。
您还可以通过在模型输出和输入的作用域查看结果。
设置控制器类型非线性MPC。
controller_type = 1;
这个例子显示了如何设计车道以下非线性模型预测控制器。使用非线性的MPC和MPC自适应的性能进行了比较。您可以根据建模信息和计算能力为应用程序选择非线性MPC或适应性MPC。
从MATLAB路径中删除示例文件夹。
rmpath(完整文件(matlabroot,'例子','MPC','主要'));bdclose(MDL)