В этом примере показано, как реализовать основанный на cочетании датчиков автомобильный адаптивный контроллер круиза для транспортного средства, перемещающегося на кривой дороге с помощью cочетания датчиков.
В этом примере, вас:
Рассмотрите систему управления, которая комбинирует cочетание датчиков и адаптивный контроллер круиза (ACC). Два варианта ACC обеспечиваются: классический контроллер и блок Adaptive Cruise Control System из Model Predictive Control Toolbox.
Протестируйте систему управления в модели Simulink с обратной связью с помощью синтетических данных, сгенерированных Automated Driving Toolbox.
Сконфигурируйте настройки генерации кода для программного обеспечения в симуляции цикла, и автоматически сгенерируйте код для алгоритма управления.
Адаптивная система круиз-контроля является системой управления, которая изменяет скорость автомобиля, оборудованного датчиком в ответ на условия на дороге. Как в регулярном круиз-контроле, наборы драйверов желаемая скорость для автомобиля; кроме того, адаптивная система круиз-контроля может замедлить автомобиль, оборудованный датчиком, если существует другое транспортное средство, перемещающееся медленнее в маршрут перед ним.
Для ACC, чтобы работать правильно, автомобиль, оборудованный датчиком должен определить, как маршрут перед ним изгибается, и какой автомобиль является 'ведущим автомобилем', то есть, перед автомобилем, оборудованным датчиком в маршруте. Типичный сценарий с точки зрения автомобиля, оборудованного датчиком показывают в следующем рисунке. Автомобиль, оборудованный датчиком (синие) перемещения вдоль кривой дороги. Вначале, ведущий автомобиль является розовым автомобилем. Затем фиолетовый автомобиль сокращает в маршрут автомобиля, оборудованного датчиком и становится ведущим автомобилем. Через некоторое время фиолетовые автомобильные изменения в другом маршруте и розовый автомобиль становятся ведущим автомобилем снова. Розовый автомобиль остается ведущий автомобиль позже. Проект ACC должен реагировать на изменение в ведущем автомобиле на дороге.
Текущие проекты ACC полагаются в основном на область значений и измерения уровня области значений, полученные из радара, и спроектированы, чтобы работать лучше всего вдоль прямых дорог. Пример такой системы дан в Адаптивной Системе Круиз-контроля Используя Прогнозирующее Управление Модели (Model Predictive Control Toolbox) и в Автомобильном Адаптивном Круиз-контроле Используя Технологию FMCW (Radar Toolbox). Перемещаясь от проектов продвинутой системы помощи водителю (ADAS) до большего количества автономных систем, ACC должен обратиться к следующим проблемам:
Оценка относительных положений и скоростей автомобилей, которые являются около автомобиля, оборудованного датчиком и которые имеют значительное боковое движение относительно автомобиля, оборудованного датчиком.
Оценка, что маршрут перед автомобилем, оборудованным датчиком находит, какой автомобиль перед автомобилем, оборудованным датчиком является самым близким в том же маршруте.
Реакция на агрессивные маневры другими транспортными средствами в среде, в частности, когда другое транспортное средство сокращает в маршрут автомобиля, оборудованного датчиком.
Этот пример демонстрирует два основных добавления к существующим проектам ACC, которые справляются с этими проблемами: добавление системы cочетания датчиков и обновление проектирования контроллера на основе прогнозирующего управления модели (MPC). Cочетание датчиков и система слежения, которая использует и видение и радарные датчики, предоставляют следующие преимущества:
Это комбинирует лучшее боковое измерение положения и скорости, полученной из датчиков видения с областью значений и измерением уровня диапазона от радарных датчиков.
Датчик видения может обнаружить маршруты, обеспечить оценку бокового положения маршрута относительно автомобиля, оборудованного датчиком и расположить другие автомобили в сцену относительно маршрута автомобиля, оборудованного датчиком. Этот пример принимает идеальное обнаружение маршрута.
Усовершенствованный контроллер MPC добавляет способность реагировать на более агрессивные маневры другими транспортными средствами в среде. В отличие от классического контроллера, который использует проект ПИДа с постоянными усилениями, контроллер MPC регулирует скорость автомобиля, оборудованного датчиком при поддержании строгого безопасного ограничения расстояний. Поэтому контроллер может применить более агрессивные маневры, когда изменения среды быстро похожим способом к тому, что сделал бы человеческий драйвер.
Чтобы открыть основную модель Simulink, используйте следующую команду:
open_system('ACCTestBenchExample')
Модель содержит две основных подсистемы:
ACC с Cочетанием датчиков, которое моделирует cочетание датчиков и управляет продольным ускорением транспортного средства. Этот компонент позволяет вам выбирать или классическую или прогнозирующую версию управления модели проекта.
Подсистема Транспортного средства и Среды, которая моделирует движение автомобиля, оборудованного датчиком и моделирует среду. Симуляция радара и датчиков видения предоставляет синтетические данные подсистеме управления.
Чтобы запустить связанный скрипт инициализации прежде, чем запустить модель, в модели 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 показывает результаты cочетания датчиков. Это показывает, как радар и датчики видения обнаруживают транспортные средства в их зонах охвата датчиков. Это также показывает дорожки, обеспеченные блоком Multi Object Tracker. Желтая дорожка показывает самый важный объект (MIO): самая близкая дорожка перед автомобилем, оборудованным датчиком в его маршруте. Мы видим в начале сценария, самый важный объект является стремительным автомобилем перед автомобилем, оборудованным датчиком. Когда проезжающий мимо автомобиль становится ближе к медленному автомобилю, он пересекается к левому маршруту, и система cочетания датчиков распознает, что он MIO. Этот автомобиль намного ближе к автомобилю, оборудованному датчиком и намного медленнее, чем он. Таким образом ACC должен замедлить автомобиль, оборудованный датчиком.
В следующих результатах для классической системы ACC:
Главный график показывает скорость автомобиля, оборудованного датчиком.
Средний график показывает относительное расстояние между автомобилем, оборудованным датчиком и ведущим автомобилем.
Нижний график показывает ускорение автомобиля, оборудованного датчиком.
В этом примере необработанные данные от системы Отслеживания и Cочетания датчиков используются для проекта ACC без последующей обработки. Можно ожидать видеть некоторые 'скачки' (средний график) из-за неопределенности в модели датчика особенно, когда другой автомобиль сокращения в или оставит маршрут автомобиля, оборудованного датчиком.
Чтобы просмотреть результаты симуляции, используйте следующую команду.
helperPlotACCResults(logsout,default_spacing,time_gap)
За первые 11 секунд ведущий автомобиль далеко впереди автомобиля, оборудованного датчиком (средний график). Автомобиль, оборудованный датчиком ускоряет и достигает скорости, установленной драйвером (главный график).
Другой автомобиль становится ведущим автомобилем с 11 до 20 секунд, когда автомобиль сокращает в маршрут автомобиля, оборудованного датчиком (средний график). Когда расстояние между ведущим автомобилем и автомобилем, оборудованным датчиком является большим (11-15 секунд), автомобиль, оборудованный датчиком все еще перемещается при скорости набора драйверов. Когда расстояние становится маленьким (15-20 секунд), автомобиль, оборудованный датчиком замедляется, чтобы обеспечить безопасное расстояние от ведущего автомобиля (главный график).
С 20 до 34 секунд автомобиль в передних перемещениях к другому маршруту и новый ведущий автомобиль появляются (средний график). Поскольку расстояние между ведущим автомобилем и автомобилем, оборудованным датчиком является большим, автомобиль, оборудованный датчиком ускоряется, пока это не достигает скорости набора драйверов в 27 секунд. Затем автомобиль, оборудованный датчиком продолжает перемещаться при скорости набора драйверов (главный график).
Нижний график демонстрирует, что ускорение в области значений [-3,2] м/с^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)
В следующем функции каждой подсистемы в Тестовой модели описаны более подробно. Адаптивный Контроллер Круиза с подсистемой Cочетания датчиков содержит два основных компонента:
Отслеживание и подсистема Cочетания датчиков
Адаптивная Подсистема контроллера Круиза
open_system('ACCTestBenchExample/ACC with Sensor Fusion')
Видение процессов подсистемы Отслеживания и Cочетания датчиков и радарные обнаружения, прибывающие из подсистемы Транспортного средства и Среды и, генерируют всестороннее изображение ситуации среды вокруг автомобиля, оборудованного датчиком. Кроме того, это предоставляет ACC оценку самого близкого автомобиля в маршруте перед автомобилем, оборудованным датчиком.
open_system('ACCWithSensorFusionMdlRef/Tracking and Sensor Fusion')
Основной блок подсистемы Отслеживания и Cочетания датчиков является блоком Multi-Object Tracker, входные параметры которого являются объединенным списком всех обнаружений датчика и время предсказания. Выход от блока Multi Object Tracker является списком подтвержденных дорожек.
Блок Detection Concatenation конкатенирует радарные обнаружения и видение. Время предсказания управляется часами в подсистеме Транспортного средства и Среды.
Кластеры блока Detection Clustering несколько радарных обнаружений, поскольку средство отслеживания ожидает самое большее одно обнаружение на объект на датчик.
findLeadCar
Блок MATLAB function находит, какой автомобиль является самым близким к автомобилю, оборудованному датчиком и перед ним в том же самом маршрут с помощью списка подтвержденных дорожек и искривления дороги. Этот автомобиль упоминается как ведущий автомобиль и может измениться, когда автомобили перемещаются в и из маршрута перед автомобилем, оборудованным датчиком. Функция обеспечивает положение и скорость ведущего автомобиля относительно автомобиля, оборудованного датчиком и индекса к дорожке самого важного объекта (MIO).
У адаптивного контроллера круиза есть два варианта: классический проект (значение по умолчанию) и основанный на MPC проект. Для обоих проектов применяются следующие принципы разработки. ACC оборудовал транспортное средство cочетание датчиков использования (автомобиля, оборудованного датчиком), чтобы оценить относительное расстояние и относительную скорость к ведущему автомобилю. ACC делает перемещение автомобиля, оборудованного датчиком при скорости набора драйверов при поддержании безопасного расстояния от ведущего автомобиля. Безопасное расстояние между ведущим автомобилем и автомобилем, оборудованным датчиком задано как
где интервал по умолчанию и разрыв времени являются расчетными параметрами, и продольная скорость автомобиля, оборудованного датчиком. ACC генерирует продольное ускорение для автомобиля, оборудованного датчиком на основе следующих входных параметров:
Продольная скорость автомобиля, оборудованного датчиком
Относительное расстояние между ведущим автомобилем и автомобилем, оборудованным датчиком (от системы Отслеживания и Cочетания датчиков)
Относительная скорость между ведущим автомобилем и автомобилем, оборудованным датчиком (от системы Отслеживания и Cочетания датчиков)
Рассматривая физические ограничения автомобиля, оборудованного датчиком, продольное ускорение ограничивается к области значений [-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 смотрите, что Адаптивная Система Круиз-контроля Использует Прогнозирующее Управление Модели (Model Predictive Control Toolbox).
Подсистема Транспортного средства и Среды состоит из двух частей:
Динамика аппарата и глобальные координаты
Агент и симуляция датчика
open_system('ACCTestBenchExample/Vehicle and Environment')
Подсистема Динамики аппарата моделирует динамику аппарата с блоком Bicycle Model - Force Input из Automated Driving Toolbox. Динамика аппарата, с входом (продольное ускорение) и передний руководящий угол, аппроксимирована:
В векторе состояния, обозначает поперечную скорость, обозначает продольную скорость и обозначает угол рыскания. Параметры транспортного средства обеспечиваются в helperACCSetUp
файл.
Выходные параметры от динамики аппарата (такой как продольная скорость и поперечная скорость) основаны на зафиксированных координатах тела. Чтобы получить траекторию, пересеченную транспортным средством, зафиксированные координаты тела преобразованы в глобальные координаты через следующие отношения:
Угол рыскания и угловой уровень рыскания также преобразованы в модули степеней.
Цель для руководящей модели драйвера состоит в том, чтобы сохранить транспортное средство в своем маршруте и идти по кривой дороге путем управления передним руководящим углом. Эта цель достигается путем управления угловой погрешностью рыскания и боковой ошибкой смещения обнулить (см. следующую фигуру), где
Желаемый угловой уровень рыскания дан (обозначает радиус для дорожного искривления).
Подсистема Симуляции Агентов и Датчика генерирует синтетические данные о датчике, требуемые для отслеживания и cочетания датчиков. Прежде, чем запустить этот пример, приложение Driving Scenario Designer использовалось, чтобы создать сценарий с кривой дорогой и несколькими агентами, перемещающимися на дороге. Дороги и агенты из этого сценария были затем сохранены в файл сценария ACCTestBenchScenario.mat
. Чтобы видеть, как можно задать сценарий, смотрите раздел Scenario Creation.
open_system('ACCTestBenchExample/Vehicle and Environment/Actors and Sensor Simulation')
Движением автомобиля, оборудованного датчиком управляет система управления и не читают из файла сценария. Вместо этого положение автомобиля, оборудованного датчиком, скорость, угол рыскания и уровень рыскания получены как входные параметры от блока Vehicle Dynamics и упаковываются в одну структуру положения агента с помощью packEgo
Блок MATLAB function.
Блок 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) на кривой дороге с cочетанием датчиков, протестируйте его в Simulink с помощью синтетических данных, сгенерированных Automated Driving Toolbox, разбейте на компоненты его, и автоматически сгенерируйте код для него.
bdclose all