В этом примере показано, как создать эгоцентрическую карту заполнения из приложения Driving Scenario Designer. Этот пример использует информацию о препятствии от генератора обнаружения видения, чтобы обновить эгоцентрическую карту заполнения.
Этот пример:
Получает информацию препятствия и дорожную геометрию с помощью генератора обнаружения видения.
Создает эго центральная карта заполнения с помощью бинарной карты заполнения.
Обновляет эго центральная карта заполнения с помощью контуров маршрута и информации о препятствии.
Автоматизированные системы вождения используют несколько встроенных датчиков на автомобиле, оборудованном датчиком как радар, камеры и лидар. Эти датчики используются, чтобы чувствовать информацию от среды и среды. Важно сопоставить информацию от этих неоднородных датчиков в общую временную систему отсчета. Это обычно делается с помощью эгоцентрической карты заполнения. Эта карта содержит информацию окружающей среды как дорожная геометрия, свободное пространство и препятствия. Эта эгоцентрическая карта заполнения используется путем планирования алгоритмов навигацию. Автомобиль, оборудованный датчиком может ответить на динамические изменения в среде путем периодического обновления информации в этом эго центральная карта заполнения.
В этом примере показано, как использовать маршрут и информацию о препятствии, полученную из сценария, чтобы создать и обновить эго центральная карта заполнения.
Этот пример также использует прямой дорожный сценарий, спроектированный с помощью Driving Scenario Designer (DSD). Для получения дополнительной информации смотрите Driving Scenario Designer. Пользователь может также создать Ведущий Сценарий программно. Для получения дополнительной информации обратитесь к Управлению Примером по Сценарию (Automated Driving Toolbox).
Сценарий, используемый в этом примере, является прямой дорогой с четырьмя маршрутами. Этот сценарий имеет один автомобиль, оборудованный датчиком и шесть целевых транспортных средств, которые следуют за их соответствующими предопределенными путями. Создайте сценарий с помощью функции помощника, exampleHelperCreateStraightRoadScenario
.
Сценарий, используемый в этом примере, показывают в следующем рисунке.
[scenario, egoVehicle] = exampleHelperCreateStraightRoadScenario;
Этот пример использует генератор обнаружения видения, который синтезирует датчик камеры, смонтированный впереди автомобиля, оборудованного датчиком в ведущем сценарии. Этот генератор сконфигурирован, чтобы обнаружить контуры маршрута и препятствия.
Для получения дополнительной информации смотрите visionDetectionGenerator
.
Интервал обновления генератора обнаружения видения сконфигурирован, чтобы сгенерировать обнаружения в 0,1 вторых интервалах, который сопоставим с частотой обновления типичных автомобильных датчиков видения.
Создайте actorProfiles
для сценария, которые содержат физический и радарные профили всех ведущих агентов сценария включая автомобиль, оборудованный датчиком. Задайте тех агентов и другие параметры конфигурации для генератора обнаружения видения.
profiles = actorProfiles(scenario); % Configure vision detection generator to detect lanes and obstacles sensor = visionDetectionGenerator('SensorIndex', 1, ... 'SensorLocation', [1.9 0], ... 'DetectionProbability', 1, ... 'MinObjectImageSize', [5 5], ... 'FalsePositivesPerImage', 0, ... 'DetectorOutput', 'Lanes and objects', ... 'Intrinsics', cameraIntrinsics([700 1814],[320 240],[480 640]), ... 'ActorProfiles', profiles,... 'UpdateInterval', 0.1);
Получить обнаружения, sensor
объект называется для каждого шага симуляции. Этот sensor
вызов объектов происходит в функции помощника exampleHelperGetObstacleDataFromSensors
.
Этот пример использует binaryOccupancyMap
объект создать эгоцентрическую карту заполнения.
Создайте квадратную карту заполнения с 100 метрами за сторону и разрешение 2 метров ячеек. Установите все ячейки на занятое состояние по умолчанию.
egoMap = binaryOccupancyMap(100, 100, 2); setOccupancy(egoMap,ones(200, 200));
По умолчанию источник карты внизу слева. Переместите egoMap
источник к центру карты заполнения. Это преобразует карту заполнения в эгоцентрическую карту заполнения.
egoMap.GridOriginInLocal = [-egoMap.XLocalLimits(2)/2, ...
-egoMap.YLocalLimits(2)/2];
Прежде, чем обновить egoMap
, инициализируйте окно визуализации. Препятствия в egoMap
визуализация представлена как черное (занятое) и свободное место как белая (незанятый).
hAxes = exampleHelperSetupVisualization(scenario);
Setup цикл для выполнения сценария с помощью advance(scenario)
. Этот цикл должен переместить egoVehicle
вдоль дороги, обновляющей положение, когда, это перемещается.
Вызовите move
на egoMap
использование обновленного положения, чтобы получить обновленные обнаружения. Очистите карту от всех препятствий для каждого обновления.
% Advancing the scenario while advance(scenario) % Ego vehicle position egoPose = egoVehicle.Position; egoYaw = deg2rad(egoVehicle.Yaw); % Move the origin of grid to the face of the ego vehicle. move(egoMap, [egoPose(1), egoPose(2)]); %Reset the egoMap before updating with obstacle information setOccupancy(egoMap, ones(egoMap.GridSize));
Контуры маршрута и информация о препятствиях, сгенерированная от генератора обнаружения видения, используются, чтобы найти занятое место, которое должно быть обновлено в egoMap
.
Этот пример использует дорожную информацию о контурах, извлеченную из контуров маршрута. Область вне дорожных контуров также рассматривается занятой.
exampleHelperGetObstacleDataFromSensor
функция помощника извлекает дорожные контуры и информацию о препятствии, сгенерированную от генератора обнаружения видения.
[obstacleInfo, roadBorders, isValidLaneTime] = ... exampleHelperGetObstacleDataFromSensor(scenario, egoMap, ... egoVehicle, sensor);
В зависимости от области значений генератора обнаружения видения обнаружения могут выйти за пределы egoMap
границы. Используя egoMap
границы, exampleHelperFitlerObstacles
функционируйте извлекает препятствия и свободное пространство, которые являются в рамках эгоцентрической карты.
[obstaclePoints, unoccupiedSpace] = exampleHelperFilterObstacles(... egoMap, obstacleInfo, ... roadBorders, ... isValidLaneTime, egoVehicle);
Используйте отфильтрованные местоположения препятствия и свободного пространства, чтобы обновить эгоцентрическую карту. Обновите визуализацию.
% Set the occupancy of free space to 0 if ~isempty(unoccupiedSpace) setOccupancy(egoMap, unoccupiedSpace, 0); end % Set the occupancy of occupied space to 1 if ~isempty(obstaclePoints) setOccupancy(egoMap, obstaclePoints, 1); end % Updating the visualization exampleHelperUpdateVisualization(hAxes, egoVehicle, egoPose, egoYaw, egoMap); end