Проверьте, находится ли робот в состоянии столкновения
[ проверяет, является ли указанная модель робота дерева жестких тел 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

robot - Модель робота дерева жесткого телаrigidBodyTree объектМодель робота дерева жесткого тела, заданная как rigidBodyTree объект. Для использования checkCollision функция, свойство DataFormat rigidBodyTree объект должен быть либо 'row' или 'column'.
config - Конфигурация соединения дерева жесткого телаКонфигурация соединения дерева жесткого тела, заданная в виде n-элементного числового вектора, где n - количество нефиксированных соединений в модели робота. Каждый элемент вектора является определенным положением соединения в модели робота.
Типы данных: single | double
worldObjects - Список объектов столкновения в мире{} (по умолчанию) | массив ячеек объектов коллизийСписок объектов коллизий в мире, указанный как массив ячеек объектов коллизий с любой комбинацией collisionBox, collisionCylinder, collisionSphere, и collisionMesh объекты. Функция предполагает, что Pose свойство каждого объекта относительно основания модели робота дерева жесткого тела.
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'Exhaustive','on' позволяет выполнять исчерпывающую проверку на наличие конфликтов и заставляет функцию вычислять все расстояния разделения и следящие точки.'Exhaustive' - Проверка всех конфликтов'off' (по умолчанию) | 'on'Полная проверка всех конфликтов, указанных как пара, разделенная запятыми, состоящая из 'Exhaustive' и 'on' или 'off'. По умолчанию функция находит первое столкновение и останавливается, возвращая расстояния разделения и выносные точки для незавершенных проверок как Inf.
Если аргумент пары имя-значение указан как 'on'вместо этого функция продолжает проверять наличие конфликтов до тех пор, пока не исчерпает все возможности.
Типы данных: char | string
'IgnoreSelfCollision' - Пропустить проверку на самопроизвольные столкновения роботов'off' (по умолчанию) | 'on'Пропустить проверку на наличие автоматических столкновений робота,, указанная как разделенная запятыми пара, состоящая из 'IgnoreSelfCollision' и 'on' или 'off'. Если этот аргумент включен, функция игнорирует столкновения между объектами столкновения тел модели робота дерева жестких тел и другими объектами столкновения той же модели или ее основания.
Этот аргумент пары имя-значение влияет на размер separationDist и witnessPts выходные аргументы.
Типы данных: char | string
isSelfColliding - Конфигурация робота находится в состоянии самоволкиtrueили 1 | falseили 0Конфигурация робота находится в состоянии самоволки, возвращенной как логическая 1 (true) или 0 (false). Если функция возвращает значение true для этого аргумента это означает, что один из объектов столкновения жесткого тела касается другого объекта столкновения в модели робота. Добавление объектов столкновения в модель робота дерева жесткого тела с помощью addCollision функция.
Типы данных: logical
selfSeparationDist - Минимальное расстояние между телами роботаМинимальное расстояние между телами робота, возвращаемое в виде (m + 1) -by- (m + 1) матрицы, где m - количество тел. Конечные строка и столбец соответствуют базе робота. Единицы в метрах.
Если пара находится в состоянии столкновения, функция возвращает расстояние разделения для связанного элемента как NaN.
Типы данных: double
selfWitnessPts - Следящие точки между телами роботов Следящие точки между телами робота, включая основание, возвращаются в виде матрицы 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
isColliding - Конфигурация робота находится в состоянии столкновенияКонфигурация робота находится в коллизии, возвращается как двухэлементный логический вектор. Первый элемент указывает, находится ли робот в состоянии самоволки. Второй элемент указывает, находится ли модель робота в столкновении с какими-либо мировыми объектами.
Типы данных: logical
separationDist - Минимальное расстояние между объектами столкновенияМинимальное расстояние разделения между объектом столкновения, возвращаемое в виде (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
witnessPts - следящие точки между объектами столкновения;Выносные точки между объектами столкновения, заданными как матрица 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
Примечания и ограничения по использованию:
При создании rigidBodyTree используйте синтаксис, определяющий MaxNumBodies в качестве верхней границы для добавления тел к модели робота. Необходимо также указать DataFormat свойство как пара имя-значение. Например:
robot = rigidBodyTree("MaxNumBodies",15,"DataFormat","row")
Чтобы минимизировать использование данных, ограничьте верхнюю границу числом, близким к ожидаемому количеству тел в модели. Для создания кода поддерживаются все форматы данных. Для использования динамических функций формат данных должен быть установлен в "row" или "column".
show и showdetails функции не поддерживают создание кода.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.