模型预测控制自适应巡航控制系统
这个例子展示了如何使用模型预测控制器(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)