基于极值搜索控制的自适应巡航控制
此示例说明如何采用极值搜索控制 (ESC) 方法实现自适应巡航控制。此示例中,目标是通过控制纵向加速度和制动,使自车以设定速度行驶,同时与前车保持安全距离。
自适应巡航控制系统
自适应巡航控制 (ACC) 是一种旨在帮助车辆维持安全跟车距离并遵守限速要求的系统。搭载 ACC 系统的车辆(自车)通过雷达测量与前车的相对距离 () 和相对速度 ()。ACC 系统设计用于维持期望巡航速度 () 或与前车保持相对安全距离 ()。控制目标的切换基于以下条件确定。
如果 ,ACC 系统会遵循驾驶员设定的期望巡航速度。
如果 ,ACC 系统会控制自车与前车的相对位置。
此示例采用与Adaptive Cruise Control System Using Model Predictive Control (Model Predictive Control Toolbox)相同的自车和前车模型。
将纵向车辆动力学实现为简化二阶线性模型。
G = tf(1,[0.5,1,0]);
配置此示例的 ACC 参数。
D_default = 10; % Default spacing (m) t_gap = 1.4; % Time gap (s) v_set = 30; % Driver-set velocity (m/s) amin_ego = -3; % Minimum acceleration for driver comfort (m/s^2) amax_ego = 2; % Maximum acceleration for driver comfort (m/s^2) Ts = 0.1; % Sample time (s) Tf = 150; % Duration (s)
指定前车和自车的初始位置与速度。
x0_lead = 50; % Initial lead car position (m) v0_lead = 25; % Initial lead car velocity (m/s) x0_ego = 10; % Initial ego car position (m) v0_ego = 20; % Initial ego car velocity (m/s)
基于极值搜索控制的 ACC
极值搜索控制器通过实时调整控制参数以最大化目标函数,从而实现理想控制性能。对于此示例,请使用以下目标函数,该函数依赖于相对距离、安全距离、相对速度和设定速度。
其中, 和 分别为距离误差项和速度误差项的目标函数权重。
Qd = 0.5; Qv = 1;
极值搜索控制器对以下控制器增益进行自适应调整。
- 位置误差增益
- 速度误差增益
- 相对速度增益
指定增益值的初始猜测值。
Kverr = 1; % ACC velocity error gain Kxerr = 1; % ACC spacing error gain Kvrel = 0.5; % ACC relative velocity gain
指定极值搜索控制参数
Simulink® Control Design™ 软件通过 Extremum Seeking Control 模块实现 ESC 算法。配置该模块的参数。
指定待调节参数数量(3 个控制器增益)。控制器为每个参数使用单独的调节环路。
N = 3;
根据每个参数的学习率 lr,对初始增益值进行缩放,以此设定参数更新积分器的初始条件。
lr = 0.02*[2 3 1]; IC = [Kverr,Kxerr,Kvrel];
通过指定频率 (omega)、相位(phi_1 和 phi_2)和幅值(a 和 b),配置解调与调制信号。每个参数必须使用不同的强制频率。对于此示例,所有参数采用相同的调制与解调相位及幅值。
omega = 0.8*[5,7,8]; % Forcing frequency (rad/s) a = 0.01; % Demodulation amplitude b = 0.5*lr; % Modulation amplitude phi_1 = 0; % Demodulation phase (rad) phi_2 = pi/4; % Modulation phase (rad)
采用低通滤波器去除解调信号中的高频噪声,采用高通滤波器去除受扰目标函数信号中的偏置。指定这些滤波器的截止频率。
omega_lpf = 0.04; omega_hpf = 0.01;
自适应巡航控制系统仿真
打开 ExtremumSeekingControlACC 模型,即可对基于 ESC 的自适应巡航控制器进行仿真。
mdl = 'ExtremumSeekingControlACC';
open_system(mdl)
Plant Dynamics and Objective 子系统包含 ACC 模型,并计算 ESC 算法所需的目标函数。
open_system([mdl '/Plant Dynamics and Objective'])
仿真模型。仿真过程中,前车速度按正弦规律变化。因此,自车必须调节速度以补偿该变化。
sim(mdl);


下图展示前车与自车的相对距离及安全距离。
安全距离随自车速度变化。
前者与自车的相对距离偶尔略低于安全距离。原因在于,ACC 系统采用软约束实现距离控制。
open_system([mdl '/Plant Dynamics and Objective/Simulation results/Distance'])
查看自车速度、前车速度及自车设定速度。为维持安全距离,ACC 系统可根据前车速度变化调节自车速度。当前车速度高于设定速度时,自车停止跟踪前车速度,转而以设定速度巡航。
open_system([mdl '/Plant Dynamics and Objective/Simulation results/Velocity'])

下一幅图显示了 ESC 在寻找最优控制增益过程中待优化的代价函数。
open_system([mdl '/Plant Dynamics and Objective/Simulation results/Cost'])

查看仿真过程中自适应调整的控制器增益。顶部图为 ,中部为 ,底部为 。增益值的波动由极值搜索控制模块的调制信号导致。
open_system([mdl '/Plant Dynamics and Objective/Gains'])

bdclose('ExtremumSeekingControlACC')