show

Отобразите тела эго и препятствия в среде

Описание

пример

ax = show(capsuleListObj) отображает начальное состояние всех тел эго и препятствий в заданном списке капсул, и возвращает указатель осей графика.

ax = show(capsuleListObj,Name,Value) задает аргументы пары "имя-значение" использования опций. Например, 'FastUpdate',true включает быстрые обновления существующего графика.

Примеры

свернуть все

Создайте путь к телу эго и обеспечьте состояния препятствия с помощью dynamicCapsuleList объект. Визуализируйте состояния всех объектов в среде в различных метках времени. Подтвердите путь тела эго путем проверки на столкновения с препятствиями в среде.

Создайте dynamicCapsuleList объект. Извлеките максимальное количество шагов, чтобы использовать в качестве количества меток времени для ваших контуров объектов.

obsList = dynamicCapsuleList;
numSteps = obsList.MaxNumSteps;

Добавьте тело эго

Задайте тело эго путем определения ID, геометрии, и утвердите вместе в структуре. Краткая геометрия имеет длину 3 м и радиус 1 м. Задайте состояние как линейный контур от x = 0m к x = 100 м.

egoID1 = 1;
geom = struct("Length",3,"Radius",1,"FixedTransform",eye(3));
states = linspace(0,1,obsList.MaxNumSteps)'.*[100 0 0];

egoCapsule1 = struct('ID',egoID1,'States',states,'Geometry',geom);
addEgo(obsList,egoCapsule1);

show(obsList,"TimeStep",[1:numSteps]);
ylim([-20 20])

Добавьте препятствия

Задайте состояния для двух препятствий, которые разделяются от тела эго на 5 м в противоположных направлениях на оси Y.. Примите, что препятствия имеют ту же геометрию geom как тело эго.

obsState1 = states + [0 5 0];
obsState2 = states + [0 -5 0];

obsCapsule1 = struct('ID',1,'States',obsState1,'Geometry',geom);
obsCapsule2 = struct('ID',2,'States',obsState2,'Geometry',geom);

addObstacle(obsList,obsCapsule1);
addObstacle(obsList,obsCapsule2);

show(obsList,"TimeStep",[1:numSteps]);
ylim([-20 20])

Обновите препятствия

Изменяйте свои местоположения препятствия и размерности геометрии в зависимости от времени. Используйте ранее сгенерированную структуру, измените поля и обновите препятствия с помощью updateObstacleGeometry и updateObstaclePose функции объекта. Уменьшает радиус первого препятствия 0,5 м, и измените путь, чтобы переместить его к телу эго.

obsCapsule1.Geometry.Radius = 0.5;

obsCapsule1.States = ...
    [linspace(0,100,numSteps)' ... % x
     linspace(5,-4,numSteps)' ... % y 
     zeros(numSteps,1)]; % theta

updateObstacleGeometry(obsList,1,obsCapsule1);
updateObstaclePose(obsList,1,obsCapsule1);

Проверяйте на столкновения

Визуализируйте новые пути. Покажите, где столкновения между телом эго и препятствием, которое отображение подсвечивает в красном. Заметьте, что столкновения между препятствиями не проверяются.

show(obsList,"TimeStep",[1:numSteps],"ShowCollisions",1);
ylim([-20 20])
xlabel("X (m)")
ylabel("Y (m)")

Программно проверяйте на столкновения при помощи checkCollision объектная функция. Функция возвращает вектор из логических значений, который указывает на состояние каждого временного шага. Вектор транспонирован в целях отображения.

collisions = checkCollision(obsList)'
collisions = 1x31 logical array

   0   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1   1   1   1   1   1   1   0   0   0   0   0   0   0   0   0

Чтобы подтвердить пути с большим количеством шагов, используйте any функция на векторе из значений столкновения.

if any(collisions)
    disp("Collision detected.")
end
Collision detected.

Обновите путь к эго

Задайте новый путь для тела эго. Визуализируйте пути снова, отображая столкновения.

egoCapsule1.States = ...
    [linspace(0,100,numSteps)' ... % x
    3*sin(linspace(0,2*pi,numSteps))' ... % y
    zeros(numSteps,1)]; % theta

updateEgoPose(obsList,1,egoCapsule1);

show(obsList,"TimeStep",[1:numSteps],"ShowCollisions",1);
ylim([-20 20])

Входные параметры

свернуть все

Динамический список капсул в виде dynamicCapsuleList или dynamicCapsuleList3D объект.

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'FastUpdate',true включает опцию для быстрых обновлений в существующем графике.

Родительские оси, чтобы построить на в виде разделенной запятой пары, состоящей из 'Parent' и указатель Свойств осей графика.

Выполните быстрое обновление существующего графика в виде разделенной запятой пары, состоящей из 'FastUpdate' и логический 0 ложь) или 1 TRUE). Необходимо использовать show возразите функции, чтобы первоначально отобразить ваш список капсул, прежде чем можно будет задать его с этим аргументом.

Типы данных: логический

Временные шаги, чтобы отобразиться в виде разделенной запятой пары, состоящей из 'TimeStep' и числовой вектор из значений в области значений [1, N], где N является значением MaxNumSteps свойство объекта задано в capsuleListObj аргумент. Каждый временной шаг соответствует строке матрицы состояния для каждого тела эго и препятствия.

Проверяйте на и подсветите столкновения в отображении в виде разделенной запятой пары, состоящей из 'ShowCollisions' и логический 0 ложь) или 1 TRUE).

Типы данных: логический

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

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

Выходные аргументы

свернуть все

Родительские оси динамической капсулы перечисляют график, возвращенный как anAxes указатель Свойств.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2020b