В этом примере показано, как реализовать адаптивный круиз-контроль с помощью подхода управления поиском экстремума (ESC). В этом примере цель состоит в том, чтобы сделать автомобильное перемещение эго при скорости набора при поддержании безопасного расстояния от ведущего автомобиля путем управления продольным ускорением и торможением.
Адаптивный круиз-контроль (ACC) является системой, спроектированной, чтобы помочь транспортным средствам обеспечить безопасное следующее расстояние и остаться в ограничении скорости. Транспортное средство, оборудованное системой ACC (автомобиль эго), использует радар, чтобы измерить относительное расстояние () и относительная скорость () относительно ведущего транспортного средства. Система ACC спроектирована, чтобы обеспечить желаемую крейсерскую скорость () или обеспечьте относительное безопасное расстояние () от ведущего автомобиля. Переключатель в цели управления определяется на основе следующих условий.
если , система ACC следует за желаемой ссылочной скоростью круиза, которой управляет драйвер.
если , система ACC управляет относительным положением автомобиля эго относительно ведущего автомобиля.
Этот пример использует то же эго и ведущую модель автомобиля как Адаптивная Система Круиз-контроля Используя Прогнозирующее Управление Модели (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 position for lead car (m) v0_lead = 25; % initial velocity for lead car (m/s) x0_ego = 10; % initial position for ego car (m) v0_ego = 20; % initial velocity for ego car (m/s)
Контроллер поиска экстремума достигает удовлетворительной эффективности управления путем корректировки параметров управления, чтобы максимизировать целевую функцию в режиме реального времени. В данном примере используйте следующую целевую функцию, которая зависит от относительного расстояния, безопасного расстояния, относительной скорости и скорости набора.
Здесь, и веса целевой функции для ошибки по дальности и скоростных остаточных членов, соответственно.
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 реализует алгоритм ESC с помощью Экстремума, Ища Блок управления. Сконфигурируйте параметры для этого блока.
Задайте количество параметров, чтобы настроиться (три усиления контроллера). Диспетчер использует отдельный настраивающий цикл для каждого параметра.
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)
Используйте фильтр lowpass, чтобы удалить высокочастотный шум из демодулируемого сигнала и фильтра высоких частот, чтобы удалить смещение из встревоженного сигнала целевой функции. Задайте частоты среза для этих фильтров.
omega_lpf = 0.04; omega_hpf = 0.01;
Чтобы симулировать ESC адаптивный контроллер круиза, откройте ExtremumSeekingControlACC
модель.
mdl = 'ExtremumSeekingControlACC';
open_system(mdl)
Динамика Объекта и Объективная подсистема содержат модели ACC и вычисляют целевую функцию для алгоритма ESC.
open_system([mdl '/Plant Dynamics and Objective'])
Симулируйте модель. Во время симуляции ведущая автомобильная скорость варьируется синусоидально. Поэтому автомобиль эго должен настроить свою скорость, чтобы компенсировать.
sim(mdl);
Следующий график показывает относительное расстояние между ведущим транспортным средством и эго и безопасное расстояние.
Безопасное расстояние варьируется, когда автомобильная скорость эго изменяется.
Относительное расстояние между эго и ведущими автомобилями иногда понижается немного ниже безопасного расстояния. Этот результат состоит в том, потому что система ACC осуществляет относительное расстояние с помощью мягкого ограничения.
open_system([mdl '/Plant Dynamics and Objective/Simulation results/Spacing error'])
Просмотрите скорости эго и ведущих автомобилей наряду с автомобильной скоростью набора эго. Чтобы обеспечить безопасное расстояние, система ACC настраивает автомобильную скорость эго, когда ведущая автомобильная скорость изменяется. Когда ведущая автомобильная скорость больше скорости набора, автомобиль эго прекращает отслеживать ведущую автомобильную скорость и круизы как скорость набора.
open_system([mdl '/Plant Dynamics and Objective/Simulation results/Distance'])
Следующий график показывает функцию стоимости, которую ESC стремится оптимизировать при поиске усилений оптимального управления.
open_system([mdl '/Plant Dynamics and Objective/Simulation results/Cost'])
Просмотрите получившиеся усиления контроллера, которые адаптируются в течение симуляции. Главный график , средний график , и нижний график . Колебания значений усиления происходят из-за сигналов модуляции от Экстремума, Ища Блок управления.
open_system([mdl '/Plant Dynamics and Objective/Gains'])
bdclose('ExtremumSeekingControlACC')