checkCollision

Проверяйте, находится ли робот в столкновении

Описание

пример

[isSelfColliding,selfSeparationDist,selfWitnessPts] = checkCollision(robot,config) проверки, если заданная модель robot робота дерева твердого тела находится в самостолкновении в заданной настройке config. Добавьте, что столкновение возражает против модели робота дерева твердого тела использованию addCollision функция. checkCollision функционируйте также возвращает самое близкое разделительное расстояние selfSeparationDist и места для дачи свидетельских показаний selfWitnessPts как указывает на каждом теле.

Функция игнорирует смежные тела при проверке на самостолкновения.

[isColliding,separationDist,witnessPts] = checkCollision(robot,config,worldObjects) проверки, если заданная модель робота дерева твердого тела находится в столкновении с собой или заданным набором объектов столкновения в мировом worldObjects.

[___] = checkCollision(___,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к любой из комбинаций аргументов от предыдущих синтаксисов.

Примеры

свернуть все

Загрузите модель робота и измените сетки столкновения. Очистите существующие сетки столкновения, добавьте простые примитивы объекта столкновения и проверяйте, являются ли определенные настройки в столкновении.

Загрузите модель робота

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

robot = loadrobot('kukaIiwa7','DataFormat','column');

for i = 1:robot.NumBodies
    clearCollision(robot.Bodies{i})
end

show(robot,'Collisions','on','Visuals','off');

Добавьте цилиндры столкновения

Итеративно добавляйте цилиндр столкновения к каждому телу. Пропустите некоторые тела для этой определенной модели, как они перекрываются и всегда сталкиваются с исполнительным элементом конца (тело 10).

collisionObj = collisionCylinder(0.05,0.25);

for i = 1:robot.NumBodies
    if i > 6 && i < 10
        % Skip these bodies.
    else
        addCollision(robot.Bodies{i},collisionObj)
    end
end

show(robot,'Collisions','on','Visuals','off');

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

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

figure
rng(0) % Set random seed for repeatability.
for i = 1:20
    config = randomConfiguration(robot);
    isColliding = checkCollision(robot,config);
    if isColliding
        show(robot,config,'Collisions','on','Visuals','off');
        title('Collision Detected')
    else
        % Skip non-collisions.
    end
end

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

свернуть все

Модель робота дерева твердого тела в виде rigidBodyTree объект. Использовать checkCollision функция, свойство DataFormat rigidBodyTree объектом должен быть любой 'row' или 'column'.

Объединенная настройка дерева твердого тела в виде n - элемент числовой вектор, где n является количеством нефиксированных соединений в модели робота. Каждым элементом вектора является определенное объединенное положение для соединения в модели робота.

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

Список столкновения возражает в мире в виде массива ячеек объектов столкновения с любой комбинацией collisionBox, collisionCylinder, collisionSphere, и collisionMesh объекты. Функция принимает что Pose свойство каждого объекта относительно основы модели робота дерева твердого тела.

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

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

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

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

Если этот аргумент пары "имя-значение" задан как 'on', функция вместо этого продолжает проверять на столкновения, пока она не исчерпала все возможности.

Типы данных: char | string

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

Этот аргумент пары "имя-значение" влияет на размер separationDist и witnessPts выходные аргументы.

Типы данных: char | string

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

свернуть все

Сам столкновения

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

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

Минимальное разделительное расстояние между корпусами робота, возвращенного как (m +1) (m +1) матрица, где m является количеством тел. Итоговая строка и столбец соответствует основе робота. Модули исчисляются в метрах.

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

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

Места для дачи свидетельских показаний между корпусами робота включая основу, возвращенную как 3 (m +1)-by-2 (m +1) матрица, где m является количеством тел. Места для дачи свидетельских показаний являются точками на любых двух телах, которые являются самыми близкими друг к другу для данной настройки. Матрица принимает форму:

Матрица разделена на 3 2 разделы, которые представляют xyz - координаты пар места для дачи свидетельских показаний в форме:

[x1 x2 y1 y2 z1 z2](1)

Каждый раздел соответствует разделительному расстоянию в selfSeparationDist выходная матрица. Используйте эти уравнения, чтобы определить где раздел selfWitnessPts матрица, которая соответствует определенному разделительному расстоянию, начинается:

Wr = 3Sr – 2(2)
Wc = 2Sc – 1 (3)

Где (Sr, Sc) индекс разделительного расстояния в разделительной матрице расстояния и (Wr, Wc) индекс в матрице места для дачи свидетельских показаний, в которой начинаются соответствующие места для дачи свидетельских показаний.

Если пара находится в столкновении, функция возвращает каждую координату мест для дачи свидетельских показаний для того элемента как NaN.

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

Мировые столкновения

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

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

Минимальное разделительное расстояние между столкновением, которому возражают, возвратилось как (m +w+1) (m +w+1) матрица, где m является количеством тел, и w является количеством мировых объектов. Итоговая строка и столбец соответствует основе робота.

Матрица разделена на 3 2 разделы, которые представляют xyz - координаты пар места для дачи свидетельских показаний в форме:

[x1 x2 y1 y2 z1 z2](4)

Каждый раздел соответствует разделительному расстоянию в separationDist выходная матрица. Используйте эти уравнения, чтобы определить где раздел witnessPts матрица, которая соответствует определенному разделительному расстоянию, начинается:

Wr = 3Sr – 2(5)
Wc = 2Sc – 1 (6)

Где (Sr, Sc) индекс разделительного расстояния в разделительной матрице расстояния и (Wr, Wc) индекс в матрице места для дачи свидетельских показаний, в которой начинаются соответствующие места для дачи свидетельских показаний.

Если пара находится в столкновении, функция возвращает каждую координату мест для дачи свидетельских показаний для того элемента как NaN.

Если пара находится в столкновении, функция возвращает разделительное расстояние как NaN.

Зависимости

Если вы задаете 'IgnoreSelfCollision' аргумент пары "имя-значение" как 'on', затем матрица не содержит значения для расстояний ни между каким данным телом и другими телами в модели робота.

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

Места для дачи свидетельских показаний между столкновением возражают в виде 3 (m +w+1)-by-2 (m +w+1) матрица, где m количество тел и w количество мировых объектов. Места для дачи свидетельских показаний являются точками на любых двух телах, которые являются самыми близкими друг к другу для данной настройки. Матрица принимает форму:

[Wr1_1       Wr1_2     ...    Wr1_(N+1)     Wo1_1     Wo1_2      ... W1_M;
 Wr2_1       Wr2_2     ...    Wr2_(N+1)     Wo2_1     Wo2_2      ... W2_M;
 .           .         .      .             .         .          .   .
 .           .         .      .             .         .          .   .
 .           .         .      .             .         .          .   .
 Wr(N+1)_1   Wr(N+1)_2 ...    Wr(N+1)_(N+1) Wo(N+1)_1 Wo(N+1)_2  ... W(N+1)_M]

Каждым элементом в вышеупомянутой матрице является матрица 2 на 3, которая дает самый близкий [x y z] точки на двух соответствующих телах или мировых объектах. Итоговая строка и столбец соответствует основе робота.

Если пара находится в столкновении, места для дачи свидетельских показаний для того элемента возвращены как NaN(3,2).

Зависимости

Если "IgnoreSelfCollision" пара "имя-значение" установлена в "on", затем матрица не содержит Wr элементы.

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

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

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

| |

Введенный в R2020b