В этом примере показано, как спроектировать и протестировать логику принятия решений для согласования светофора на перекрестке.
Логика принятия решений для согласования светофоров является основополагающим компонентом беспилотного приложения. Логика принятия решений должна реагировать на такие входы, как состояние светофора и окружающих транспортных средств. Затем логика принятия решений предоставляет контроллеру необходимую скорость и путь. Поскольку пересечения светофоров опасны для тестирования, симуляция таких сценариев вождения может дать представление о взаимодействиях логики принятия решений и контроллера.
В этом примере показано, как спроектировать и протестировать логику принятия решений для согласования светофора. Логика принятия решения в этом примере реагирует на состояние светофора, расстояние до светофора и расстояние до ближайшее транспортное средство. В этом примере вы будете:
Исследуйте тестовую модель: Модель содержит датчики светофора и окружение, логику принятия решений по светофору, элементы управления и динамику аппарата.
Моделируйте логику решения светофора: Логика решения светофора арбитрирует между ведущим транспортным средством и предстоящим светофором. Он также обеспечивает ссылке путь для следования автомобиля , оборудованного датчиком на перекрестке при отсутствии полос движения.
Симулируйте левый поворот со светофором и свинцовым транспортным средством: Модель сконфигурирована для тестирования взаимодействий между логикой принятия решений по светофору и органами управления автомобиля , оборудованного датчиком при приближении к перекрестку в присутствии свинцового транспортного средства.
Симулируйте левый поворот со светофором и перекрестным трафиком: Модель сконфигурирована для тестирования взаимодействий между логикой принятия решений о светофоре и органами управления автомобиля , оборудованного датчиком, когда существует перекрестный трафик на перекрестке.
Исследуйте другие сценарии: Эти сценарии тестируют систему на дополнительных условиях.
Можно применить шаблоны моделирования, используемые в этом примере, чтобы протестировать собственную логику принятия решений и элементы управления для согласования светофоров.
Чтобы исследовать поведение системы согласования светофоров, откройте симуляцию тестовой модели для системы.
open_system("TrafficLightNegotiationTestBench");
Открытие этой модели запускает helperSLTrafficLightNegotiationSetup
скрипт, который инициализирует дорожный сценарий с помощью drivingScenario
объект в базовом рабочем пространстве. Он запускает сценарий тестирования по умолчанию, scenario_TLN_left_turn_with_cross_over_vehicle
, который содержит автомобиль , оборудованный датчиком и два других транспортных средства. Этот скрипт настройки также конфигурирует параметры проектирования контроллера, параметры модели транспортного средства и сигналы шины Simulink ®, необходимые для определения входов и выходов для TrafficLightNegotiationTestBench
модель.
Тестовая модель содержит следующие подсистемы:
Датчики и окружение: Модели датчика светофора, дорожной сети, транспортных средств, а также датчиков камеры и радара, используемых для симуляции.
Логика решения светофора: Арбитражное разбирательство между светофором и другими ведущими транспортными средствами или перекрестными транспортными средствами на перекрестке.
Контроллер маршрута: генерирует продольные и боковые элементы управления.
Динамика аппарата: Моделирует автомобиль , оборудованный датчиком с помощью блока Bicycle Model и обновляет его состояние с помощью команд, полученных от подсистемы Контроллера Lane Following.
Визуализация: Графическое изображение мирового координатного вида дорожной сети, транспортных средств и состояния светофора во время симуляции.
Контроллеры образца модели Lane Following и подсистема Динамики аппарата повторно используются из примера Highway Lane Following. Этот пример посвящен подсистемам Sensors и окружение и Traffic Light Decision Logic.
Подсистема Sensors and Environment конфигурирует дорожную сеть, задает целевые траектории транспортного средства и синтезирует датчики. Откройте Подсистему Датчиков и Окружения.
open_system("TrafficLightNegotiationTestBench/Sensors and Environment");
Сценарий и датчики на автомобиль , оборудованный датчиком заданы следующими частями подсистемы:
Блок Scenario Reader сконфигурирован так, чтобы принимать информацию о автомобиле , оборудованном датчиком для выполнения симуляции с обратной связью. Он выводит основную истину информацию о полосах и актерах в координатах автомобиля , оборудованного датчиком. Этот блок читает drivingScenario
переменная объекта, scenario
, из базового рабочего пространства, которое содержит дорожную сеть, совместимую со TrafficLightNegotiationTestBench
модель.
Постройте график дорожной сети, предусмотренной сценарием.
hFigScenario = figure('Position', [1 1 800 600]); plot(scenario, 'Parent', axes(hFigScenario));
Этот сценарий по умолчанию имеет одно пересечение с автомобилем , оборудованным датчиком, одним ведущим транспортным средством и одним транспортным средством с перекрестным движением.
Закройте рисунок.
close(hFigScenario);
Подсистема Tracking and Sensor Fusion запирает транспортное средство обнаружения из блоков Driving Radar Данных Generator и Vision Detection Generator при помощи блока Мультиобъекта Tracker, чтобы обеспечить дорожки объектов, окружающие автомобиль , оборудованный датчиком.
Блок генератора обнаружения видения также обеспечивает обнаружение маршрута относительно автомобиля , оборудованного датчиком, которая помогает в идентификации транспортных средств, присутствующих в эго-полосе.
Подсистема Traffic Light Sensor моделирует светофоры. Он сконфигурирован для поддержки четырех датчиков светофора на перекрестке, TL Sensor 1, TL Sensor 2, TL Sensor 3 и TL Sensor 4.
Постройте график сценария с датчиками светофора.
hFigScenario = helperPlotScenarioWithTrafficLights();
Заметьте, что это тот же сценарий, что и раньше, только с добавленными датчиками светофора. Эти датчики представлены красными кругами на перекрестке, обозначающими красные светофоры. Метки для светофоров 1, 2, 3, 4 соответствуют TL Sensor 1, TL Sensor 2, TL Sensor 3 и TL Sensor 4, соответственно.
Закройте рисунок.
close(hFigScenario);
Сценарии тестирования в TrafficLightNegotiationTestBench
сконфигурированы так, что автомобиль , оборудованный датчиком договаривается с TL Sensor 1. Существует три режима, в которых можно сконфигурировать эту подсистему Traffic Light Sensor:
Устойчивый красный: TL Sensor 1 и TL Sensor 3 всегда находятся в красном состоянии. Два других светофора всегда находятся в зеленом состоянии.
Устойчивый зеленый: TL Sensor 1 и TL Sensor 3 всегда в зеленом состоянии. Два других светофора всегда находятся в красном состоянии.
Цикл [По умолчанию]: TL Sensor 1 и TL Sensor 3 следуют циклическому шаблону: зеленый-желто-красный с предопределенными временами. Другие светофоры также следуют циклическому шаблону: красно-зелено-желтый с предопределенными временами в дополнение к TL Sensor 1 и TL Sensor 3.
Вы можете сконфигурировать эту подсистему в одном из следующих режимов с помощью Traffic Light Sensor Mode
параметр маски.
Откройте подсистему Traffic Light Sensor.
open_system('TrafficLightNegotiationTestBench/Sensors and Environment/Traffic Light Sensor', 'force');
График Logic Stateflow переключения светофора реализует логику изменения состояния светофора для четырех датчиков светофора. Начальное состояние для всех светофоров устанавливается красным. Переход к другому режиму основан на триггерном условии, заданном расстоянием автомобиля , оборудованного датчиком до светофора TL Sensor 1. Это расстояние определяется переменной distanceToTrafficLight
. Переход светофора запускается, если это расстояние меньше trafficLightStateTriggerThreshold
. Этот порог в настоящее время установлен на 60 метров и может быть изменен в helperSLTrafficLightNegotiationSetup
скрипт.
Блок Compute Distance To Traffic Light вычисляет distanceToTrafficLight
использование положения светофора TL Sensor 1, заданное переменной trafficLightPosition
. Это получается из Traffic Light Position
параметр маски Подсистемы Датчика Светофора. Значение параметра mask установлено в intersectionInfo.tlSensor1Position
, набор переменных в базовом рабочем пространстве по helperSLTrafficLightNegotiationSetup
скрипт. intersectionInfo
structure - это выход из helperGetTrafficLightScene
функция. Эта функция используется для создания сценариев тестирования, которые совместимы с TrafficLightNegotiationTestBench
модель.
Логика принятия решений по светофору и контроллер необходимы следующие входы для реализации их функциональности:
ReferencePathInfo предоставляет предопределенную ссылочную траекторию, которая может использоваться автомобилем , оборудованным датчиком для навигации в отсутствие информации о полосе. На основе траектории автомобиля , оборудованного датчиком может проходить прямо, принимать поворот налево или поворот вправо на пересечении ссылки. Этот ссылочный путь получен с помощью referencePathInfo
, выход из helperGetTrafficLightScene
. Эта функция принимает входной параметр, чтобы задать направление перемещения на перекрестке. Возможные значения: Straight
, Left
, и Right
.
Центр пересечения задает положение центра пересечения дорожной сети в сценарии. Это достигается с помощью intersectionInfo
, выход из helperGetTrafficLightScene
.
Set Velocity определяет пользовательскую скорость для контроллера.
Образец модели Traffic Light Decision Logic арбитрирует между ведущим автомобилем и светофором. Он также вычисляет информацию о центре маршрута, как требуется контроллером, используя обнаруженные полосы или предопределенный путь. Откройте образец модели Traffic Light Decision Logic.
open_system("TrafficLightDecisionLogic");
Подсистема Find Lead Car находит ведущий автомобиль в текущей полосе из входных дорожек объекта. Это обеспечивает относительное расстояние, relativeDistToLeadCar, и относительную скорость, relativeVelocityOfLeadCar, относительно головного транспортного средства. Если нет ведущего транспортного средства, то этот блок рассматривает ведущее транспортное средство как присутствующее на бесконечном расстоянии.
Диаграмма Arbitration Logic Stateflow использует информацию о ведущем автомобиле и реализует логику, необходимую для арбитража между светофором и ведущим транспортным средством на перекрестке. Откройте диаграмму Arbitration Logic Stateflow.
open_system("TrafficLightDecisionLogic/Arbitration Logic");
Диаграмма Arbitration Logic Stateflow состоит из двух состояний, OnEntry
и OnRedAndYellowLightDetection
. Если состояние светофора зеленое или если нет обнаружений светофора, состояние остается в OnEntry
состояние. Если состояние светофора красное или желтое, то состояние переходит к OnRedAndYellowLightDetection
состояние. Поток управления переключается между этими состояниями на основе trafficLightDetection
и distanceToTrafficLight
переменные. В каждом состоянии вычисляют относительное расстояние и относительную скорость относительно самого важного объекта (MIO). Головное транспортное средство и красный светофор рассматриваются как MIO.
OnEntry:
relativeDistance = relativeDistToLeadCar
;
relativeVelocity = relativeVelocityOfLeadCar
;
OnRedAndYellowLightDetection:
relativeDistance = min(relativeDistToLeadCar,distanceToTrafficLight)
;
relativeVelocity = min(relativeVelocityOfLeadCar,longitudinalVelocity)
;
LongitudinalVelocity представляет продольную скорость автомобиля , оборудованного датчиком.
Блок «Вычислить расстояние до пересечения» вычисляет расстояние до центра пересечения от текущего положения эго. Поскольку перекресток не имеет полос движения, автомобиль , оборудованный датчиком использует это расстояние, чтобы вернуться к предопределенному опорному пути на перекрестке.
Подсистема Lane Center Decision Logic вычисляет информацию о центре маршрута, как требуется системой управления Path Following (Model Predictive Control Toolbox). Откройте подсистему Lane Center Decision Logic.
open_system("TrafficLightDecisionLogic/Lane Center Decision Logic");
Подсистема Lane Center Decision Logic в основном полагается на обнаружение маршрута из блока Vision Detection Generator, чтобы оценить информацию о центре маршрута, такую как кривизна, производная кривизны, боковое смещение и угол рыскания. Однако на перекрестке нет разметки маршрута. В таких случаях информация о центре маршрута может быть оценена из предопределенного опорного пути.
Подсистема Reference Path Lane Center вычисляет информацию о центре маршрута на основе текущего положения ego и предопределенного опорного пути. Коммутатор настроен на использование LaneCenterFromReferencePath, когда значение DistanceToIntersection меньше referencePathSwitchThreshold
. Этот порог в настоящее время установлен на 20 метров и может быть изменен в helperSLTrafficLightNegotiationSetup
скрипт.
В этом сценарии тестирования головное транспортное средство перемещается по эго-полосе и пересекает перекресток. Состояние светофора остается зеленым для ведущего транспортного средства и становится красным для автомобиля , оборудованного датчиком. Ожидается, что автомобиль , оборудованный датчиком будет следовать ведущему транспортному средству, договариваться о светофоре и делать поворот налево.
Сконфигурируйте TrafficLightNegotiationTestBench
модель для использования scenario_TLN_left_turn_with_lead_vehicle
сценарий.
helperSLTrafficLightNegotiationSetup("scenario_TLN_left_turn_with_lead_vehicle"); % To reduce command-window output, first turn off the MPC update messages. mpcverbosity('off'); % Simulate the model. sim("TrafficLightNegotiationTestBench");
Постройте график результатов симуляции.
hFigResults = helperPlotTrafficLightNegotiationResults(logsout);
Исследуйте результаты.
График Состояние светофора - TL Sensor 1 показывает состояния датчика светофора TL Sensor 1. Он изменяется с зеленого на желтый, затем с желтого на красный, а затем повторяется в циклическом режиме.
График Относительное продольное расстояние показывает относительное расстояние между автомобилем , оборудованным датчиком и MIO. Заметьте, что автомобиль , оборудованный датчиком следует за ведущим транспортным средством от 0 до 4,2 секунд, поддерживая безопасное расстояние от него. Можно также заметить, что с 4,2 до 9 секунд это расстояние уменьшается, потому что красный сигнал светофора обнаруживается как MIO. Также заметьте зазоры, представляющие бесконечное расстояние, когда нет MIO после того, как головное транспортное средство превысит максимальное расстояние, разрешенное для MIO.
График ускорения Ego показывает профиль ускорения от контроллера маршрута следования. Заметьте отрицательное ускорение от 4,2 до 4,7 секунд, в ответ на обнаружение красного светофора как MIO. Также можно наблюдать увеличение ускорения через 9 секунд, в ответ на зеленый сигнал светофора.
График угла рыскания Ego показывает профиль угла рыскания автомобиля , оборудованного датчиком. Заметьте изменение в этом профиле через 12 секунд, в ответ на автомобиль , оборудованный датчиком, принимающий поворот налево.
Закройте рисунок.
close(hFigResults);
Этот сценарий тестирования является расширением предыдущего сценария. В сложении с предыдущими условиями в этом сценарии медленно движущееся транспортное средство перекрестного трафика находится на перекрестке, когда светофор зеленый для автомобиля , оборудованного датчиком. Ожидается, что автомобиль , оборудованный датчиком будет ждать, пока транспортное средство перекрестного движения проедет перекресток, прежде чем принимать поворот налево.
Сконфигурируйте TrafficLightNegotiationTestBench
модель для использования scenario_TLN_left_turn_with_cross_over_vehicle
сценарий.
helperSLTrafficLightNegotiationSetup("scenario_TLN_left_turn_with_cross_over_vehicle"); % Simulate the model. sim("TrafficLightNegotiationTestBench");
Постройте график результатов симуляции.
hFigResults = helperPlotTrafficLightNegotiationResults(logsout);
Исследуйте результаты.
График состояния светофора - TL Sensor 1 аналогичен графику предыдущей симуляции.
График Относительное продольное расстояние отличается от предыдущего запуска симуляции с 10,5 секунд вперед. Заметьте обнаружение транспортного средства перекрестного движения как MIO на 10 секунде на около 10 метрах.
График ускорения Ego также быстро реагирует на транспортное средство с перекрестным движением в 10.6. Можно заметить профиль жесткого торможения в ответ на транспортное средство перекрестного движения на перекрестке.
График угла рыскания Ego показывает, что автомобиль , оборудованный датчиком инициирует поворот налево через 14 секунд в ответ на выезд транспортного средства с перекрестком.
Закройте рисунок.
close(hFigResults);
В предыдущих разделах вы исследовали поведение системы для scenario_TLN_left_turn_with_lead_vehicle
и scenario_TLN_left_turn_with_cross_over_vehicle
сценарии. Ниже представлен список сценариев, совместимых с TrafficLightNegotiationTestBench
.
scenario_TLN_straight scenario_TLN_straight_with_lead_vehicle scenario_TLN_left_turn scenario_TLN_left_turn_with_lead_vehicle scenario_TLN_left_turn_with_cross_over_vehicle [Default]
Используйте эти дополнительные сценарии для анализа TrafficLightNegotiationTestBench
при различных условиях. Для примера, изучая взаимодействие между логикой принятия решений о светофоре и элементами управления, может быть полезно начать со сценария, который имеет пересечение со светофором, но не имеет транспортных средств. Чтобы сконфигурировать модель и рабочую область для такого сценария, используйте этот код:
helperSLTrafficLightNegotiationSetup("scenario_TLN_straight");
Включите сообщения обновления MPC.
mpcverbosity('on');
В этом примере вы реализовали логику принятия решений для согласования светофора и протестировали ее с контроллером маршрута, следующим за контроллером в модели Simulink с обратной связью.