В этом примере показано, как моделировать и генерировать код для контроллера LKA.
В этом примере выполняется следующее:
Просмотрите алгоритм управления, который сочетает в себе обработку данных из обнаруженных дорожек и контроллер сохранения дорожек из Toolbox™ управления прогнозом модели.
Протестируйте систему управления в модели Simulink с замкнутым контуром, используя синтетические данные, генерируемые Toolbox™ автоматического вождения.
Настройте параметры генерации кода для моделирования ПО в цикле и автоматически создайте код для алгоритма управления.
Система помощи по поддержанию полосы движения (LKA) - это система управления, которая помогает водителю поддерживать безопасный проезд в пределах обозначенной полосы движения шоссе. Система LKA обнаруживает, когда транспортное средство отклоняется от полосы движения, и автоматически корректирует рулевое управление для восстановления надлежащего движения по полосе без дополнительной информации от водителя. В этом примере система LKA переключается между командой рулевого управления водителя и контроллером поддержания полосы движения. Этот подход достаточен для внедрения архитектуры моделирования для системы LKA, однако реальная система также обеспечивает гаптическую обратную связь с рулевым колесом и позволяет водителю переопределить систему LKA, применяя достаточный противодействующий крутящий момент.
Для правильной работы LKA эго-транспортное средство должно определить границы полосы и способ изгиба полосы перед ней. Идеализированные конструкции LKA основаны главным образом на предварительно просматриваемой кривизне, боковом отклонении и относительном угле рыскания между осевой линией полосы движения и эго-транспортным средством. Пример такой системы приведен в разделе «Вспомогательная система поддержания полосы движения с использованием модельного прогнозирующего управления». Переходя от усовершенствованной системы помощи приводу (ADAS) к более автономным системам, LKA должна быть надежной к отсутствующим, неполным или неточным показаниям измерений от реальных детекторов полосы движения.
Этот пример демонстрирует надежный подход к конструкции контроллера, когда данные от обнаруженных полос могут быть неточными. Для этого используются данные от синтетического детектора дорожки, который имитирует нарушения, вносимые широкоугольной монокулярной камерой зрения. Контроллер принимает решения, когда данные от датчика неверны или выходят за пределы диапазона. Это обеспечивает защиту при ложном измерении датчика из-за условий в окружающей среде, таких как резкая кривая на дороге.
Чтобы открыть модель испытательного стенда Simulink, используйте следующую команду.
open_system('LKATestBenchExample')

Модель содержит две основные подсистемы:
Помощь по поддержанию полосы движения, которая управляет углом поворота переднего рулевого управления транспортного средства
Подсистема «Транспортное средство и окружающая среда», моделирующая движение эго-транспортного средства и моделирующая окружающую среду
При открытии этой модели также запускается helperLKASetUp , который инициализирует данные, используемые моделью. Сценарий загружает определенные константы, необходимые модели Simulink, такие как параметры модели транспортного средства, параметры конструкции контроллера, сценарий дороги и путь водителя. Можно построить график дороги и траектории, по которой будет следовать модель водителя.
plotLKAInputs(scenario,driverPath)

Можно изучить поведение алгоритма, включив помощь по поддержанию полосы движения и установив безопасное боковое расстояние. В модели Simulink в разделе «Элементы управления пользователя» переключите переключатель на «Вкл» и установите для параметра «Безопасное боковое расстояние» значение 1 метр. В качестве альтернативы включите средство поддержания полосы движения и задайте безопасное боковое расстояние.
set_param('LKATestBenchExample/Enable','Value','1') set_param('LKATestBenchExample/Safe Lateral Offset','Value','1')
Для построения графика результатов моделирования используется область «Птичий глаз» (Automated Driving Toolbox). Область «Птичий глаз» - это инструмент визуализации на уровне модели, который можно открыть с помощью панели инструментов Simulink. На вкладке Моделирование (Simulation) в разделе Результаты проверки (Review Results) щелкните Область действия птичьего глаза (Bird 's-Eye Scope). После открытия области щелкните Найти сигналы (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: [4682x1 double]
SimulationMetadata: [1x1 Simulink.SimulationMetadata]
ErrorMessage: [0x0 char]

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 for LKA» (Безопасное боковое смещение для 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)

Верхний график показывает смещение левой и правой полос. Поскольку боковое смещение никогда не находится в пределах расстояния, заданного подсистемой поддержания полосы движения, отправление полосы движения не обнаруживается.
Средний сюжет показывает, что статус LKA всегда один, то есть Lane Keeping Assist всё время принимает управление.
Нижний график показывает угол поворота рулевого управления от водителя и LKA. Угол поворота от водителя, ведущего переговоры с искривленной дорогой, слишком агрессивен. В этом примере для криволинейной дороги достаточно небольшого угла поворота от LKA.
Модель помощи по поддержанию полосы движения содержит четыре основные части: 1) Оценка центра полосы движения 2) Контроль за поддержанием полосы движения 3) Обнаружение отхода полосы движения и 4) Применение помощи.
open_system('LKATestBenchExample/Lane Keeping Assist')

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

Контроллер LKA вычисляет угол поворота для эго-транспортного средства на основе следующих входных данных:
Предварительно просматриваемая кривизна (производная от обнаружения полосы движения)
Продольная скорость эго-транспортного средства
Боковое отклонение (определяется по обнаружению полосы движения)
Относительный угол рыскания (определяется по обнаружениям полосы движения)
Учитывая физические ограничения эго-транспортного средства, угол рулевого управления ограничен в пределах [-0.5,0,5] рад. вы можете изменить горизонт прогнозирования или переместить регулятор поведения контроллера, чтобы настроить производительность контроллера.
Подсистема Apply Assist решает, берет ли на себя управление эго-транспортным средством контроллер по поддержанию полосы движения или водитель. Подсистема переключается между управляемым водителем и управляемым рулевым управлением от контроллера поддержания полосы движения. Переключение на вспомогательное рулевое управление инициируется при обнаружении схода полосы движения. Управление возвращается водителю, когда водитель снова начинает руление в пределах полосы.
Подсистема «Транспортное средство и окружающая среда» обеспечивает моделирование по замкнутому контуру вспомогательного контроллера поддержания полосы движения.
open_system('LKATestBenchExample/Vehicle and Environment')

Подсистема Vehicle Dynamics моделирует динамику транспортного средства с помощью блока Vehicle Body 3DOF Single Track из Vehicle Dynamics Blockset™.
Блок чтения сценариев (Automated Driving Toolbox) создает идеальные границы левой и правой полосы движения на основе положения транспортного средства относительно сценария, считанного из файла сценария. LKATestBenchScenario.mat.
Блок генератора обнаружения изображений принимает идеальные границы полосы движения из блока считывателя сценариев. Генератор обнаружения моделирует поле зрения монокулярной камеры и определяет угол курса, кривизну, производную кривизны и допустимую длину каждой границы дороги, учитывая любые другие препятствия.
Подсистема Driver генерирует угол поворота водителя на основе пути водителя, который был создан в helperLKASetUp.
LKARefMdl модель сконфигурирована для поддержки генерации кода C с использованием программного обеспечения Embedded Coder. Чтобы проверить наличие доступа к встроенному кодеру, запустите:
hasEmbeddedCoderLicense = license('checkout','RTW_Embedded_Coder')
Можно создать функцию C для модели и изучить отчет о создании кода, выполнив следующие действия:
if hasEmbeddedCoderLicense slbuild('LKARefMdl') end
Можно проверить, что скомпилированный код C ведет себя так, как ожидалось, с помощью моделирования ПО в цикле (SIL). Для моделирования LKARefMdl ссылочная модель в режиме SIL, используйте:
if hasEmbeddedCoderLicense set_param('LKATestBenchExample/Lane Keeping Assist',... 'SimulationMode','Software-in-the-loop (SIL)') end
При запуске LKATestBenchExample модель, код генерируется, компилируется и выполняется для LKARefMdl модель. Это позволяет проверить поведение скомпилированного кода с помощью моделирования.
В этом примере показано, как реализовать интегрированный контроллер поддержки полосы движения (LKA) на криволинейной дороге с обнаружением полосы движения. В нем также показано, как протестировать контроллер в Simulink, используя синтетические данные, сгенерированные с помощью автоматической панели инструментов вождения, компоновать его и автоматически генерировать для него код.
close all bdclose all