Выберите Waypoints для 3D симуляции

В этом примере показано, как выбрать последовательность 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

После исследования сцены выберите набор waypoints, чтобы задать путь для транспортного средства, чтобы следовать. Этот путь может использоваться, чтобы переместить транспортное средство в сцену. Используйте функцию помощника helperSelectSceneWaypoints в интерактивном режиме выбрать waypoints в сцене.

hFig = helperSelectSceneWaypoints(sceneImage, sceneRef);

Эта функция помощника создает окно фигуры с выбранной сценой.

  • Исследуйте сцену путем изменения масштаба и панорамирования через изображение сцены. Используйте мышь scrollwheel или панель инструментов осей на изменение масштаба. Наведите на ребро осей к панорамированию в том направлении.

  • Начните чертить путь путем нажатия на сцену. Путь создается как ломаная линия, состоящая из нескольких точек. Конец, чертящий путь путем двойного клика или щелчка правой кнопкой.

  • Если вы сделаны, чертя путь, нажмите Export to Workspace, чтобы экспортировать переменные в рабочее пространство MATLAB. В диалоговом окне, которое открывается, нажмите ОК, чтобы экспортировать набор переменных к рабочей области.

Следующие данные экспортированы в рабочую область как переменные MATLAB:

  • 'Waypoints' : массив ячеек с каждым элементом, содержащим матрицу M-2$(x,y)$ waypoints в мировых координатах. Каждый элемент массива ячеек соответствует waypoints от различного пути.

  • Положения пути: массив ячеек с каждым элементом, содержащим матрицы M-3$(x, y, \theta)$ положений, содержащих положение каждого waypoint.$x$ и$y$, задан в метрах.$\theta$ задан в градусах.

% 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 функционируйте, чтобы преобразовать последовательность положений к$C^2$ непрерывному пути.

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);

Настройте и 3D среду симуляции модели

Откройте 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. Отдельный$x$,$y$ и$\theta$ от 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)

Смотрите также

Блоки

Функции

Похожие темы