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