В этом примере показано, как записать синтетические данные о датчике лидара с помощью 3D среды симуляции, разработайте алгоритм восприятия с помощью записанных данных и используйте тот алгоритм в среде симуляции.
Automated Driving Toolbox™ интегрирует 3D среду симуляции в Simulink®. 3D среда симуляции использует Нереальный Engine® Epic Games®. Блоки Simulink, связанные с 3D средой симуляции, могут быть найдены в drivingsim3d
библиотека. Эти блоки обеспечивают способность к:
Выберите различные сцены в 3D среде симуляции
Поместите и переместите транспортные средства в сцену
Присоедините и сконфигурируйте датчики на транспортных средствах
Симулируйте данные о датчике на основе среды вокруг транспортного средства
Этот мощный инструмент симуляции может использоваться, чтобы добавить действительные данные при разработке, тестируя, и проверяя производительность автоматизированных ведущих алгоритмов, позволяя к сценариям тестирования, которые затрудняют, чтобы воспроизвести в реальном мире.
В этом примере вы оцениваете алгоритм восприятия лидара с помощью синтетических данных о лидаре, сгенерированных от 3D среды симуляции. Пример обходит вас через следующие шаги:
Запишите и визуализируйте синтетические данные о датчике лидара из 3D среды симуляции.
Разработайте алгоритм восприятия, чтобы создать карту в MATLAB®.
Используйте алгоритм восприятия в среде симуляции.
Во-первых, настройте сценарий в 3D среде симуляции, которая может использоваться, чтобы протестировать алгоритм восприятия. Используйте сцену, изображающую типичный городской квартал с одним транспортным средством, транспортным средством под тестом. Можно использовать эту сцену, чтобы проверить производительность алгоритма в городской дорожной установке.
Затем выберите траекторию для транспортного средства, чтобы следовать в сцене. Выбрать Waypoints для 3D примера Симуляции описывает, как в интерактивном режиме выбрать последовательность waypoints от сцены и сгенерировать траекторию транспортного средства. Этот пример использует полученное использование сегмента записанного диска helperSelectSceneWaypoints
функция, как описано в waypoint примере выбора.
% Load reference path for recorded drive segment data = load('sim3d_DriveSegmentUSCityBlock.mat'); % Set up workspace variables used by model refPosesX = data.driveSegmentUSCityBlock.refPathX; refPosesY = data.driveSegmentUSCityBlock.refPathY; refPosesT = data.driveSegmentUSCityBlock.refPathT; % Display path on scene image sceneName = 'USCityBlock'; hScene = figure; helperShowSceneImage(sceneName); hold on scatter(refPosesX(:,2), refPosesY(:,2), [], 'filled') % Adjust axes limits xlim([-60 30]) ylim([-30 50])
SimulateLidarSensorPerceptionAlgorithm
Модель Simulink сконфигурирована со сценой Городского квартала США с помощью Симуляции 3D Блок Configuration Сцены. Модель помещает транспортное средство в сцену с помощью Симуляции 3D Транспортное средство с блоком Ground Following. Датчик лидара присоединен к транспортному средству с помощью блока Simulation 3D Lidar. В диалоговом окне блока используйте вкладку Mounting, чтобы настроить размещение датчика и вкладку Parameters, чтобы сконфигурировать свойства датчика симулировать различные датчики лидара. В этом примере лидар смонтирован на центре крыши. Датчик лидара сконфигурирован, чтобы смоделировать типичный датчик Velodyne® HDL-32E.
close(hScene) if ~ispc error(['3D Simulation is only supported on Microsoft', char(174), ' Windows', char(174), '.']); end % Open the model modelName = 'SimulateLidarSensorPerceptionAlgorithm'; open_system(modelName); snapnow;
Модель использует активированную подсистему, чтобы иметь два режима на основе состояния recordMode
переменная рабочей области.
RecordMode: когда recordMode
установлен в true
, модель записывает и визуализирует синтетические данные о лидаре.
Режим алгоритма: когда recordMode
установлен в false
, модель запускает алгоритм восприятия, описанный позже в разделе Simulate with Perception Algorithm.
Для получения дополнительной информации об активированных подсистемах, смотрите Используя Enabled Подсистемы (Simulink).
Остальная часть примера выполняет эти шаги:
Симулируйте модель в режиме записи. В этом режиме модель записывает синтетические данные о лидаре, сгенерированные датчиком, и сохраняет его в рабочую область.
Используйте данные о датчике, сохраненные в рабочую область, чтобы разработать алгоритм восприятия в MATLAB. Алгоритм восприятия создает карту среды.
Используйте разработанное восприятие в алгоритме цикла путем симуляции модели в режиме алгоритма.
Запись и Визуализирует записи подсистемы синтетические данные о лидаре к рабочей области с помощью блока To Workspace. Визуализировать блок MATLAB function Облака точек использует pcplayer
объект визуализировать облака точек потоковой передачи.
subsystemName = [modelName, '/', 'Record and Visualize']; open_system(subsystemName, 'force'); snapnow;
Симулируйте модель в режиме записи и наблюдайте отображение облака точек потоковой передачи, показывая синтетические данные о датчике лидара. Если модель завершила симуляцию, simOut
переменная содержит структуру с переменными, записанными в рабочую область. helperGetPointCloud
функционируйте извлекает данные о датчике в массив pointCloud
объекты. pointCloud
объект является основной структурой данных, используемой, чтобы содержать данные о лидаре и выполнить обработку облака точек в MATLAB.
% Close the Record and Visualize subsystem close_system(subsystemName); % Set mode to record data recordMode = true; %#ok<NASGU> % Update simulation stop time to end when reference path is completed simStopTime = refPosesX(end,1); set_param(gcs, 'StopTime', num2str(simStopTime)); % Run the simulation simOut = sim(modelName); % Create a pointCloud array from the recorded data ptCloudArr = helperGetPointCloud(simOut);
Синтетические данные о датчике лидара могут использоваться, чтобы разработать, экспериментировать с и проверить алгоритм восприятия в различных сценариях. Этот пример использует алгоритм, чтобы создать 3D карту среды от потоковой передачи данных о лидаре. Такой алгоритм является базовым блоком для приложений как одновременная локализация и отображение (SLAM). Этот алгоритм может также использоваться, чтобы создать карты высокой четкости (HD) для географических областей, которые могут затем использоваться в онлайновой локализации. Карта, создающая алгоритм, инкапсулируется в helperLidarMapBuilder
класс. Этот класс использует облако точек и возможности обработки лидара в MATLAB. Смотрите Лидар и Облако точек, Обрабатывающее (Computer Vision Toolbox).
helperLidarMapBuilder
класс берет входящие облака точек из лидара и прогрессивно создает карту с помощью следующих шагов:
Предварительно обработайте каждое входящее облако точек, чтобы удалить землю и автомобиль, оборудованный датчиком.
Укажите входящее облако точек с последним облаком точек с помощью нормального распределения преобразовывает (NDT). pcregisterndt
функция выполняет регистрацию. Улучшить точность и КПД регистрации, pcdownsample
используется, чтобы проредить облако точек до регистрации.
Используйте предполагаемое преобразование, полученное из регистрации, чтобы преобразовать входящее облако точек к системе отсчета карты.
Для простоты этот пример использует алгоритм отображения только для лидара без внешних сигналов от других датчиков. Такой алгоритм восприимчив к дрейфу при накоплении карты по длинным последовательностям. Кроме того, ОСНОВАННАЯ НА NDT регистрация чувствительна к инициализации. Это типично, чтобы использовать внешние сигналы как точный расчет или IMU, чтобы инициализировать регистрацию.
% Create a lidar map builder mapBuilder = helperLidarMapBuilder(); % Loop through the point cloud array and progressively build a map skipFrames = 5; numFrames = numel(ptCloudArr); exitLoop = false; for n = 1 : skipFrames : numFrames-skipFrames % Update map with new lidar frame updateMap(mapBuilder, ptCloudArr(n)); % Update top-view display isDisplayOpen = updateDisplay(mapBuilder, exitLoop); % Check and exit if needed exitLoop = ~isDisplayOpen; end snapnow; % Close display closeDisplay = true; updateDisplay(mapBuilder, closeDisplay);
Визуализируйте вычисленное использование накопленной карты записанных данных.
hFigRecorded = figure; pcshow(mapBuilder.Map) title('Point Cloud Map - Recorded Data') % Customize axes labels xlabel('X (m)') ylabel('Y (m)') zlabel('Z (m)')
После разработки алгоритма восприятия с помощью зарегистрированных данных можно использовать алгоритм в среде симуляции.
Чтобы обновить модель к режиму алгоритма, установите recordMode
переменная к false
. Этот режим включает Карту Сборки из подсистемы Лидара, которая использует блок MATLAB function, чтобы запустить алгоритм восприятия в процессе моделирования.
close(hFigRecorded) subsystemName = [modelName, '/', 'Build Map from Lidar']; open_system(subsystemName, 'force'); snapnow; % Set record mode to false to enable perception in the loop recordMode = false; %#ok<NASGU> % Simulate with perception sim(modelName); snapnow;
В этом примере вы использовали интерфейс Simulink для 3D среды симуляции к:
Запишите синтетические данные о датчике для датчика лидара.
Разработайте алгоритм восприятия с помощью зарегистрированных данных.
Протестируйте алгоритм восприятия в процессе моделирования.
Путем изменения сцены, размещения большего количества транспортных средств в сцену или обновления монтирования датчика и параметров, алгоритм восприятия может быть протестирован на напряжение согласно различным сценариям. Этот подход может использоваться, чтобы увеличить покрытие для сценариев, которые затрудняют, чтобы воспроизвести в реальном мире.
% Close windows close_system(subsystemName) close_system(modelName) % Reset record mode recordMode = true;
Извлечение helperGetPointCloud массив pointCloud
объекты.
function ptCloudArr = helperGetPointCloud(simOut) % Extract signal ptCloudData = simOut.ptCloudData.signals.values; % Create a pointCloud array ptCloudArr = pointCloud(ptCloudData(:,:,:,1)); for n = 2 : size(ptCloudData,4) ptCloudArr(end+1) = pointCloud(ptCloudData(:,:,:,n)); %#ok<AGROW> end end
Simulation 3D Lidar | Simulation 3D Scene Configuration | Simulation 3D Vehicle with Ground Following