Проверяйте, находится ли робот в столкновении
[ проверки, если заданная модель 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 ложь). Если функция возвращает значение true для этого аргумента, который означает, что один из объектов столкновения твердого тела касается другого объекта столкновения в модели робота. Добавьте, что столкновение возражает против вашей модели робота дерева твердого тела использованию addCollision функция.
Типы данных: логический
selfSeparationDist — Минимальное разделительное расстояние между корпусами роботаМинимальное разделительное расстояние между корпусами робота, возвращенного как (m +1) (m +1) матрица, где m является количеством тел. Итоговая строка и столбец соответствует основе робота. Величины в метрах.
Если пара находится в столкновении, функция возвращает разделительное расстояние для связанного элемента как NaN.
Типы данных: double
selfWitnessPts — Места для дачи свидетельских показаний между корпусами робота Места для дачи свидетельских показаний между корпусами робота включая основу, возвращенную как 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
isColliding — Настройка робота находится в столкновенииНастройка робота находится в столкновении, возвращенном как двухэлементный логический вектор. Первый элемент указывает, является ли робот в самостолкновении. Второй элемент указывает, является ли модель робота в столкновении с какими-либо мировыми объектами.
Типы данных: логический
separationDist — Минимальное разделительное расстояние между объектами столкновенияМинимальное разделительное расстояние между столкновением, которому возражают, возвратилось как (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
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.