В этом примере показано, как спроектировать и протестировать логику решения на согласование светофора на пересечении.
Логика решения для согласования светофора является основным компонентом автоматизированного ведущего приложения. Логика решения должна реагировать на входные параметры как состояние светофора и окружающих транспортных средств. Логика решения затем предоставляет контроллеру желаемую скорость и путь. Поскольку пересечения светофора опасны для теста, симулирование таких ведущих сценариев может обеспечить понимание взаимодействий логики решения и контроллера.
В этом примере показано, как спроектировать и протестировать логику решения на согласование светофора. Логика решения в этом примере реагирует на состояние светофора, расстояния до светофора и расстояния до самого близкого транспортного средства вперед. В этом примере вы будете:
Исследуйте тестовую модель: модель содержит датчики светофора и среду, логику решения светофора, средства управления и динамику аппарата.
Смоделируйте логику решения светофора: логика решения светофора выносит решение между ведущим транспортным средством и предстоящим светофором. Это также обеспечивает ссылочный путь для автомобиля, оборудованного датчиком, чтобы следовать на пересечении в отсутствие маршрутов.
Симулируйте левый поворот со светофором и ведущим транспортным средством: модель сконфигурирована, чтобы протестировать взаимодействия между логикой решения светофора и средствами управления автомобиля, оборудованного датчиком при приближении к пересечению в присутствии ведущего транспортного средства.
Симулируйте левый поворот со светофором и перекрестным трафиком: модель сконфигурирована, чтобы протестировать взаимодействия между логикой решения светофора и средствами управления автомобиля, оборудованного датчиком, когда существует перекрестный трафик на пересечении.
Исследуйте другие сценарии: Эти сценарии тестируют систему под дополнительными условиями.
Можно применить шаблоны моделирования, используемые в этом примере, чтобы протестировать собственную логику решения и средства управления, чтобы согласовать светофор.
Чтобы исследовать тестовую модель, откройте рабочую копию файлов проекта в качестве примера. MATLAB® копирует файлы в папку в качестве примера так, чтобы можно было отредактировать их.
addpath(fullfile(matlabroot, 'toolbox', 'driving', 'drivingdemos')); helperDrivingProjectSetup('TrafficLightNegotiation.zip', 'workDir', pwd);
Чтобы исследовать поведение системы согласования светофора, откройте тестовую модель симуляции для системы.
open_system("TrafficLightNegotiationTestBench");
Открытие этой модели запускает helperSLTrafficLightNegotiationSetup
скрипт, который инициализирует дорожный сценарий с помощью drivingScenario
объект в базовом рабочем пространстве. Это запускает сценарий тестирования по умолчанию, scenario_02_TLN_left_turn_with_cross_over_vehicle
, это содержит автомобиль, оборудованный датчиком и два других транспортных средства. Этот скрипт настройки также конфигурирует параметры проектирования контроллера, параметры модели транспортного средства и сигналы шины Simulink®, требуемые для определения вводов и выводов для TrafficLightNegotiationTestBench
модель.
Тестовая модель содержит следующие подсистемы:
Датчики и Среда: Моделирует датчик светофора, дорожную сеть, транспортные средства и датчики камеры и радара, используемые для симуляции.
Логика Решения Светофора: Выносит решение между светофором и другими ведущими транспортными средствами или перекрестными транспортными средствами на пересечении.
Следующий за маршрутом Контроллер: Генерирует продольные и боковые средства управления.
Динамика аппарата: Моделирует автомобиль, оборудованный датчиком с помощью Велосипедного блока Model и обновляет его состояние с помощью команд, полученных от Маршрута После Подсистемы контроллера.
Визуализация: Строит представление мировой координаты дорожной сети, транспортных средств и состояния светофора в процессе моделирования.
Маршрут После образца модели Контроллера и подсистемы Динамики аппарата снова используется из Магистрального примера Следующего Маршрута. Этот пример фокусируется на Датчиках и подсистемах Логики Решения Среды и Светофора.
Подсистема Датчиков и Среды конфигурирует дорожную сеть, задает целевые траектории транспортного средства и синтезирует датчики. Откройте подсистема Среды и Датчики.
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);
Подсистема Отслеживания и Cочетания датчиков плавит обнаружения транспортного средства от Управления Радарным Генератором Данных и блоками Генератора Обнаружения Видения при помощи блока Multi-Object Tracker, чтобы обеспечить объектные дорожки, окружающие автомобиль, оборудованный датчиком.
Блок Vision Detection Generator также обеспечивает обнаружения маршрута относительно автомобиля, оборудованного датчиком, который помогает в идентификации транспортных средств, существующих в маршруте эго.
Подсистема Датчика Светофора симулирует светофор. Это сконфигурировано, чтобы поддержать четыре датчика светофора на пересечении, Датчик TL 1, Датчик TL 2, Датчик TL 3 и Датчик TL 4.
Постройте сценарий с датчиками светофора.
hFigScenario = helperPlotScenarioWithTrafficLights();
Заметьте, что это - тот же сценарий как прежде, только с добавленными датчиками светофора. Эти датчики представлены красными кругами на пересечении, указав на красный светофор. Метки для светофора 1, 2, 3, 4 соответствуют Датчику TL 1, Датчик TL 2, Датчик TL 3 и Датчик TL 4, соответственно.
Закройте фигуру.
close(hFigScenario);
Сценарии тестирования в TrafficLightNegotiationTestBench
сконфигурированы таким образом, что автомобиль, оборудованный датчиком согласовывает с Датчиком TL 1. Существует три режима, в которых можно сконфигурировать эту подсистему Датчика Светофора:
Надежный Красный: Датчик TL 1 и Датчик TL 3 всегда находятся в красном штате. Другие два светофора всегда находятся в зеленом состоянии.
Устойчивый Зеленый: Датчик TL 1 и Датчик TL 3 всегда находятся в зеленом состоянии. Другие два светофора всегда находятся в красном штате.
Цикл [Значение по умолчанию]: Датчик TL 1 и Датчик TL 3 следуют за циклическим шаблоном: зелено-желто-красный с предопределенными синхронизациями. Другой светофор также следует за циклическим шаблоном: красно-зелено-желтый с предопределенными синхронизациями, чтобы дополнить Датчик TL 1 и Датчик TL 3.
Можно сконфигурировать эту подсистему в одном из этих режимов при помощи Traffic Light Sensor Mode
параметр маски.
Откройте подсистему Датчика Светофора.
open_system('TrafficLightNegotiationTestBench/Sensors and Environment/Traffic Light Sensor', 'force');
График Traffic Light Switching Logic Stateflow® реализует логику изменения состояния светофора для четырех датчиков светофора. Начальное состояние для всего светофора установлено в красный. Переход к различному режиму основан на триггерном условии, заданном расстоянием автомобиля, оборудованного датчиком к Датчику TL 1 светофор. Это расстояние задано переменной distanceToTrafficLight
. Переход светофора инициирован, если это расстояние меньше trafficLightStateTriggerThreshold
. Этот порог в настоящее время устанавливается к 60 метрам и может быть изменен в helperSLTrafficLightNegotiationSetup
скрипт.
Блок Compute Distance To Traffic Light вычисляет distanceToTrafficLight
использование положения светофора Датчика TL 1, заданный переменной trafficLightPosition
. Это получено из Traffic Light Position
параметр маски подсистемы Датчика Светофора. Значение параметра маски установлено к intersectionInfo.tlSensor1Position
, переменный набор в базовом рабочем пространстве helperSLTrafficLightNegotiationSetup
скрипт. intersectionInfo
структурой является выход от helperGetTrafficLightScene
функция. Эта функция используется, чтобы создать сценарии тестирования, которые совместимы с TrafficLightNegotiationTestBench
модель.
Следующие входные параметры необходимы логике решения светофора и контроллеру, чтобы реализовать их функциональности:
ReferencePathInfo обеспечивает предопределенную ссылочную траекторию, которая может использоваться автомобилем, оборудованным датчиком для навигации в отсутствие информации о маршруте. Автомобиль, оборудованный датчиком может пойти прямо, повернуть налево, или правый поворот на пересечении на основе ссылочного пути. Этот ссылочный путь получен с помощью referencePathInfo
, выход от helperGetTrafficLightScene
. Эта функция берет входной параметр, чтобы задать направление перемещения на пересечении. Возможные значения: Straight
, Left
, и Right
.
IntersectionCenter обеспечивает позицию перекрестного центра дорожной сети в сценарии. Это получено с помощью intersectionInfo
, выход от helperGetTrafficLightScene
.
Скорость набора задает установленную пользователями скорость для контроллера.
Образец модели Логики Решения Светофора выносит решение между ведущим автомобилем и светофором. Это также вычисляет информацию о центре маршрута как требуется контроллером или использование обнаруженных маршрутов или предопределенный путь. Откройте образец модели Логики Решения Светофора.
open_system("TrafficLightDecisionLogic");
Ведущая Автомобильная подсистема Находки находит ведущий автомобиль в текущем маршруте от дорожек входного объекта. Это обеспечивает относительное расстояние, relativeDistToLeadCar, и относительную скорость, relativeVelocityOfLeadCar, относительно ведущего транспортного средства. Если нет никакого ведущего транспортного средства, то этот блок полагает, что ведущее транспортное средство присутствует на бесконечном расстоянии.
Диаграмма Stateflow Арбитражной логики использует ведущую информацию об автомобиле и реализует логику, требуемую выносить решение между светофором и ведущим транспортным средством на пересечении. Откройте диаграмму Stateflow Арбитражной логики.
open_system("TrafficLightDecisionLogic/Arbitration Logic");
Диаграмма Stateflow Арбитражной логики состоит из двух состояний, OnEntry
и OnRedAndYellowLightDetection
. Если состояние светофора является зеленым или при отсутствии обнаружений светофора, состояние остается в OnEntry
состояние. Если состояние светофора является красным или желтым, то изменения состояния к OnRedAndYellowLightDetection
состояние. Поток управления переключается между этими состояниями на основе trafficLightDetection
и distanceToTrafficLight
переменные. В каждом состоянии вычисляются относительное расстояние и относительная скорость относительно самого важного объекта (MIO). Ведущее транспортное средство и красный светофор рассматриваются как MIOs.
OnEntry:
relativeDistance = relativeDistToLeadCar
;
relativeVelocity = relativeVelocityOfLeadCar
;
OnRedAndYellowLightDetection:
relativeDistance = min(relativeDistToLeadCar,distanceToTrafficLight)
;
relativeVelocity = min(relativeVelocityOfLeadCar,longitudinalVelocity)
;
longitudinalVelocity представляет продольную скорость автомобиля, оборудованного датчиком.
Блок Compute Distance To Intersection вычисляет расстояние до перекрестного центра от текущего положения эго. Поскольку пересечение не имеет никаких маршрутов, автомобиль, оборудованный датчиком использует это расстояние, чтобы отступить к предопределенному ссылочному пути на пересечении.
Подсистема Логики Решения Центра Маршрута вычисляет информацию о центре маршрута как требуется Системой управления Следования траектории (Model Predictive Control Toolbox). Откройте подсистему Логики Решения Центра Маршрута.
open_system("TrafficLightDecisionLogic/Lane Center Decision Logic");
Подсистема Логики Решения Центра Маршрута, в основном, использует обнаружения маршрута от блока Vision Detection Generator, чтобы оценить информацию о центре маршрута как искривление, производная искривления, боковое смещение и угол рыскания. Однако нет никаких маркировок маршрута, чтобы обнаружить на пересечении. В таких случаях информация о центре маршрута может быть оценена от предопределенного ссылочного пути.
Ссылочная подсистема Центра Маршрута Пути вычисляет информацию о центре маршрута на основе текущего положения эго и предопределила ссылочный путь. Переключатель сконфигурирован, чтобы использовать LaneCenterFromReferencePath, когда DistanceToIntersection меньше referencePathSwitchThreshold
. Этот порог в настоящее время устанавливается к 20 метрам и может быть изменен в helperSLTrafficLightNegotiationSetup
скрипт.
В этом сценарии тестирования ведущее транспортное средство перемещается в маршруте эго и пересекает пересечение. Состояние светофора сохраняет зеленым для ведущего транспортного средства и покраснело для автомобиля, оборудованного датчиком. Автомобиль, оборудованный датчиком, как ожидают, будет следовать за ведущим транспортным средством, согласовывать светофор и делать левый поворот.
Сконфигурируйте TrafficLightNegotiationTestBench
модель, чтобы использовать scenario_03_TLN_left_turn_with_lead_vehicle
сценарий.
helperSLTrafficLightNegotiationSetup("scenario_03_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 1 график показывает состояния датчика светофора Датчика TL 1. Это изменяется от зеленого до желтого, затем от желтого до красного, и затем повторяется в режиме Cycle.
Относительный продольный график расстояния показывает относительное расстояние между автомобилем, оборудованным датчиком и MIO. Заметьте, что автомобиль, оборудованный датчиком следует за ведущим транспортным средством от 0 до 4,2 секунд путем поддержания безопасного расстояния от него. Можно также заметить, что от 4,2 до 9 секунд, это расстояние уменьшает, потому что красный светофор обнаруживается как MIO. Также заметьте разрывы, представляющие бесконечное расстояние, когда нет никакого MIO после того, как ведущее транспортное средство превышает максимальное расстояние, допускал MIO.
Ускоряющий график Эго показывает ускоряющий профиль от Маршрута После Контроллера. Заметьте отрицательное ускорение от 4,2 до 4,7 секунд в реакции на обнаружение красного светофора как MIO. Можно также наблюдать увеличение ускорения после 9 секунд, в ответ на зеленый светофор.
Угловой график рыскания Эго показывает угловой профиль рыскания автомобиля, оборудованного датчиком. Заметьте изменение этого профиля после 12 секунд, в ответ на поворачивающий налево автомобиль, оборудованный датчиком.
Закройте фигуру.
close(hFigResults);
Этот сценарий тестирования является расширением предыдущего сценария. В дополнение к предыдущим условиям, в этом сценарии, медленное транспортное средство перекрестного трафика находится в пересечении, когда светофор является зеленым для автомобиля, оборудованного датчиком. Автомобиль, оборудованный датчиком, как ожидают, будет ожидать транспортного средства перекрестного трафика, чтобы передать пересечение перед поворачиванием налево.
Сконфигурируйте TrafficLightNegotiationTestBench
модель, чтобы использовать scenario_02_TLN_left_turn_with_cross_over_vehicle
сценарий.
helperSLTrafficLightNegotiationSetup("scenario_02_TLN_left_turn_with_cross_over_vehicle"); % Simulate the model. sim("TrafficLightNegotiationTestBench");
Постройте результаты симуляции.
hFigResults = helperPlotTrafficLightNegotiationResults(logsout);
Исследуйте результаты.
Состояние Светофора - Датчик TL 1 график является тем же самым как то от предыдущей симуляции.
Относительный продольный график расстояния отличается от предыдущей симуляции, запущенной с 10,5 секунд вперед. Заметьте обнаружение транспортного средства перекрестного трафика как MIO в 10 секунд на уровне приблизительно 10 метров.
Ускоряющий график Эго также быстро отвечает на транспортное средство перекрестного трафика в 10,6. Можно заметить профиль резкого торможения в ответ на транспортное средство перекрестного трафика на пересечении.
Угловой график рыскания Эго показывает, что автомобиль, оборудованный датчиком инициирует левый поворот после 14 секунд, в ответ на транспортное средство перекрестного трафика, покидая пересечение.
Закройте фигуру.
close(hFigResults);
В предыдущих разделах вы исследовали поведение системы для scenario_03_TLN_left_turn_with_lead_vehicle
и scenario_02_TLN_left_turn_with_cross_over_vehicle
сценарии. Ниже список сценариев, которые совместимы с TrafficLightNegotiationTestBench
.
scenario_01_TLN_left_turn scenario_02_TLN_left_turn_with_cross_over_vehicle [Default] scenario_03_TLN_left_turn_with_lead_vehicle scenario_04_TLN_straight scenario_05_TLN_straight_with_lead_vehicle
Используйте эти дополнительные сценарии, чтобы анализировать TrafficLightNegotiationTestBench
при различных условиях. Например, при приобретении знаний о взаимодействиях между логикой решения светофора и средствами управления, может быть полезно начаться со сценария, который имеет пересечение со светофором, но никакими транспортными средствами. Чтобы сконфигурировать и рабочую область модели для такого сценария, используйте этот код:
helperSLTrafficLightNegotiationSetup("scenario_04_TLN_straight");
Включите сообщения обновления MPC.
mpcverbosity('on');
В этом примере вы реализовали логику решения для согласования светофора и протестировали его с маршрутом после контроллера в модели Simulink с обратной связью.