Этот пример показывает, как реализовать датчик основанный на сплаве автомобильный адаптивный контроллер круиза для автомобиля, перемещающегося на кривой дороге с помощью сплава датчика.
В этом примере, вас:
Рассмотрите систему управления, которая комбинирует сплав датчика и адаптивный контроллер круиза (ACC). Два варианта ACC обеспечиваются: классический контроллер и блок Adaptive Cruise Control System от Model Predictive Control Toolbox.
Протестируйте систему управления в модели Simulink с обратной связью с помощью синтетических данных, сгенерированных Automated Driving Toolbox.
Сконфигурируйте настройки генерации кода для программного обеспечения в симуляции цикла, и автоматически сгенерируйте код для алгоритма управления.
Адаптивная система круиз-контроля является системой управления, которая изменяет скорость автомобиля, оборудованного датчиком в ответ на условия на дороге. Как в регулярном круиз-контроле, наборы драйверов желаемая скорость для автомобиля; кроме того, адаптивная система круиз-контроля может замедлить автомобиль, оборудованный датчиком, если существует другой автомобиль, перемещающийся медленнее в маршрут перед ним.
Для ACC, чтобы работать правильно, автомобиль, оборудованный датчиком должен определить, как маршрут перед ним изгибается, и какой автомобиль является 'ведущим автомобилем', то есть, перед автомобилем, оборудованным датчиком в маршруте. Типичный сценарий с точки зрения автомобиля, оборудованного датчиком показывают в следующей фигуре. Автомобиль, оборудованный датчиком (синие) перемещения вдоль кривой дороги. Вначале, ведущий автомобиль является розовым автомобилем. Затем фиолетовый автомобиль сокращает в маршрут автомобиля, оборудованного датчиком и становится ведущим автомобилем. Через некоторое время фиолетовые автомобильные изменения в другом маршруте и розовый автомобиль становятся ведущим автомобилем снова. Розовый автомобиль остается ведущий автомобиль позже. Проект ACC должен реагировать на изменение в ведущем автомобиле на дороге.
Текущие проекты ACC полагаются в основном на область значений и измерения уровня области значений, полученные из радара, и разработаны, чтобы работать лучше всего вдоль прямых дорог. Пример такой системы дан в Адаптивной Системе Круиз-контроля Используя Образцовое Прогнозирующее Управление и в Автомобильном Адаптивном Круиз-контроле Используя Технологию FMCW (Phased Array System Toolbox). Перемещаясь от проектов продвинутой системы помощи водителю (ADAS) до большего количества автономных систем, ACC должен обратиться к следующим проблемам:
Оценка относительных положений и скоростей автомобилей, которые являются около автомобиля, оборудованного датчиком и которые имеют значительное боковое движение относительно автомобиля, оборудованного датчиком.
Оценка, что маршрут перед автомобилем, оборудованным датчиком находит, какой автомобиль перед автомобилем, оборудованным датчиком является самым близким в том же маршруте.
Реакция на агрессивные маневры другими автомобилями в среде, в частности, когда другой автомобиль сокращает в маршрут автомобиля, оборудованного датчиком.
Этот пример демонстрирует два основных добавления к существующим проектам ACC, которые справляются с этими проблемами: добавление системы сплава датчика и обновление проектирования контроллера на основе образцового прогнозирующего управления (MPC). Сплав датчика и система слежения, которая использует и видение и радарные датчики, предоставляют следующие преимущества:
Это комбинирует лучшее боковое измерение положения и скорости, полученной из датчиков видения с областью значений и измерением уровня диапазона от радарных датчиков.
Датчик видения может обнаружить маршруты, обеспечить оценку бокового положения маршрута относительно автомобиля, оборудованного датчиком и расположить другие автомобили в сцену относительно маршрута автомобиля, оборудованного датчиком. Этот пример принимает идеальное обнаружение маршрута.
Усовершенствованный контроллер MPC добавляет способность реагировать на более агрессивные маневры другими автомобилями в среде. В отличие от классического контроллера, который использует проект ПИДа с постоянными усилениями, контроллер MPC регулирует скорость автомобиля, оборудованного датчиком при поддержании строгого безопасного ограничения расстояний. Поэтому контроллер может применить более агрессивные маневры, когда изменения среды быстро похожим способом к тому, что сделал бы человеческий драйвер.
Добавьте папку для примера к пути MATLAB®.
addpath(fullfile(matlabroot,'examples','mpc','main'));
Чтобы открыть основную модель Simulink, используйте следующую команду:
open_system('ACCTestBenchExample')
Модель содержит две основных подсистемы:
ACC с Fusion Датчика, который моделирует сплав датчика и управляет продольным ускорением автомобиля. Этот компонент позволяет вам выбирать или классическую или образцовую прогнозирующую версию управления проекта.
Подсистема Автомобиля и Среды, которая моделирует движение автомобиля, оборудованного датчиком и моделирует среду. Симуляция радара и датчиков видения предоставляет синтетические данные подсистеме управления.
Чтобы запустить связанный скрипт инициализации прежде, чем запустить модель, в модели Simulink, нажимают Run Setup Script или, в командной строке, вводят следующее:
helperACCSetUp
Скрипт загружает определенные константы, необходимые модели Simulink, такие как автомобиль и параметры проекта ACC. ACC по умолчанию является классическим контроллером. Скрипт также создает шины, которые требуются для определения входных параметров в и выходных параметров для системы управления модель, на которую ссылаются. Эти шины должны быть заданы в рабочей области перед образцовой компиляцией. Когда модель компилирует, дополнительные шины Simulink автоматически сгенерированы их соответствующими блоками.
Чтобы построить результаты симуляции и изобразить среду автомобиля, оборудованного датчиком, включая отслеживаемые объекты, используют Видимый с большого расстояния Осциллограф. Видимый с большого расстояния Осциллограф является инструментом визуализации образцового уровня в Simulink, что можно открыть использование меню, предоставленного на панели инструментов модели Simulink. Для получения дополнительной информации смотрите, Осматривают и Анализируют Модели в Simulink (Simulink). После открытия осциллографа нажмите 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]
Видимый с большого расстояния Осциллограф показывает результаты сплава датчика. Это показывает, как радар и датчики видения обнаруживают автомобили в их зонах охвата датчиков. Это также показывает дорожки, сохраняемые блоком Multi Object Tracker. Желтая дорожка показывает самый важный объект (MIO): самая близкая дорожка перед автомобилем, оборудованным датчиком в его маршруте. Мы видим, что в начале сценария, самый важный объект является стремительным автомобилем перед автомобилем, оборудованным датчиком. Когда проезжающий мимо автомобиль становится ближе к медленному автомобилю, он пересекается к левому маршруту, и система сплава датчика распознает, что он MIO. Этот автомобиль намного ближе к автомобилю, оборудованному датчиком и намного медленнее, чем он. Таким образом ACC должен замедлить автомобиль, оборудованный датчиком.
В следующих результатах для классической системы ACC:
Главный график показывает скорость автомобиля, оборудованного датчиком.
Средний график показывает относительное расстояние между автомобилем, оборудованным датчиком и ведущим автомобилем.
Нижний график показывает ускорение автомобиля, оборудованного датчиком.
В этом примере необработанные данные от системы Fusion Отслеживания и Датчика используются для проекта ACC без последующей обработки. Можно ожидать видеть некоторые 'скачки' (средний график) из-за неуверенности в модели датчика особенно, когда другой автомобиль сокращения в или оставит маршрут автомобиля, оборудованного датчиком.
Чтобы просмотреть результаты симуляции, используйте следующую команду.
helperPlotACCResults(logsout,default_spacing,time_gap)
За первые 11 секунд ведущий автомобиль далеко впереди автомобиля, оборудованного датчиком (средний график). Автомобиль, оборудованный датчиком ускоряет и достигает скорости набора драйверов V_set (главный график).
Другой автомобиль становится ведущим автомобилем с 11 до 20 секунд, когда автомобиль сокращает в маршрут автомобиля, оборудованного датчиком (средний график). Когда расстояние между ведущим автомобилем и автомобилем, оборудованным датчиком является большим (11-15 секунд), автомобиль, оборудованный датчиком все еще перемещается в скорости набора драйверов. Когда расстояние становится маленьким (15-20 секунд), автомобиль, оборудованный датчиком замедляется, чтобы поддержать безопасное расстояние от ведущего автомобиля (главный график).
С 20 до 34 секунд автомобиль в передних перемещениях к другому маршруту и новый ведущий автомобиль появляются (средний график). Поскольку расстояние между ведущим автомобилем и автомобилем, оборудованным датчиком является большим, автомобиль, оборудованный датчиком ускоряется, пока это не достигает скорости набора драйверов в 27 секунд. Затем автомобиль, оборудованный датчиком продолжает перемещаться в скорости набора драйверов (главный график).
Нижний график демонстрирует, что ускорение в области значений [-3,2] m/s^2. Сглаженное переходное поведение указывает, что комфорт драйвера является удовлетворительным.
В основанном на MPC проекте ACC базовая задача оптимизации формулируется путем отслеживания скорости набора драйверов, подвергающейся осуществлению безопасного расстояния от ведущего автомобиля. Проектирование контроллера 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.
В результатах симуляции для основанного на MPC ACC, подобного классическому проекту ACC, достигаются цели скорости и располагающий управление с интервалами. По сравнению с классическим проектом ACC основанный на MPC ACC более агрессивен, когда это использует полный газ или тормозящий для ускорения или замедления. Это поведение происходит из-за явного ограничения на относительное расстояние. Агрессивное поведение может быть предпочтено, когда внезапные изменения на дороге происходят, такой как тогда, когда ведущий автомобиль изменяется, чтобы быть медленным автомобилем. Чтобы сделать контроллер менее агрессивным, откройте маску блока Adaptive Cruise Control System и уменьшайте значение параметра Поведения Контроллера. Как ранее отмечено, скачки в среднем графике происходят из-за неуверенности в модели датчика.
Чтобы просмотреть результаты симуляции с основанным на MPC ACC, используйте следующую команду.
helperPlotACCResults(logsout,default_spacing,time_gap)
В следующем функции каждой подсистемы в Тестовой модели описаны более подробно. Адаптивный Контроллер Круиза с подсистемой Fusion Датчика содержит два основных компонента:
Отслеживание и подсистема Fusion Датчика
Адаптивная Подсистема контроллера Круиза
open_system('ACCTestBenchExample/ACC with Sensor Fusion')
Видение процессов подсистемы Fusion Отслеживания и Датчика и радарные обнаружения, прибывающие из подсистемы Автомобиля и Среды и, генерируют всестороннее изображение ситуации среды вокруг автомобиля, оборудованного датчиком. Кроме того, это предоставляет ACC оценку самого близкого автомобиля в маршруте перед автомобилем, оборудованным датчиком.
open_system('ACCWithSensorFusionMdlRef/Tracking and Sensor Fusion')
Основной блок подсистемы Fusion Отслеживания и Датчика является блоком Multi-Object Tracker, входные параметры которого являются объединенным списком всех обнаружений датчика и время прогноза. Вывод от блока Multi Object Tracker является списком подтвержденных дорожек.
Блок Detection Concatenation конкатенирует радарные обнаружения и видение. Время прогноза управляется часами в подсистеме Автомобиля и Среды.
Кластеры блока Detection Clustering несколько радарных обнаружений, поскольку средство отслеживания ожидает самое большее одно обнаружение на объект на датчик.
Блок MATLAB function findLeadCar
находит, какой автомобиль является самым близким к автомобилю, оборудованному датчиком и перед ним в том же самом маршрут с помощью списка подтвержденных дорожек и искривления дороги. Этот автомобиль упоминается как ведущий автомобиль и может измениться, когда автомобили перемещаются в и из маршрута перед автомобилем, оборудованным датчиком. Функция обеспечивает положение и скорость ведущего автомобиля относительно автомобиля, оборудованного датчиком и индекса к дорожке самого важного объекта (MIO).
У адаптивного контроллера круиза есть два варианта: классический проект (значение по умолчанию) и основанный на MPC проект. Для обоих проектов применяются следующие принципы разработки. ACC оборудовал автомобиль сплав датчика использования (автомобиля, оборудованного датчиком), чтобы оценить относительное расстояние и относительную скорость к ведущему автомобилю. ACC делает перемещение автомобиля, оборудованного датчиком в скорости набора драйверов при поддержании безопасного расстояния от ведущего автомобиля. Безопасное расстояние между ведущим автомобилем и автомобилем, оборудованным датчиком задано как
где интервал по умолчанию и разрыв времени являются параметрами проекта, и продольная скорость автомобиля, оборудованного датчиком. ACC генерирует продольное ускорение для автомобиля, оборудованного датчиком на основе следующих входных параметров:
Продольная скорость автомобиля, оборудованного датчиком
Относительное расстояние между ведущим автомобилем и автомобилем, оборудованным датчиком (от системы Fusion Отслеживания и Датчика)
Относительная скорость между ведущим автомобилем и автомобилем, оборудованным датчиком (от системы Fusion Отслеживания и Датчика)
Рассматривая физические ограничения автомобиля, оборудованного датчиком, продольное ускорение ограничивается к области значений [-3,2].
В классическом проекте ACC, если относительное расстояние является меньше, чем безопасное расстояние, то первичная цель состоит в том, чтобы замедлиться и поддержать безопасное расстояние. Если относительное расстояние больше, чем безопасное расстояние, то первичная цель состоит в том, чтобы достигнуть скорости набора драйверов при поддержании безопасного расстояния. Эти принципы разработки достигаются в течение Min и блоков switch.
open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Classical')
В основанном на MPC проекте ACC базовая задача оптимизации формулируется путем отслеживания скорости набора драйверов, подвергающейся ограничению. Ограничение осуществляет то относительное расстояние, всегда больше, чем безопасное расстояние.
Чтобы сконфигурировать блок Adaptive Cruise Control System, используйте параметры, заданные в файле helperACCSetUp
. Например, линейная модель для проекта ACC, и получена из динамики аппарата. Эти два блока switch реализуют простую логику, чтобы обработать большие количества от датчика (например, датчик может возвратить Inf
, когда это не обнаруживает MIO).
open_system('ACCWithSensorFusionMdlRef/Adaptive Cruise Controller/ACC Model Predictive Control')
Для получения дополнительной информации о проекте MPC для ACC смотрите, что Адаптивная Система Круиз-контроля Использует Образцовое Прогнозирующее Управление.
Подсистема Автомобиля и Среды состоит из двух частей:
Динамика аппарата и глобальные координаты
Агент и симуляция датчика
open_system('ACCTestBenchExample/Vehicle and Environment')
Подсистема Динамики аппарата моделирует динамику аппарата с блоком Bicycle Model - Force Input от Automated Driving Toolbox. Динамика аппарата, с входом (продольное ускорение) и передний руководящий угол, аппроксимирована:
В векторе состояния, обозначает боковую скорость, обозначает продольную скорость и обозначает угол отклонения от курса. Параметры автомобиля обеспечиваются в файле helperACCSetUp
.
Выходные параметры от динамики аппарата (такой как продольная скорость и боковая скорость) основаны на зафиксированных координатах тела. Чтобы получить траекторию, пересеченную автомобилем, зафиксированные координаты тела преобразованы в глобальные координаты через следующие отношения:
Угол отклонения от курса и угловой уровень отклонения от курса также преобразованы в модули степеней.
Цель для руководящей модели драйвера состоит в том, чтобы сохранить автомобиль в своем маршруте и идти по кривой дороге путем управления передним руководящим углом. Эта цель достигается путем управления угловой погрешностью отклонения от курса и боковой ошибкой смещения обнулить (см. следующую фигуру), где
Желаемый угловой уровень отклонения от курса дан (обозначает радиус для дорожного искривления).
Подсистема Симуляции Агентов и Датчика генерирует синтетические данные о датчике, требуемые для сплава датчика и отслеживания. Прежде, чем запустить этот пример, приложение Driving Scenario Designer использовалось, чтобы создать сценарий с кривой дорогой и несколькими агентами, перемещающимися на дороге. Дороги и агенты из этого сценария были затем сохранены в файл сценария ACCTestBenchScenario.mat
. Чтобы видеть, как можно задать сценарий, смотрите раздел Scenario Creation.
open_system('ACCTestBenchExample/Vehicle and Environment/Actors and Sensor Simulation')
Движением автомобиля, оборудованного датчиком управляет система управления и не читают из файла сценария. Вместо этого положение автомобиля, оборудованного датчиком, скорость, угол отклонения от курса и уровень отклонения от курса получены как входные параметры от блока Vehicle Dynamics и упаковываются в одну структуру положения агента с помощью блока MATLAB function packEgo
.
Блок Scenario Reader считывает данные о положении агента из файла сценария ACCTestBenchScenario.mat
. Блок преобразовывает положения агента от мировых координат сценария в координаты автомобиля, оборудованного датчиком. Положения агента передаются потоком на шине, сгенерированной блоком. В этом примере вы используете блок Vision Detection Generator и блок Radar Detection Generator. Оба датчика являются длинным диапазоном и перспективный, и предоставляют хорошую страховую защиту передней стороны автомобиля, оборудованного датчиком, по мере необходимости для ACC. Датчики используют положения агента в координатах автомобиля, оборудованного датчиком, чтобы сгенерировать списки обнаружений автомобиля перед автомобилем, оборудованным датчиком. Наконец, блок часов используется в качестве примера того, как автомобиль имел бы централизованный источник времени. Время используется блоком Multi Object Tracker.
Приложение Driving Scenario Designer позволяет вам задавать дороги и автомобили, перемещающиеся на дорогах. В данном примере вы задаете две параллельных дороги постоянной кривизны. Чтобы задать дорогу, вы задаете дорожные центры, дорожную ширину и банковский угол (в случае необходимости). Дорожные центры были выбраны путем выборки точек вдоль круговой дуги, охвата поворота 60 градусов постоянного радиуса искривления.
Вы задаете все автомобили в сценарии. Чтобы задать движение автомобилей, вы задаете их траекторию набором waypoints и скоростей. Быстрый способ задать waypoints путем выбора подмножества дорожных центров, заданных ранее со смещением налево или направо от дорожных центров, чтобы управлять маршрутом, в котором перемещаются автомобили.
Этот пример показывает четыре автомобиля: стремительный автомобиль в левом маршруте, медленный автомобиль в правильном маршруте, автомобиль, приближающийся на противоположной стороне дороги и автомобиле, который запускается на правильном маршруте, но затем перемещается в левый маршрут, чтобы передать медленный автомобиль.
Сценарий может быть изменен с помощью приложения Driving Scenario Designer и resaved к тому же файлу сценария ACCTestBenchScenario.mat
. Блок Scenario Reader автоматически берет изменения, когда симуляция повторно выполняется. Чтобы создать сценарий программно, можно использовать функцию helperScenarioAuthoring
.
plotACCScenario
Модель ACCWithSensorFusionMdlRef
сконфигурирована, чтобы поддержать генерирующийся код С с помощью программного обеспечения Embedded Coder. Чтобы проверять, есть ли у вас доступ к Embedded Coder, выполнению:
hasEmbeddedCoderLicense = license('checkout','RTW_Embedded_Coder')
Можно сгенерировать функцию C для модели и исследовать отчет генерации кода путем выполнения:
if hasEmbeddedCoderLicense rtwbuild('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, разбейте на компоненты его, и автоматически сгенерируйте код для него.
Удалите папку в качестве примера из пути MATLAB.
rmpath(fullfile(matlabroot,'examples','mpc','main')); bdclose all