Адаптивный круиз-контроль с слиянием датчиков

Этот пример показов, как реализовать основанный на слиянии датчиков адаптивный круиз- контроллера для транспортного средства, перемещающегося по изогнутой дороге, используя слияние датчиков.

В этом примере вы:

  1. Проверьте систему управления, которая объединяет слияние датчиков и адаптивный круиз- контроллер (ACC). Предусмотрены два варианта ACC: классический контроллер и блок Adaptive Cruise Control System из Model Predictive Control Toolbox.

  2. Протестируйте систему управления в замкнутой модели Simulink с помощью синтетических данных, сгенерированных Automated Driving Toolbox.

  3. Сконфигурируйте настройки генерации кода для симуляции цикл и автоматически сгенерируйте код для алгоритма управления.

Введение

Адаптивная система круиз-контроля является системой управления, которая изменяет скорость автомобиля , оборудованного датчиком в ответ на условия на дороге. Как и в регулярном круиз-контроле, драйвер устанавливает желаемую для автомобиля скорость; в сложение, адаптивная система круиз-контроля может замедлить автомобиль , оборудованный датчиком, если другое транспортное средство движется медленнее в полосе перед ним.

Чтобы ACC работал правильно, автомобиль , оборудованный датчиком должен определить, как кривая перед ним и какой автомобиль является «ведущим автомобилем», то есть перед автомобиль , оборудованный датчиком в полосе. Типичный сценарий с точки зрения автомобиля , оборудованного датчиком показан на следующем рисунке. Автомобиль , оборудованный датчиком (синий) перемещается по изогнутой дороге. В начале головная машина - это розовая машина. Затем фиолетовый автомобиль врезается в полосу автомобиля , оборудованного датчиком и становится головным автомобилем. Через некоторое время фиолетовая машина меняется на другую полосу, и розовая машина снова становится головной машиной. Розовый автомобиль остается ведущим автомобилем после. Проект ACC должен реагировать на изменение в ведущем автомобиле на дороге.

Текущие проекты ACC основаны в основном на измерениях дальности и скорости области значений, полученных с радара, и рассчитаны на лучшую работу по прямым дорогам. Пример такой системы приведен в Adaptive Cruise Control System Using Model Predictive Control (Model Predictive Control Toolbox) и в Automotive Adaptive Cruise Control с использованием технологии FMCW (Radar Toolbox). Переходя от передовых проектов систем помощи водителям (ADAS) к более автономным системам, АКК должен решать следующие задачи:

  1. Оценка относительных положений и скоростей автомобилей, которые находятся рядом с автомобилем , оборудованным датчиком и которые имеют значительное боковое движение относительно автомобиля , оборудованного датчиком.

  2. Оценка маршрута перед автомобилем , оборудованным датчиком, чтобы найти, какой автомобиль перед автомобилем , оборудованным датчиком является ближайшим в том же маршруте.

  3. Реагирование на агрессивные маневры других транспортных средств в окружении, в частности, когда другой автомобиль врезается в автомобиль , оборудованный датчиком полосу.

Этот пример демонстрирует два основных сложений к существующим проектам ACC, которые отвечают этим проблемам: добавление системы слияния датчиков и обновление проектирования контроллера на основе прогнозирующего управления (MPC). Система слияния и слежения датчиков, которая использует как датчики зрения, так и радары, обеспечивает следующие преимущества:

  1. Это объединяет лучшее боковое измерение положения и скорости, полученные с датчиков зрения, с измерением области значений и скорости области значений от радарных датчиков.

  2. Датчик зрения может обнаруживать полосы движения, предоставлять оценку бокового положения полосы движения относительно автомобиль , оборудованный датчиком и позиционировать другие автомобили в сцене относительно автомобиль , оборудованный датчиком полосы движения. Этот пример принимает идеальное обнаружение маршрута.

Продвинутый контроллер MPC добавляет возможности реагировать на более агрессивные маневры других транспортных средств в окружении. В отличие от классического контроллера, который использует ПИД проекта с постоянными усилениями, контроллер MPC регулирует скорость автомобиля , оборудованного датчиком, сохраняя строгое ограничение безопасного расстояния. Поэтому контроллер может применить более агрессивные маневры, когда окружение быстро изменяется аналогично тому, что сделал бы человеческий драйвер.

Обзор Тестовой модели и Результатов симуляции

Чтобы открыть основную модель Simulink, используйте следующую команду:

open_system('ACCTestBenchExample')

Модель содержит две основные подсистемы:

  1. ACC с Sensor Fusion, который моделирует слияние датчиков и управляет продольным ускорением транспортного средства. Этот компонент позволяет вам выбрать или классическую, или прогнозирующую версию проекта.

  2. Подсистема транспортное средство и окружение, которая моделирует движение автомобиль , оборудованный датчиком и моделирует окружение. Симуляция радара и датчиков зрения предоставляет синтетические данные подсистеме управления.

Чтобы запустить связанный скрипт инициализации перед запуском модели, в модели Simulink, нажмите Run Setup Script или, в командной строке, введите следующее:

helperACCSetUp

Скрипт загружает определенные константы, необходимые модели Simulink, такие как расчётные параметры транспортного средства и ACC. ACC по умолчанию является классическим контроллером. Скрипт также создает шины, которые требуются для определения входов и выходов для модели системы управления. Эти шины должны быть определены в рабочей области перед компиляцией модели. Когда модель компилируется, дополнительные шины Simulink автоматически генерируются их аналогичными блоками.

Чтобы построить график результатов симуляции и изобразить окружение автомобиля , оборудованного датчиком, включая отслеживаемые объекты, используйте Bird ' s-Eye Scope. Bird 's-Eye Scope является инструментом визуализации на уровне модели, который можно открыть с панели инструментов Simulink. На вкладке Simulation, в разделе Результаты, нажмите Bird ' s-Eye Scope. После открытия возможностей нажатия кнопки Find Signals, чтобы настроить сигналы. Следующие команды запускают симуляцию в 15 секунд, чтобы получить картинку средней симуляции и запустить снова до конца симуляции, чтобы собрать результаты.

sim('ACCTestBenchExample','StopTime','15') %Simulate 15 seconds
sim('ACCTestBenchExample') %Simulate to end of scenario
ans = 

  Simulink.SimulationOutput:
                logsout: [1x1 Simulink.SimulationData.Dataset] 
                   tout: [151x1 double] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

На Bird ' s-Eye Scope показаны результаты слияния датчика. Это показывает, как радар и датчики зрения обнаруживают транспортные средства в зонах покрытия их датчиков. В нем также показаны дорожки, поддерживаемые блоком Multi Object Tracker. Жёлтая дорожка показывает самый важный объект (MIO): ближайший трек перед автомобилем , оборудованным датчиком в его полосе. Мы видим, что в начале сценария важнейшим объектом является быстро движущийся автомобиль, опережающий автомобиль , оборудованный датчиком. Когда проезжающий автомобиль приближается к медленно движущемуся автомобилю, он пересекает левую полосу, и система слияния датчиков распознает его как MIO. Этот автомобиль намного ближе к автомобилю , оборудованному датчиком и намного медленнее, чем он. Таким образом, АКК должен замедлить автомобиль , оборудованный датчиком.

В следующих результатах для классической системы ACC:

  • Верхний график показывает скорость автомобиля , оборудованного датчиком.

  • Средний график показывает относительное расстояние между автомобилем , оборудованным датчиком и ведущим автомобилем.

  • Нижний график показывает автомобилю , оборудованному датчиком ускорение.

В этом примере необработанные данные из системы отслеживания и слияния датчиков используются для проекта ACC без последующей обработки. Вы можете ожидать, что увидите некоторые 'шипы' (средний график) из-за неопределенностей в модели датчика, особенно когда другой автомобиль врезается или покидает автомобиль , оборудованный датчиком полосу.

Чтобы просмотреть результаты симуляции, используйте следующую команду.

helperPlotACCResults(logsout,default_spacing,time_gap)

  • В первые 11 секунд головной автомобиль намного опережает автомобиль , оборудованный датчиком (средний график). Автомобиль , оборудованный датчиком ускоряется и достигает заданной водителем скорости V_set (верхний график).

  • Другой автомобиль становится ведущим автомобилем от 11 до 20 секунд, когда автомобиль врезается в полосу автомобиль , оборудованный датчиком (средний график). Когда расстояние между головным автомобилем и автомобилем , оборудованным датчиком велико (11-15 секунд), автомобиль , оборудованный датчиком все еще перемещается с установленной водителем скоростью. Когда расстояние становится маленьким (15-20 секунд), автомобиль , оборудованный датчиком замедляется, чтобы сохранить безопасное расстояние от головного автомобиля (верхний график).

  • От 20 до 34 секунд машина спереди переходит на другую полосу, и появляется новый головной автомобиль (средний график). Поскольку расстояние между головной машиной и автомобилем , оборудованным датчиком велико, автомобиль , оборудованный датчиком ускоряется, пока не достигает установленной водителем скорости в 27 секунд. Затем автомобиль , оборудованный датчиком продолжает перемещаться с заданной драйвером скоростью (верхняя часть график).

  • Нижний график демонстрирует, что ускорение находится в области значений [-3,2] м/с ^ 2. Плавность переходного процесса указывает, что комфорт драйвера удовлетворительный.

В проекте ACC на основе MPC базовая задача оптимизации сформулирована путем отслеживания установленной водителем скорости при условии обеспечения безопасного расстояния от головного автомобиля. Описание проектирования контроллера MPC приведено в разделе Adaptive Cruise Controller. Чтобы запустить модель с проектом MPC, сначала активируйте вариант MPC, а затем запустите следующие команды. Этот шаг требует программного обеспечения Model Predictive Control Toolbox. Проверить существование этой лицензии можно с помощью следующего кода. Если кода не существует, изображается выборка аналогичных результатов.

hasMPCLicense = license('checkout','MPC_Toolbox');
if hasMPCLicense
    controller_type = 2;
    sim('ACCTestBenchExample','StopTime','15') %Simulate 15 seconds
    sim('ACCTestBenchExample') %Simulate to end of scenario
else
    load data_mpc
end
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

ans = 

  Simulink.SimulationOutput:
                logsout: [1x1 Simulink.SimulationData.Dataset] 
                   tout: [151x1 double] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

В результатах симуляции для ACC на основе MPC, аналогичных классическому проекту ACC, достигаются цели управления скоростью и интервалами. По сравнению с классическим проектом ACC, основанный на MPC ACC является более агрессивным, поскольку он использует полный дроссель или торможение для ускорения или замедления. Это поведение связано с явным ограничением относительного расстояния. Агрессивное поведение может быть предпочтительным, когда происходят внезапные изменения на дороге, например, когда головной автомобиль изменяется на медленный автомобиль. Чтобы сделать контроллер менее агрессивным, откройте маску блока Adaptive Cruise Control System и уменьшите значение параметра Controller Behavior. Как отмечалось ранее, всплески на среднем графике связаны с неопределенностями в модели датчика.

Чтобы просмотреть результаты симуляции с помощью основанного на MPC ACC, используйте следующую команду.

helperPlotACCResults(logsout,default_spacing,time_gap)

Ниже более подробно описаны функции каждой подсистемы в тестовой модели. Подсистема Adaptive Cruise Контроллера with Sensor Fusion содержит два основных компонента:

  1. Подсистема слежения и слияния датчиков

  2. Адаптивная подсистема Контроллера круиза

open_system('ACCTestBenchExample/ACC with Sensor Fusion')

Отслеживание и слияние датчиков

Подсистема Tracking and Sensor Fusion обрабатывает визуальные и радиолокационные обнаружения, поступающие от подсистемы Транспортного средства и Окружения, и генерирует комплексную картину ситуации окружения вокруг автомобиля , оборудованного датчиком. Кроме того, он предоставляет ACC оценку ближайшего автомобиля в полосе перед автомобилем , оборудованным датчиком.

open_system('ACCWithSensorFusionMdlRef/Tracking and Sensor Fusion')

Основным блоком подсистемы Tracking and Sensor Fusion является блок Multi-Object Tracker, входами которого являются объединенный список всех обнаружений датчика и время предсказания. Выходы блока Multi Object Tracker представляют собой список подтвержденных треков.

Блок Detection Concatenation конкатенирует обнаружения зрения и радара. Время предсказания управляется временем в Подсистеме Транспортного средства и Окружения.

Блок Detection Clustering кластеризует несколько радиолокационных обнаружений, так как трекер ожидает не более одного обнаружения на каждый объект на датчик.

The findLeadCar Блок MATLAB function находит, какой автомобиль ближе всего к автомобилю , оборудованному датчиком и опережает его в той же полосе по списку подтвержденных путей и кривизне дороги. Этот автомобиль упоминается как головной автомобиль и может меняться при движении автомобилей на полосу перед автомобилем , оборудованным датчиком и из нее. Функция обеспечивает положение и скорость свинцового вагона относительно автомобиля , оборудованного датчиком и индекс к наиболее важной дорожке объекта (MIO).

Адаптивный круиз- Контроллер

Адаптивный круиз- контроллер имеет два варианта: классический проект (по умолчанию) и основанный на MPC проект. Для обоих проектов применяются следующие принципы проектирования. Оснащенное ACC транспортное средство (автомобиль , оборудованный датчиком) использует слияние датчиков для оценки относительного расстояния и относительной скорости относительно головного автомобиля. ACC заставляет автомобиль , оборудованный датчиком перемещаться с заданной водителем скоростью при сохранении безопасного расстояния от головного автомобиля. Безопасное расстояние между головным автомобилем и автомобилем , оборудованным датчиком определяется как

$D_{safe} = D_{default} + T_{gap} \cdot V_x$

где интервалы по умолчанию $D_{default}$и временная погрешность$T_{gap}$ являются параметрами проекта и являются$V_x$ продольной скоростью ego vehicle. ACC генерирует продольное ускорение для автомобиля , оборудованного датчиком на основе следующих входов:

  • Продольная скорость автомобиля , оборудованного датчиком

  • Относительное расстояние между головным автомобилем и автомобилем , оборудованным датчиком (от системы слежения и слияния датчиков)

  • Относительная скорость между головным автомобилем и автомобилем , оборудованным датчиком (от системы слежения и слияния датчиков)

Учитывая физические ограничения автомобиля , оборудованного датчиком, продольное ускорение ограничено областью значений [-3,2].$m/s^2$

В классическом проекте ACC, если относительное расстояние меньше безопасного расстояния, то основной целью является замедление и поддержание безопасного расстояния. Если относительное расстояние больше безопасного расстояния, то основной целью является достижение заданной драйвером скорости с сохранением безопасного расстояния. Эти принципы проекта достигаются с помощью блоков Min и Switch.

open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Classical')

В проекте ACC на основе MPC базовая задача оптимизации сформулирована путем отслеживания заданной драйвером скорости, удовлетворяющей ограничению. Ограничение устанавливает, что относительное расстояние всегда больше безопасного расстояния.

Чтобы сконфигурировать блок Adaptive Cruise Control System, используйте параметры, определенные в helperACCSetUp файл. Например, линейная модель для проекта ACC, $G$и$G$ получена из динамики аппарата. Два блока Switch реализуют простую логику, чтобы обрабатывать большие числа от датчика (для примера, датчик может вернуться Inf если MIO не обнаружен).

open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Model Predictive Control')

Для получения дополнительной информации о проекте MPC для ACC, смотрите Адаптивную систему круиз-контроля с использованием прогнозирующего контроля модели (Model Predictive Control Toolbox).

Транспортное средство и окружение

Подсистема Транспортного средства и Окружения состоит из двух частей:

  1. Динамика аппарата и глобальные координаты

  2. Симуляция актёра и датчика

open_system('ACCTestBenchExample/Vehicle and Environment')

Подсистема Динамики аппарата моделирует динамику аппарата с блоком Bicycle Модели - Force Входа из Automated Driving Toolbox. Динамика автомобиля с входом$u$ (продольное ускорение) и углом наклона переднего рулевого управления $\delta$аппроксимируется:

В векторе состояния$V_y$ обозначает поперечную скорость,$V_x$ обозначает продольную скорость и$\psi$ обозначает угол рыскания. Параметры транспортного средства приведены в helperACCSetUp файл.

Выходы динамики аппарата (такие как продольная скорость$V_x$ и поперечная скорость) $V_y$основаны на фиксированных координатах тела. Чтобы получить траекторию, пройденную транспортным средством, фиксированные координаты тела преобразуются в глобальные координаты через следующие зависимости:

$$\dot{X} = V_x\cos(\psi)-V_y\sin(\psi),\quad \dot{Y} = V_x\sin(\psi)+V_y\cos(\psi)$$

Угол рыскания$\psi$ и скорость угла рыскания$\dot{\psi}$ также преобразуются в модули степеней.

Цель модели рулевого управления драйвера состоит в том, чтобы удержать транспортное средство в своей полосе и следовать по изогнутой дороге, управляя углом наклона переднего рулевого управления. $\delta$Эта цель достигается путем приведения ошибки угла рыскания$e_2$ и ошибки бокового смещения к$e_1$ нулю (см. Следующий рисунок), где

$$\dot{e_1} = V_xe_2+V_y,\quad e_2 = \psi - \psi_{des}$$

Желаемая скорость угла рыскания задается как$Vx/R$ ($R$обозначает радиус кривизны дороги).

Подсистема Actors and Sensor Simulation генерирует синтетические данные о датчике, необходимые для отслеживания и слияния датчиков. Перед запуском этого примера приложение Driving Scenario Designer использовалось для создания сценария с изогнутой дорогой и несколькими актерами, движущимися по дороге. Затем дороги и актёры из этого сценария были сохранены в файле сценария ACCTestBenchScenario.mat. Для просмотра способа определения сценария см. раздел Создание сценария.

open_system('ACCTestBenchExample/Vehicle and Environment/Actors and Sensor Simulation')

Движение автомобиля , оборудованного датчиком управляется системой управления и не считывается из файла сценария. Вместо этого положение автомобиля , оборудованного датчиком, скорость, угол рыскания и скорость рыскания принимаются как входы от блока Динамики аппарата и упаковываются в одну структуру положения актёра, используя packEgo Блок MATLAB function.

Блок Scenario Reader считывает данные положения актёра из файла сценария ACCTestBenchScenario.mat. Блок преобразует положения актёра из мировых координат сценария в автомобиль , оборудованный датчиком координаты. Положения актёра транслируются по шине, сгенерированной блоком. В этом примере вы используете блок Vision Detection Generator и блок Radar Detection Generator. Оба датчика являются дальнобойными и перспективными и обеспечивают хорошее покрытие передней части автомобиля , оборудованного датчиком, по мере необходимости для ACC. Датчики используют положения актёра в координатах автомобиля , оборудованного датчиком, чтобы сгенерировать списки обнаружений автомобиля перед автомобилем , оборудованным датчиком. Наконец, блок синхроимпульса используется в качестве примера того, как транспортное средство имело бы централизованный источник времени. Время используется блоком Multi Object Tracker.

Создание сценария

Приложение Driving Scenario Designer позволяет вам определять дороги и транспортные средства, движущиеся по дорогам. В данном примере задаются две параллельные дороги постоянной кривизны. Для определения дороги необходимо задать центры дороги, ширину дороги и банковский угол (при необходимости). Центры дорог были выбраны путем отбора точек вдоль круговой дуги, охватывающей поворот на 60 степени постоянного радиуса кривизны.

Все транспортные средства определяются в сценарии. Чтобы определить движение транспортных средств, вы задаете их траекторию набором путевых точек и скоростей. Быстрый способ определения точек пути - это выбор подмножества центров дорог, определенных ранее, со смещением налево или справа от центров дорог для управления полосой движения транспортных средств.

В этом примере показаны четыре транспортных средства: быстроходный автомобиль в левой полосе, медленно движущийся автомобиль в правой полосе, приближающийся по противоположной стороне дороги автомобиль и автомобиль, который стартует по правой полосе, но затем переходит в левую полосу, чтобы пройти медленно движущийся автомобиль.

Сценарий может быть изменен с помощью приложения Driving Scenario Designer и восстановлен к тому же файлу сценария ACCTestBenchScenario.mat. Блок Scenario Reader автоматически извлекает изменения при повторном запуске симуляции. Чтобы создать сценарий программно, можно использовать helperScenarioAuthoring функция.

plotACCScenario

Генерация кода для алгоритма управления

Хотя вся модель не поддерживает генерацию кода, ACCWithSensorFusionMdlRef модель сконфигурирована для поддержки генерации кода С с помощью программного обеспечения Embedded Coder. Чтобы проверить, есть ли у вас доступ к Embedded Coder, запустите:

hasEmbeddedCoderLicense = license('checkout','RTW_Embedded_Coder')

Можно сгенерировать функцию C для модели и исследовать отчет генерации кода при запуске:

if hasEmbeddedCoderLicense
    slbuild('ACCWithSensorFusionMdlRef')
end

Можно проверить, что скомпилированный код С ведет себя должным образом, используя симуляцию цикле (SIL). Чтобы симулировать ACCWithSensorFusionMdlRef ссылка модели в режиме SIL, используйте:

if hasEmbeddedCoderLicense
    set_param('ACCTestBenchExample/ACC with Sensor Fusion',...
        'SimulationMode','Software-in-the-loop (SIL)')
end

Когда вы запускаете ACCTestBenchExample модель, код генерируется, компилируется и выполняется для ACCWithSensorFusionMdlRef модель. Это позволяет вам протестировать поведение скомпилированного кода посредством симуляции.

Заключения

Этот пример показов, как реализовать интегрированную адаптивную круиз- контроллер (ACC) на изогнутой дороге с слиянием датчиков, протестировать его в Simulink с помощью синтетических данных, сгенерированных Automated Driving Toolbox, компонентизировать его и автоматически сгенерировать код для него.

bdclose all

См. также

Функции

Блоки

Объекты

Похожие темы