checkCollision

Проверяйте, находятся ли два конфигураций в столкновении

Описание

collisionStatus = checkCollision(geom1,geom2) возвращает состояние столкновения между двумя выпуклыми конфигурациями geom1 и geom2. Если эти два конфигураций находятся в столкновении в их заданных положениях, checkCollision равно 1. Если никакое столкновение не найдено, collisionStatus равно 0.

пример

[collisionStatus,sepdist,witnesspts] = checkCollision(geom1,geom2) также возвращает минимальное расстояние и места для дачи свидетельских показаний каждой геометрии, sepdist и witnesspts, соответственно, когда никакое столкновение не найдено между этими двумя конфигурациями.

Примеры

свернуть все

В этом примере показано, как проверять состояние столкновения двух конфигураций столкновения.

Создайте геометрию столкновения поля.

bx = collisionBox(1,2,3);

Создайте цилиндрическую геометрию столкновения.

cy = collisionCylinder(3,1);

Переведите цилиндр вдоль оси X 2.

T = trvec2tform([2 0 0]);
cy.Pose = T;

Постройте эти два конфигураций.

show(cy)
hold on
show(bx)
xlim([-5 5])
ylim([-5 5])
zlim([-5 5])
hold off

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

Проверяйте состояние столкновения. Подтвердите, что состояние сопоставимо с графиком.

[areIntersecting,dist,witnessPoints] = checkCollision(bx,cy)
areIntersecting = 1
dist = NaN
witnessPoints = 3×2

   NaN   NaN
   NaN   NaN
   NaN   NaN

Переведите поле вдоль оси X 3 и вниз ось z 4. Подтвердите, что поле и цилиндр не сталкиваются.

T = trvec2tform([0 3 -4]);
bx.Pose = T;
[areIntersecting,dist,witnessPoints] = checkCollision(bx,cy)
areIntersecting = 0
dist = 2
witnessPoints = 3×2

    0.4286    0.4286
    2.0000    2.0000
   -2.5000   -0.5000

Постройте поле, цилиндр и линейный сегмент, представляющий минимальное расстояние между этими двумя конфигурациями.

show(cy)
hold on
show(bx)
wp = witnessPoints;
plot3([wp(1,1) wp(1,2)], [wp(2,1) wp(2,2)], [wp(3,1) wp(3,2)], 'bo-')
xlim([-5 5])
ylim([-5 5])
zlim([-5 5])
hold off

Figure contains an axes object. The axes object contains 3 objects of type patch, line.

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

свернуть все

Геометрия столкновения в виде одного из следующего:

Геометрия столкновения в виде одного из следующего:

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

свернуть все

Состояние Collision, возвращенное как 0 или 1. Если эти два конфигураций находятся в столкновении, collisionStatus равно 1. В противном случае значением является 0.

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

Минимальное расстояние между двумя конфигурациями столкновения, возвращенными как вещественное число или NaN. Линейный сегмент, который соединяет места для дачи свидетельских показаний (witnesspts) понимает минимальное расстояние между этими двумя конфигурациями. Когда эти два конфигураций находятся в столкновении, sepdist установлен в NaN.

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

Места для дачи свидетельских показаний на каждой геометрии, возвращенной как 3-на-2 матрица. Каждый столбец соответствует месту для дачи свидетельских показаний на geom1 и geom2, соответственно. Линейный сегмент, который соединяет эти два места для дачи свидетельских показаний, имеет длину septdist. Когда эти два конфигураций находятся в столкновении, witnesspts установлен в nan(3,2).

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

Ограничения

  • Результаты проверки столкновения более не надежны, когда минимальное расстояние падает ниже 10-5 m.

Ссылки

[1] Например, Гильберт, Д. В. Джонсон и С. С. Кирти. Быстрая процедура для вычисления расстояния между сложными объектами в 3-мерном пространстве. в Журнале IEEE на Робототехнике и Автоматизации, издании 4, № 2, стр 193-203, апрель 1988, doi: 10.1109/56.2083.

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

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

Введенный в R2019b