В этом примере показано, как создать эгоцентрическую карту занятости из приложения «Дизайнер сценариев вождения». В этом примере для обновления эгоцентрической карты занятости используется информация о препятствиях из генератора детектирования зрения.
Этот пример:
Получение информации о препятствиях и геометрии дороги с помощью генератора обнаружения видения.
Создает карту занятости, ориентированную на эго, с помощью двоичной карты занятости.
Обновление карты занятости с учетом эго-центра с использованием границ полос движения и информации о препятствиях.
Автоматизированные системы вождения используют несколько бортовых датчиков на эго-транспортном средстве, таких как радар, камеры и лидар. Эти датчики используются для восприятия информации из окружающей среды. Важно сопоставить информацию от этих разнородных датчиков в общую временную систему отсчета. Обычно это делается с использованием эгоцентрической карты заполняемости. Эта карта содержит информацию об окружающей среде, такой как геометрия дороги, свободное пространство и препятствия. Эта эгоцентрическая карта занятости используется алгоритмами планирования для навигации. Эго-автомобиль может реагировать на динамические изменения в среде, периодически обновляя информацию в этой эго-ориентированной карте занятости.
В этом примере показано, как использовать информацию о полосе движения и препятствиях, полученную из сценария, для создания и обновления карты занятости, ориентированной на эго.
В этом примере также используется сценарий прямой дороги, разработанный с использованием конструктора сценариев вождения (DSD). Дополнительные сведения см. в разделе Конструктор сценариев вождения (Automated Driving Toolbox). Можно также создать сценарий управления программно. Дополнительные сведения см. в разделе Программное создание сценария вождения (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);
Настройка цикла для выполнения сценария с помощью 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

