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