文档

模型预测控制自适应巡航控制系统

这个例子展示了如何使用模型预测控制器(MPC)来实现自适应巡航控制(ACC)系统。

添加示例文件夹到MATLAB®路径。

目录(fullfile (matlabroot,“例子”“mpc_featured”“主要”));

自适应巡航控制系统

配备ACC的车辆(主车)有一个传感器,如雷达,可以测量在同一车道上与前车(前车)的距离,以及前车的相对速度。ACC系统有两种运行模式:速度控制而且间距控制

  • 在速度控制中,主车以驾驶员设定的速度行驶。

  • 在间隔控制中,主车与前车保持安全距离。

ACC系统根据实时雷达测量决定使用哪种模式。例如,如果前车距离太近,ACC系统就会从速度控制切换到间距控制。同样,如果前车离前车更远,ACC系统会从间距控制切换到速度控制。换句话说,只要保持安全距离,ACC系统就会让主车以驾驶者设定的速度行驶。

在本例中,为了实现速度控制或间距控制,ACC系统操纵加速度。

ACC系统设计

打开Simulin金宝appk模型。采用Simulink中的自适应巡航控制系统子系统块对ACC系统进行建模。金宝app

mdl =“mpcACCsystem”;open_system (mdl)

行政协调会系统的输入如下:

  • 司机让速度

  • 主车的速度

  • 与前车的实际距离(雷达)

  • 前车的速度(雷达)

ACC系统的输出是主车的加速度。

加速度和速度之间的动力学模型如下:

它近似于节气门和车辆惯性的动力学。同一传递函数适用于主车和前车。

前车和主车之间的安全距离是主车速度的函数,

在哪里10(m)为静止距离,1.4(sec)为时间差。

ACC系统运行模式的判定规则如下:

  • 如果,则速度控制模式为激活状态。控制目标是跟踪驾驶员设定的速度,

  • 如果,则间距控制模式为激活状态。控制目标是保持安全距离,

指定两辆车的初始条件。

x0_lead = 50;前车初始位置% (m)v0_lead = 25;前车初始速度% (m/s)x0_host = 10;主车初始位置% (m)v0_host = 20;主车初始速度% (m/s)a0_host = 0;主车初始加速度% (m/s^2)

指定目标驾驶员设定速度,单位为m/s。

v_set = 30;

定义样本时间,Ts,模拟持续时间,T,在几秒钟内。

t = 0.1;T = 80;

为了接近真实的驾驶环境,在模拟过程中改变前车的加速度。

a0_lead。时间= (0:0.1:T) ';a0_lead.signals。值= 0.6 * sin (a0_lead.time / 5);a0_lead.signals。尺寸= 1;

MPC结构

在本例中,ACC是使用线性MPC实现的。

ACC = [mdl自适应巡航控制系统];open_system (ACC)

MPC控制器有:

  • 两个测量输出(MO):间距误差,,主车速度,.间距误差应该有一个下限0保持安全距离。期望的主车速度是驾驶员设定的速度,

  • 一个操纵变量(MV):主车加速度,.考虑到车辆动力学的物理限制,加速度被限制在).

  • 一种测量扰动(MD):前车速度,,这使得MPC可以预测其对间距误差的影响。

给定这种MPC结构,通过在初始工作点对Simulink模型进行线性化来定义线性预测模型。金宝app这一步需要Simulink®Contr金宝appol Design™软件。

指定线性化的分析点。

io (1) = linio ([ACC' / MPC '), 1“openinput”);% MV:加速度io (2) = linio (mdl的/汽车/ Sum1 '), 1“openinput”);MD:领先速度io (ACC (3) = linio (' / Sum1 '), 1“输出”);% OV(1):间距错误io (4) = linio (mdl“车/主机”), 2,“输出”);% OV(2):主机速度

对植物进行线性化,得到得到的线性模型的最小实现。

sys =线性化(mdl, io);sys = minreal(系统);
1状态删除。

指定设备中的MPC信号类型。

sys = setmpcsignals (sys,“MV”,1,“医学博士”2);

MPC设计

要为工厂模型设计模型预测控制器,首先创建一个MPC控制器,使用默认的预测水平(10)和控制水平(2移动)。

mpc1 = mpc (sys、Ts);
“mpc”对象的“PredictionHorizon”属性为空。尝试PredictionHorizon = 10。mpc对象的“ControlHorizon”属性为空。假设2。- - - >“权重。mpc对象的“操纵变量”属性为空。假设默认的0.00000。- - - >“权重。mpc对象的“操纵变量率”属性为空。假设默认的0.10000。 -->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000. for output(s) y1 and zero weight for output(s) y2

根据仿真初始条件指定控制器标称值。

mpc1. model . nomin . y (1) = (x0_lead-x0_host) - (10+1.4*v0_host);mpc1.Model.Nominal.Y (2) = v0_host;mpc1.Model.Nominal.U (1) = a0_host;mpc1.Model.Nominal.U (2) = v0_lead;

根据变量的工作范围指定比例因子。

mpc1.MV。ScaleFactor = 5;加速度%范围为2 - (-3)mpc1.DV。ScaleFactor = 30;%假设与主机车限速相同mpc1.OV(1)。ScaleFactor = 10;典型间距误差%mpc1.OV(2)。ScaleFactor = 30;主机汽车ACC速度限制

指定MV约束。

mpc1.MV。最小值= 3;%最大减速mpc1.MV。Max = 2;%最大加速度

指定OV约束。为了实现间距控制,将最小间距误差约束设置为0

mpc1.OV(1)。最小值= 0;

指定权重。要实现速度控制,在主机车速度上使用非零权重。

mpc1.Weights。Ov = [0 1];

如果空格错误约束是活动的,控制器将约束违反作为高于参考跟踪的更高优先级处理。此时,ACC系统处于间距控制模式,保持安全距离。

如果空格错误约束是不活动的,控制器执行参考跟踪。在这种情况下,ACC系统处于速度控制模式,并达到驾驶员设定的巡航速度。

将MPC控制器写入Simulink块。金宝app

set_param ([ACC' / MPC '),“mpcobj”“mpc1”

仿真分析

用设计的模型预测控制器进行仿真。

sim (mdl)
——>转换模型到离散时间。假设输出干扰添加到测量输出通道2是集成白噪声。假设对测量的1号输出通道没有干扰。——>”模式。没有ise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

绘制模拟结果图。

mpcACCplot (logsout)

在前3秒内,为了达到驾驶员设定的速度,主车会全速加速。

从3秒到13秒,前车缓慢加速。因此,为了与前车保持安全距离,主车的加速速度要慢得多。

从13到25秒,主机车保持驾驶员设定的速度,如图所示速度情节。然而,随着前车速度的降低,间隔误差在20秒后开始接近0。

从25秒到45秒,前车减速,然后再次加速。主车与前车保持安全距离,如图所示距离而且间距误差情节,通过调整它的速度。

从45秒到56秒,间隔误差大于0。因此,主车再次达到驾驶员设定的速度。

从56秒到76秒,重复从25秒到25秒间隔的减速/加速序列。

在本例中,采用模型预测控制设计了一个自适应巡航控制系统。该设计保证了两车之间的实际距离大于安全距离。如果实际距离足够大,那么设计保证车辆遵循驾驶员设定的速度。该实例表明,ACC系统所需的控制目标和约束条件可以通过MPC实现。

从MATLAB路径中删除示例文件夹,并关闭Simulink模型。金宝app

rmpath (fullfile (matlabroot,“例子”“mpc_featured”“主要”));bdclose (mdl)
这个话题有帮助吗?