exponenta event banner

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 (false). Если функция возвращает значение true для этого аргумента это означает, что один из объектов столкновения жесткого тела касается другого объекта столкновения в модели робота. Добавление объектов столкновения в модель робота дерева жесткого тела с помощью addCollision функция.

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

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

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

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

Следящие точки между телами робота, включая основание, возвращаются в виде матрицы 3 (m + 1) -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

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

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

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

Минимальное расстояние разделения между объектом столкновения, возвращаемое в виде (m + w + 1) -by- (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