dynamicCapsuleList3D

Список препятствий на основе динамических капсул

Описание

The dynamicCapsuleList3D объект управляет двумя списками объектов столкновения на основе капсул в трехмерном пространстве. Объекты столкновения разделяются на два списка, тела эго и препятствия. Для ego тел и препятствий в 2-D, смотрите dynamicCapsuleList объект.

Каждый объект столкновения в двух списках имеет три ключевых элемента:

  • ID -- Целое число, которое идентифицирует каждый объект, сохраненный в EgoIDs свойство для ego тел и ObstacleIDs свойство для препятствий.

  • Состояния - Расположение и ориентация объекта как матрицы M-на-6, где каждая строка имеет форму [x y z qW qX qY qZ], и M количество состояний вдоль пути объекта в мировой системе координат. Список состояний предполагает, что каждое состояние разделено фиксированным временным интервалом. xyz -положения указаны в метрах, а ориентация - четырехэлементный вектор кватерниона. Локальный источник по умолчанию расположен в центре левого полушария капсулы.

  • Геометрия - Размер объекта на основе капсулы на основе заданных длины и радиуса. Радиус применяется к сферическим концам, а длина - к длине цилиндра. TTo сдвиньте геометрию капсулы и локальный источник относительно исходной точки по умолчанию, задайте преобразование 4 на 4 относительно локальной системы координат капсулы. Чтобы сохранить преобразование по умолчанию, задайте eye(4).

Capsule geometry image showing the position and orientation of the capsule dimensions. Positive X is the right direction from the world frame. Positive Y is up. Positive Z is into the page, based on right-hand rule. Quaternion is a four-element quaternion relative to the world frame. The capsule geometry has a radius for the spherical ends and a length for the cylindrical section in the middle.

Используйте функции объекта для динамического добавления, удаления и обновления геометрий и состояний различных объектов в окружение. Чтобы добавить тело ego, смотрите addEgo функция объекта. Чтобы добавить препятствие, смотрите addObstacle функция объекта.

После определения всех путей к объектам проверяйте пути к ego-телу и проверяйте на столкновения с препятствиями на каждом шаге, используя checkCollision функция объекта. Функция проверяет только, сталкивается ли тело эго с препятствием, игнорируя столкновения между только препятствиями или только телами эго.

Создание

Описание

пример

obstacleList = dynamicCapsuleList3D создает динамический список препятствий на основе капсул без эго-тел или препятствий. Чтобы начать создание списка препятствий, используйте addEgo или addObstacle функции объекта.

Свойства

расширить все

Максимальное количество временных шагов в списке препятствий в виде положительного целого числа. Количество шагов определяет максимальную длину States поле для определенного тела ego или препятствия.

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

Это свойство доступно только для чтения.

Список идентификаторов для ego-тел, возвращенный как вектор положительных целых чисел.

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

Это свойство доступно только для чтения.

Список идентификаторов препятствий, возвращенный как вектор положительных целых чисел.

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

Это свойство доступно только для чтения.

Количество препятствий в списке, возвращенных в виде целого числа.

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

Это свойство доступно только для чтения.

Количество тел ego в списке, возвращаемое как целое число.

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

Функции объекта

addEgoДобавьте тела эго в 3D капсулы списка
addObstacleДобавьте препятствия к 3-D капсулы списка
checkCollisionПроверяйте на столкновения между эго-телами и препятствиями
egoGeometryГеометрические свойства эго тел
egoPoseПоложения эго-тел
obstacleGeometryГеометрические свойства препятствий
obstaclePoseПоложения препятствий
removeEgoУдалите тела эго из списка капсул
removeObstacleУдаление препятствий из списка капсул
showОтображение эго-тел и препятствий в окружении
updateEgoGeometryОбновление геометрических свойств эго-тел
updateEgoPoseОбновление состояний эго-тел
updateObstacleGeometryОбновление геометрических свойств препятствий
updateObstaclePoseОбновление состояний препятствий

Примеры

свернуть все

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

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

obsList = dynamicCapsuleList3D;
numSteps = obsList.MaxNumSteps;

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

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

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

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

show(obsList,"TimeStep",1:numSteps);
ylim([-20 20])
zlim([-5 20])
view(-45,25)
hold on

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

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

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

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

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

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

cla
show(obsList,"TimeStep",1:numSteps);

Figure contains an axes. The axes contains 93 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) ... % z
     ones(numSteps,2) zeros(numSteps,2)]; % quaternion                               % quaternion

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

Проверка на наличие коллизий

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

cla
show(obsList,"TimeStep",1:numSteps,"ShowCollisions",1);

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

Программно проверяйте на столкновения bu с помощью 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)... % z
    ones(numSteps,2) zeros(numSteps,2)]; %quaternion                                  % quaternion

updateEgoPose(obsList,1,egoCapsule1);

cla
show(obsList,"TimeStep",1:numSteps,"ShowCollisions",1);

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

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

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

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