show

Отображение эго-тел и препятствий в окружении

Описание

пример

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

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

Примеры

свернуть все

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

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

obsList = dynamicCapsuleList;
numSteps = obsList.MaxNumSteps;

Добавить тело Ego

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

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

Figure contains an axes. The axes contains an object of type patch.

Добавление препятствий

Задайте состояния для двух препятствий, которые отделены от тела эго на 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])

Figure contains an axes. The axes contains 3 objects of type patch.

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

Изменяйте местоположения препятствий и размерности с течением времени. Используйте ранее сгенерированную структуру, изменяйте поля и обновляйте препятствия с помощью 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)")

Figure contains an axes. The axes contains 3 objects of type patch.

Программно проверяйте на столкновения при помощи 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.

Обновление пути Ego

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

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

Figure contains an axes. The axes contains 3 objects of type patch.

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

свернуть все

Список динамических капсул, заданный как dynamicCapsuleList или dynamicCapsuleList3D объект.

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

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

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

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

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

Типы данных: logical

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

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

Типы данных: logical

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

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

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

свернуть все

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

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

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

.
Введенный в R2020b