В этом примере показано, как выбрать последовательность waypoints от сцены и визуализировать путь транспортного средства после этих waypoints в 3D среде симуляции.
Automated Driving Toolbox™ интегрирует 3D среду симуляции в Simulink®. 3D среда симуляции использует Нереальный Engine® Epic Games®. Блоки Simulink, связанные с 3D средой симуляции, могут быть найдены в drivingsim3d
библиотека. Эти блоки обеспечивают способность к:
Выберите различные сцены в 3D среде симуляции.
Поместите и переместите транспортные средства в сцену.
Присоедините и сконфигурируйте датчики на транспортных средствах.
Симулируйте данные о датчике на основе среды вокруг транспортного средства.
Этот мощный инструмент симуляции может использоваться, чтобы добавить действительные данные при разработке, тестируя и проверяя производительность автоматизированных ведущих алгоритмов. В сочетании с моделью транспортного средства можно использовать эту среду, чтобы выполнить реалистические симуляции с обратной связью, которые охватывают целый автоматизированный ведущий стек от восприятия, чтобы управлять.
Первый шаг в использовании этой среды изучает сцену и выбирает waypoints вдоль желаемого пути к транспортному средству. Этот шаг полезен особенно в сценариях, где алгоритм локализации не находится под тестом. Этот пример фокусируется на этом первом шаге.
В этом примере вы будете:
Визуализируйте сцену в MATLAB®.
В интерактивном режиме выберите waypoints вдоль пути в сцене.
Настройте 3D среду симуляции.
Переместите транспортное средство вдоль пути.
Во-первых, визуализируйте сцену в MATLAB. Каждая сцена может визуализироваться с помощью 2D проекции вида сверху сцены на изображение. Каждое изображение сцены имеет соответствующий 2D пространственный объект привязки класса
описание отношения между пикселями в изображении и мировых координатах сцены. Используйте imref2d
helperGetSceneImage
функция, чтобы получить изображение сцены и сопоставила пространственную ссылку. Этот пример использует сцену большой парковки.
sceneName = 'LargeParkingLot';
[sceneImage, sceneRef] = helperGetSceneImage(sceneName);
Чтобы лучше изучить физические размерности сцены, смотрите sceneRef
переменная. 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)
После исследования сцены выберите набор waypoints, чтобы задать путь для транспортного средства, чтобы следовать. Этот путь может использоваться, чтобы переместить транспортное средство в сцену. Используйте функцию помощника helperSelectSceneWaypoints
в интерактивном режиме выбрать waypoints в сцене.
hFig = helperSelectSceneWaypoints(sceneImage, sceneRef);
Эта функция помощника создает окно фигуры с выбранной сценой.
Исследуйте сцену путем изменения масштаба и панорамирования через изображение сцены. Используйте мышь scrollwheel или панель инструментов осей на изменение масштаба. Наведите на ребро осей к панорамированию в том направлении.
Начните чертить путь путем нажатия на сцену. Путь создается как ломаная линия, состоящая из нескольких точек. Конец, чертящий путь путем двойного клика или щелчка правой кнопкой.
Если вы сделаны, чертя путь, нажмите Export to Workspace, чтобы экспортировать переменные в рабочее пространство MATLAB. В диалоговом окне, которое открывается, нажмите ОК, чтобы экспортировать набор переменных к рабочей области.
Следующие данные экспортированы в рабочую область как переменные MATLAB:
'Waypoints' : массив ячеек с каждым элементом, содержащим матрицу M-2 waypoints в мировых координатах. Каждый элемент массива ячеек соответствует waypoints от различного пути.
Положения пути: массив ячеек с каждым элементом, содержащим матрицы M-3 положений, содержащих положение каждого waypoint. и, задан в метрах. задан в градусах.
% 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 (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. Эта модель использует Симуляцию 3D Блок Configuration Сцены, чтобы выбрать желаемую сцену. Этот пример использует Большую сцену Парковки. Симуляция 3D Блок Configuration Сцены настраивает среду и устанавливает связь между Simulink и средой симуляции.
if ~ispc error(['3D Simulation is only supported on Microsoft', char(174), ' Windows', char(174), '.']); end modelName = 'VisualizeVehiclePathIn3DSimulation'; open_system(modelName); snapnow;
Используйте Симуляцию 3D Транспортное средство с блоком Ground Following, чтобы поместить и переместить транспортные средства в сцену. Модель настраивается, чтобы принять переменные refPosesX
, refPosesY
, и refPosesT
из рабочей области с помощью блока From Workspace. Отдельный, и от 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)