В этом примере показов, как выбрать последовательность путевых точек из сцены и визуализировать путь транспортного средства, следующего за этими путевыми точками в 3D среде симуляции. Это окружение использует Unreal Engine ® by Epic Games ®.
Automated Driving Toolbox™ интегрирует среду симуляции Unreal Engine в Simulink ®. Блоки Simulink, относящиеся к среде симуляции, можно найти в drivingsim3d
библиотека. Эти блоки обеспечивают возможность:
Выберите различные сцены в среде симуляции.
Разместите и перемещайте транспортные средства в месте происшествия.
Прикрепите и сконфигурируйте датчики на транспортных средствах.
Симулируйте данные о датчике на основе окружения вокруг транспортного средства.
Этот мощный инструмент симуляции может использоваться, чтобы дополнить реальные данные при разработке, тестировании и проверке эффективности автоматизированных алгоритмов вождения. В сочетании с моделью транспортного средства можно использовать это окружение для выполнения реалистичных симуляций замкнутой системы, которое охватывает весь беспилотный стек, от восприятия до управления.
Первым шагом в использовании этого окружения является понимание сцены и выбор путевых точек вдоль желаемого пути транспортного средства. Этот шаг особенно полезен в сценариях, где алгоритм локализации не тестируется. Этот пример посвящен этому первому шагу.
В этом примере вы будете:
Визуализация сцены в MATLAB ®.
Интерактивный выбор путевых точек вдоль пути в сцене.
Настройте среду симуляции.
Перемещайте транспортное средство вдоль пути.
Сначала визуализируйте сцену в MATLAB. Каждая сцена может быть визуализирована с помощью 2D проекции сцены сверху на изображение. Каждое изображение сцены имеет соответствующий 2D пространственный объект привязки класса
описание связи между пикселями в изображении и мировыми координатами сцены. Используйте imref2d
helperGetSceneImage
функция для извлечения изображения сцены и связанной пространственной ссылки. Этот пример использует предварительно построенную сцену большой парковки. Чтобы использовать сгенерировать изображение сцены и пространственную ссылку для пользовательской сцены, следуйте процессу, описанному в разделе «Создание карты сверху-вниз нереальной сцены Engine».
sceneName = 'LargeParkingLot';
[sceneImage, sceneRef] = helperGetSceneImage(sceneName);
Чтобы лучше изучить физические размерности сцены, смотрите sceneRef
переменная. The XWorldLimits
и YWorldLimits
свойства определяют пределы мира в направлениях X и Y.
sceneRef.XWorldLimits % (in meters) sceneRef.YWorldLimits % (in meters)
ans = -78.5000 61.5000 ans = -75 65
Визуализируйте изображение сцены с помощью helperShowSceneImage
функция. Эта вспомогательная функция отображает изображение сцены в окне рисунка. Для исследования сцены используйте инструменты панорамирования и масштабирования.
hScene = figure; helperShowSceneImage(sceneImage, sceneRef) title(sceneName)
После исследования сцены выберите набор путевых точек, чтобы задать путь для транспортного средства. Этот путь может использоваться для перемещения транспортного средства в сцене. Используйте функцию helper helperSelectSceneWaypoints
для интерактивного выбора путевых точек в сцене.
hFig = helperSelectSceneWaypoints(sceneImage, sceneRef);
Эта вспомогательная функция открывает окно рисунка с выбранной сценой.
Исследуйте сцену, масштабируя и панорамируя изображение сцены. Для масштабирования используйте колесо прокрутки мыши или панель инструментов осей. Наведите указатель мыши на ребро осей для панорамирования в этом направлении.
Начните рисование пути, нажав на сцену. Путь создаётся как полилиния, состоящая из нескольких точек. Завершите рисование пути, дважды кликнув или щелкнув правой кнопкой мыши.
После построения пути щелкните Экспорт в рабочую область (Export to Workspace), чтобы экспортировать переменные в рабочее пространство MATLAB. В открывшемся диалоговом окне нажмите кнопку OK, чтобы экспортировать набор переменных в рабочую область.
Следующие данные экспортируются в рабочую область как переменный MATLAB:
Путевые точки: Массив ячеек с каждым элементом, содержащим M-by-2 матрицу путевых точек в мировых координатах. Каждый элемент массива ячеек соответствует путевым точкам из другого пути.
Path Poses: Массив ячеек с каждым элементом M-by-3 содержащим матрицы положений, содержащих положение каждой путевой точки. и указаны в метрах. задается в степенях.
% Load variables to workspace if they do not exist if exist('refPoses', 'var')==0 || exist('wayPoints', 'var')==0 % Load MAT-file containing preselected waypoints data = load('waypointsLargeParkingLot'); data = data.waypointsLargeParkingLot; % Assign to caller workspace assignin('caller', 'wayPoints', {data.waypoints}); assignin('caller', 'refPoses', {data.refPoses}); end
Экспортированные переменные теперь содержат последовательность путевых точек (wayPoints
) и последовательность положений (refPoses
). Используйте smoothPathSpline
функция для преобразования последовательности положений в непрерывный путь.
numPoses = size(refPoses{1}, 1); refDirections = ones(numPoses,1); % Forward-only motion numSmoothPoses = 20 * numPoses; % Increase this to increase the number of returned poses [smoothRefPoses,~,cumLengths] = smoothPathSpline(refPoses{1}, refDirections, numSmoothPoses);
Откройте VisualizeVehiclePathIn3DSimulation
Модель Simulink. Эта модель использует блок Simulation 3D Scene Configuration, чтобы выбрать нужную сцену. Этот пример использует сцену «Большая парковка». Блок Simulation 3D Scene Configuration настраивает окружение и устанавливает связь между Simulink и средой симуляции.
if ~ispc error(['3D Simulation is only supported on Microsoft', char(174), ' Windows', char(174), '.']); end modelName = 'VisualizeVehiclePathIn3DSimulation'; open_system(modelName); snapnow;
Используйте блок Simulation 3D Vehicle with Ground Following, чтобы разместить и переместить транспортные средства в сцене. Модель настроена на принятие переменных refPosesX
, refPosesY
, и refPosesT
из рабочей области с помощью блока Из Рабочей области (Simulink). Отделяйте, и от newRefPoses
в отдельные временные ряды. Модель считывает эти переменные рабочей области, чтобы обновить положение транспортного средства.
% Configure the model to stop simulation at 5 seconds. simStopTime = 5; set_param(gcs, 'StopTime', num2str(simStopTime)); % Create a constant velocity profile by generating a time vector % proportional to the cumulative path length. timeVector = normalize(cumLengths, 'range', [0, simStopTime]); % Create variables required by the Simulink model refPosesX = [timeVector, smoothRefPoses(:,1)]; refPosesY = [timeVector, smoothRefPoses(:,2)]; refPosesT = [timeVector, smoothRefPoses(:,3)];
Когда вы моделируете модель, необходимо несколько секунд, чтобы инициализировать среду симуляции. Когда эта инициализация будет завершена, откроется отдельное окно для визуализации среды симуляции. Приведенное ниже изображение является снимком окна среды симуляции.
Запустите симуляцию. В окне рисунка графика показан путь, через который транспортное средство проходит среду симуляции.
sim(modelName);
% Close the model and figure windows
close(hFig)
close_system(modelName)
close(hScene)