Хранение маршрута помогает с обнаружением маршрута

Этот пример показывает, как моделировать и сгенерировать код для автомобильного контроллера хранения маршрута помогает (LKA).

В этом примере, вас:

  1. Рассмотрите алгоритм управления, который комбинирует обработку данных от обнаружений маршрута и контроллер хранения маршрута от Model Predictive Control Toolbox™.

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

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

Введение

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

Для LKA, чтобы работать правильно, автомобиль, оборудованный датчиком должен определить контуры маршрута и как маршрут перед ним изгибается. Идеализированные проекты LKA полагаются в основном на предварительно просмотренное искривление, боковое отклонение и относительный угол отклонения от курса между средней линией маршрута и автомобилем, оборудованным датчиком. Пример такой системы дан в Хранении Маршрута, Помогают Системе Используя Образцовое Прогнозирующее Управление. Перемещаясь от проектов усовершенствованной системы помощи диска (ADAS) до большего количества автономных систем, LKA должен быть устойчивым пропавшим без вести, неполным, или неточным показаниям измерения от реальных детекторов маршрута.

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

Добавьте папку для примера к пути MATLAB®.

addpath(fullfile(matlabroot,'examples','mpc','main'));

Открытая тестовая модель

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

open_system('LKATestBenchExample')

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

  1. Хранение маршрута Помогает, который управляет передним руководящим углом автомобиля

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

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

plotLKAInputs(scenario,driverPath)

Моделируйте помощь отвлекающемуся драйверу

Можно исследовать поведение алгоритма путем включения сохраняющей маршрут помощи и установки безопасного бокового расстояния. В модели Simulink, в разделе User Controls, переключают переключатель на На и устанавливают Безопасное Боковое Расстояние до 1 метра. Также включите хранение маршрута, помогают и устанавливают безопасное боковое расстояние.

set_param('LKATestBenchExample/Enable','Value','1')
set_param('LKATestBenchExample/Safe Lateral Offset','Value','1')

Чтобы построить результаты симуляции, используйте Видимый с большого расстояния Осциллограф. Видимый с большого расстояния Осциллограф является инструментом визуализации образцового уровня в Simulink, что можно открыть использование меню, предоставленного на панели инструментов модели Simulink. Для получения дополнительной информации смотрите, Осматривают и Анализируют Модели в Simulink (Simulink). После открытия осциллографа нажмите Find Signals, чтобы настроить сигналы. Затем запустите симуляцию в течение 15 секунд и исследуйте содержимое Видимого с большого расстояния Осциллографа.

sim('LKATestBenchExample','StopTime','15') % Simulate 15 seconds
   Assuming no disturbance added to measured output channel #1.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->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: [4678x1 double] 

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

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

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

sim('LKATestBenchExample')                  % Simulate to end of scenario
plotLKAResults(scenario,logsout,driverPath)
   Assuming no disturbance added to measured output channel #1.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Синяя кривая для пути к драйверу показывает, что отвлекающийся драйвер может управлять автомобилем, оборудованным датчиком к другому маршруту, когда дорожное искривление изменяется. Красная кривая для драйвера с Хранением Маршрута Помогает, показывает, что автомобиль, оборудованный датчиком остается в своем маршруте, когда дорожное искривление изменяется.

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

plotLKAPerformance(logsout)

  • Главный график показывает боковое отклонение относительно автомобиля, оборудованного датчиком. Боковое отклонение с LKA в [-0.5 0.5] m.

  • Средний график показывает относительный угол отклонения от курса. Относительный угол отклонения от курса с LKA в [-0.15,0.15] рад.

  • Нижний график показывает держащийся угол автомобиля, оборудованного датчиком. Держащийся угол с LKA в [-0.5 0.5] рад.

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

plotLKAStatus(logsout)

  • Главный график показывает левое и правое смещение маршрута. Приблизительно 5,5 с, 19 с, 31 с и 33 с, боковое смещение на расстоянии, установленном хранением маршрута, помогают. Когда это происходит, отъезд маршрута обнаруживается.

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

  • Нижний график показывает держащийся угол от драйвера и LKA. Когда различие между держащимся углом от драйвера и LKA является небольшим, управление релизами LKA к драйверу (например, между 9 с к 17 с).

Моделируйте маршрут после

Можно изменить значение Безопасного Бокового Смещения для LKA, чтобы проигнорировать вход драйвера, поместив контроллер в чистый маршрут после режима. Путем увеличения этого порога боковое смещение всегда на расстоянии, установленном хранением маршрута, помогают. Таким образом состояние для отъезда маршрута включено, и хранение маршрута помогают, берет на себя управление все время.

set_param('LKATestBenchExample/Safe Lateral Offset','Value','2')
sim('LKATestBenchExample')                                     % Simulate to end of scenario
   Assuming no disturbance added to measured output channel #1.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Можно исследовать результаты симуляции с помощью следующих команд.

plotLKAResults(scenario,logsout)

Красная кривая показывает, что Хранение Маршрута Помогает, самостоятельно может сохранить автомобиль, оборудованный датчиком, перемещающийся вдоль средней линии его маршрута.

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

plotLKAPerformance(logsout)

  • Главный график показывает боковое отклонение относительно автомобиля, оборудованного датчиком. Боковое отклонение с LKA в [-0.1 0.1] m.

  • Средний график показывает относительный угол отклонения от курса. Относительный угол отклонения от курса с LKA в [-0.02,0.02] рад.

  • Нижний график показывает держащийся угол автомобиля, оборудованного датчиком. Держащийся угол с LKA в [-0.04,0.04] рад.

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

plotLKAStatus(logsout)

  • Главный график показывает левое и правое смещение маршрута. Поскольку боковое смещение никогда не на расстоянии, установленном хранением маршрута, помогают, отъезд маршрута не обнаруживается.

  • Средний график показывает, что состояние LKA всегда один, то есть, Хранение Маршрута Помогают, берет на себя управление все время.

  • Нижний график показывает держащийся угол от драйвера и LKA. Держащийся угол от согласования драйвера с кривой дорогой слишком агрессивен. Маленький руководящий угол от LKA достаточен для кривой дороги в этом примере.

Исследуйте хранение маршрута, помогают алгоритму

Модель Lane Keeping Assist содержит четыре основных части: 1) Оценочный Центр Маршрута 2) Контроллер Хранения Маршрута 3) Обнаруживает Отъезд Маршрута, и 4) Применяется, Помогают.

open_system('LKATestBenchExample/Lane Keeping Assist')

Обнаружить Исходная подсистема Маршрута выводит сигнал, который верен, когда автомобиль слишком близок к обнаруженному маршруту. Вы обнаруживаете отъезд, когда смещение между автомобилем и контуром маршрута от Датчика Маршрута является меньше, чем вход Lane Assist Offset.

Оценочная подсистема Центра Маршрута выводит данные с датчиков маршрута на контроллер хранения маршрута. Детектор в этом примере сконфигурирован, чтобы сообщить о левых и правых контурах маршрута текущего маршрута в текущем поле зрения камеры. Каждый контур моделируется как длина кривой, искривление которой отличается линейно с расстоянием (кривая клотоиды). Чтобы накормить этими данными контроллер, сместите обе из обнаруженных кривых к центру маршрута шириной автомобиля и маленького поля (общее количество на 1,8 м). Вес каждая из получившихся кривых в центре силой обнаружения и передачи усредненный результат контроллеру. Кроме того, Оценочная подсистема Центра Маршрута обеспечивает конечные значения для входных параметров к Маршруту, Сохраняющему Подсистему контроллера. Предварительно просмотренное искривление обеспечивает среднюю линию искривления маршрута перед автомобилем, оборудованным датчиком. В этом примере автомобиль, оборудованный датчиком может смотреть вперед в течение трех секунд, который является продуктом горизонта прогноза и шага расчета. Это предварительное время позволяет контроллеру использовать предварительно просмотренную информацию для вычисления держащегося угла для автомобиля, оборудованного датчиком, который улучшает контроллер MPC производительность.

Цель для блока Lane Keeping Controller состоит в том, чтобы сохранить автомобиль в своем маршруте и идти по кривой дороге путем управления передним руководящим углом. Эта цель достигается путем управления боковым отклонением и относительным углом отклонения от курса, чтобы быть маленькой (см. следующую фигуру).

Контроллер LKA вычисляет держащийся угол для автомобиля, оборудованного датчиком на основе следующих входных параметров:

  • Предварительно просмотренное искривление (выведенный от Обнаружений Маршрута)

  • Автомобиль, оборудованный датчиком продольная скорость

  • Боковое отклонение (выведенный от Обнаружений Маршрута)

  • Относительный угол отклонения от курса (выведенный от Обнаружений Маршрута)

Рассматривая физические ограничения автомобиля, оборудованного датчиком, держащийся угол ограничивается быть в [-0.5 0.5] рад. Можно изменить горизонт прогноза или переместить ползунок Поведения Контроллера, чтобы настроить производительность контроллера.

Применение Помогает, подсистема решает, берут ли контроллер хранения маршрута или драйвер под свой контроль автомобиль, оборудованный датчиком. Переключатели подсистемы между драйвером управляли регулированием и регулированием, которому помогают, от Диспетчера Хранения Маршрута. Переключатель к регулированию, которому помогают, инициируется, когда отъезд маршрута обнаруживается. Управление возвращено в драйвер, когда драйвер начинает держаться в маршруте снова.

Исследуйте автомобиль и среду

Подсистема Автомобиля и Среды включает симуляцию замкнутого цикла хранения маршрута, помогают диспетчеру.

open_system('LKATestBenchExample/Vehicle and Environment')

Подсистема Динамики аппарата моделирует динамику аппарата с блоком Vehicle Body 3DOF Single Track от Vehicle Dynamics Blockset™.

Блок Scenario Reader генерирует идеальные левые и правые контуры маршрута на основе положения автомобиля относительно сценария, считанного из файла сценария LKATestBenchScenario.mat.

Блок Vision Detection Generator берет идеальные контуры маршрута из блока Scenario Reader. Генератор обнаружения моделирует поле зрения монокулярной камеры и определяет направляющийся угол, искривление, производную искривления и допустимую длину каждого дорожного контура, составляя любые другие препятствия.

Подсистема Драйвера генерирует руководящий угол драйвера на основе пути к драйверу, который был создан в helperLKASetUp.

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

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

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

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

if hasEmbeddedCoderLicense
    rtwbuild('LKARefMdl')
end

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

if hasEmbeddedCoderLicense
    set_param('LKATestBenchExample/Lane Keeping Assist',...
        'SimulationMode','Software-in-the-loop (SIL)')
end

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

Заключения

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

Удалите папку в качестве примера из пути MATLAB.

rmpath(fullfile(matlabroot,'examples','mpc','main'));

close all
bdclose all

Смотрите также

Блоки

Похожие темы