Помощь в сохранении маршрута с обнаружением маршрута

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

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

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

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

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

Введение

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

Чтобы LKA работала правильно, автомобиль , оборудованный датчиком должен определить контуры маршрута и то, как полоса перед ним изгибается. Идеализированные проекты LKA зависят в основном от предварительно просматриваемой кривизны, бокового отклонения и относительного угла рыскания между осевой линией маршрута и автомобилем , оборудованным датчиком. Пример такой системы приведен в Lane Keeping Assist System с использованием Model Predictive Control (Model Predictive Control Toolbox). Переходя от проектов усовершенствованных систем помощи приводам (ADAS) к более автономным системам, LKA должна быть устойчивой к отсутствующим, неполным или неточным показаниям измерений от реальных детекторов маршрута.

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

Откройте тестовую модель

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

open_system('LKATestBenchExample')

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

  1. Lane Keeping Assist, который управляет углом наклона переднего руля транспортного средства

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

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

plotLKAInputs(scenario,driverPath)

Симулируйте помощь отвлекаемому драйверу

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

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

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

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: [4682x1 double] 

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

Этот Bird ' s-Eye Scope показывает символическое представление дороги с точки зрения автомобиля , оборудованного датчиком. В этом примере Bird 's-Eye Scope отображает зону покрытия синтетического детектора зрения как заштрихованную область. Дополнительно показана идеальная разметка маршрута, а также синтетически обнаруженные контуры левого и правого маршрута (показаны здесь красным цветом).

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

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] м.

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

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

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

plotLKAStatus(logsout)

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

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

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

Моделирование маршрута следования

Можно изменить значение Safe Lateral Offset для 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] м.

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

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

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

plotLKAStatus(logsout)

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

  • График Middle показывает, что статус LKA всегда равен единице, то есть Middle Keeping Assist принимает управление все время.

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

Исследуйте алгоритм помощи в поддержании маршрута

Модель Lane Keeping Assist содержит четыре основные части: 1) Estimate Lane Center 2) Lane Keeping Controller 3) Detect Lane Departing и 4) Apply Assist.

open_system('LKATestBenchExample/Lane Keeping Assist')

Подсистема Detect Lane Department выводит сигнал, который верен, когда транспортное средство слишком близка к обнаруженной полосе. Вы обнаруживаете отклонение, когда смещение между транспортным средством и контуром маршрута от датчика маршрута меньше, чем вход «Вспомогательное смещение маршрута».

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

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

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

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

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

  • Боковое отклонение (получено из обнаружений маршрута)

  • Относительный угол рыскания (полученный из обнаружений маршрута)

Учитывая физические ограничения автомобиля , оборудованного датчиком, угол поворота ограничен в пределах [-0.5,0.5] радов. Можно изменить горизонт предсказания или переместить ползунок Controller Behavior, чтобы настроить эффективность контроллера.

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

Исследуйте транспортное средство и окружение

Подсистема транспортное средство и окружение включает симуляцию замкнутого цикла вспомогательного контроллера поддержания маршрута.

open_system('LKATestBenchExample/Vehicle and Environment')

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

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

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

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

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

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

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

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

if hasEmbeddedCoderLicense
    slbuild('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, компонентизировать его и автоматически сгенерировать код для него.

close all
bdclose all

См. также

Приложения

Блоки

Похожие темы