Проверьте, находится ли робот в столкновении
[ проверяет, задана ли модель робота твёрдого тела 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 function, свойство 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 -кординаты пар точек-свидетелей в форме :
| [<<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
isColliding - строение робота находится в столкновенииСтроение робота находится в столкновении, возвращается как двухэлементный логический вектор. Первый элемент указывает, находится ли робот в автоколлизии. Второй элемент указывает, находится ли модель робота в столкновении с какими-либо мировыми объектами.
Типы данных: logical
separationDist - Минимальное расстояние между объектами столкновенияМинимальное расстояние разделения между сталкиванием возражено, возвращается как (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
witnessPts - Следящие точки между объектами столкновенияСледящие точки между объектами столкновения, заданные как матрица 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
Указания и ограничения по применению:
При создании rigidBodyTree объект, используйте синтаксис, который задает MaxNumBodies как верхняя граница для добавления тел к модели робота. Вы также должны задать DataFormat свойство как пара "имя-значение". Для примера:
robot = rigidBodyTree("MaxNumBodies",15,"DataFormat","row")
Чтобы минимизировать использование данных, ограничьте верхнюю границу числом, близким к ожидаемому количеству тел в модели. Все форматы данных поддерживаются для генерации кода. Чтобы использовать функции динамики, формат данных должен быть установлен на "row" или "column".
The show и showdetails функции не поддерживают генерацию кода.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.