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 function, свойство 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 -кординаты пар точек-свидетелей в форме :

[<<reservedrangesplaceholder5> <reservedrangesplaceholder4> <reservedrangesplaceholder3> <reservedrangesplaceholder2> <reserved angesplaceholder1> <reservedrangesplaceholder0>] (1)

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

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

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

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

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

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

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

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

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

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

[<<reservedrangesplaceholder5> <reservedrangesplaceholder4> <reservedrangesplaceholder3> <reservedrangesplaceholder2> <reserved angesplaceholder1> <reservedrangesplaceholder0>] (4)

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

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

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

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

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

Зависимости

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

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

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