Составьте матрицу внешних сил относительно базы
составляет внешнюю матрицу силы, к которой можно использовать в качестве входных параметров fext
= externalForce(robot
,bodyname
,wrench
)inverseDynamics
и forwardDynamics
прикладывать внешнюю силу, wrench
, к телу, заданному bodyname
. wrench
вход принят, чтобы быть в базовой системе координат.
составляет внешнюю матрицу силы, принимающую тот fext
= externalForce(robot
,bodyname
,wrench
,configuration
)wrench
находится в bodyname
структурируйте для заданного configuration
. Матрица силы fext
дан в базовой системе координат.
Вычислите результирующие объединенные ускорения для данной настройки робота с прикладывавшими внешними силами, и обеспечивает из-за силы тяжести. Ключ применяется к определенному телу с силой тяжести, задаваемой для целого робота.
Загрузите предопределенную модель робота LBR KUKA, которая задана как RigidBodyTree
объект.
load exampleRobots.mat lbr
Установите формат данных на 'row'
. Для всех вычислений динамики форматом данных должен быть любой 'row'
или 'column'
.
lbr.DataFormat = 'row';
Установите силу тяжести. По умолчанию сила тяжести принята, чтобы быть нулем.
lbr.Gravity = [0 0 -9.81];
Получите домашнюю настройку для lbr
робот.
q = homeConfiguration(lbr);
Задайте вектор ключа, который представляет внешние силы, испытанные роботом. Используйте externalForce
функция, чтобы сгенерировать внешнюю матрицу силы. Задайте модель робота, исполнительный элемент конца, который испытывает ключ, вектор ключа и текущую настройку робота. wrench
дан относительно 'tool0'
система координат тела, которая требует, чтобы вы задали настройку робота, q
.
wrench = [0 0 0.5 0 0 0.3];
fext = externalForce(lbr,'tool0',wrench,q);
Вычислите результирующие объединенные ускорения из-за силы тяжести с внешней силой, к которой применяются исполнительный элемент конца 'tool0'
когда lbr
в его домашней настройке. Объединенные скорости и объединенные крутящие моменты приняты, чтобы быть нулем (вход как пустой вектор []
).
qddot = forwardDynamics(lbr,q,[],[],fext);
Используйте externalForce
функция, чтобы сгенерировать матрицы силы, чтобы примениться к модели дерева твердого тела. Матрица силы является m-6 вектором, который ссорится для каждого соединения на роботе, чтобы применить ключ с шестью элементами. Используйте externalForce
функционируйте и задайте исполнительный элемент конца, чтобы правильно присвоить ключ правильной строке матрицы. Можно добавить, что несколько спрессовывают матрицы, чтобы прикладывать несколько сил к одному роботу.
Чтобы вычислить объединенные крутящие моменты, которые противостоят этим внешним силам, используйте inverseDynamics
функция.
Загрузите предопределенную модель робота LBR KUKA, которая задана как RigidBodyTree
объект.
load exampleRobots.mat lbr
Установите формат данных на 'row'
. Для всех вычислений динамики форматом данных должен быть любой 'row'
или 'column'
.
lbr.DataFormat = 'row';
Установите Gravity
свойство дать определенное гравитационное ускорение.
lbr.Gravity = [0 0 -9.81];
Получите домашнюю настройку для lbr
.
q = homeConfiguration(lbr);
Установите внешнюю силу на link1
. Входной вектор ключа описывается в базовой системе координат.
fext1 = externalForce(lbr,'link_1',[0 0 0.0 0.1 0 0]);
Установите внешнюю силу на исполнительном элементе конца, tool0
. Входной вектор ключа описывается в tool0
система координат.
fext2 = externalForce(lbr,'tool0',[0 0 0.0 0.1 0 0],q);
Вычислите объединенные крутящие моменты, требуемые сбалансировать внешние силы. Чтобы объединить силы, добавьте матрицы силы вместе. Объединенные скорости и ускорения приняты, чтобы быть нулем (вход как []
).
tau = inverseDynamics(lbr,q,[],[],fext1+fext2);
robot
— Модель RobotrigidBodyTree
объектМодель Robot в виде rigidBodyTree
объект. Использовать externalForce
функция, набор DataFormat
свойство к любому "row"
или "column"
.
bodyname
— Имя тела, к которому прикладывается внешняя силаИмя тела, к которому внешняя сила прикладывается в виде строкового скаляра или вектора символов. Это имя тела должно совпадать с телом на robot
объект.
Типы данных: char |
string
wrench
— Крутящие моменты и силы обратились к телу[Tx Ty Tz Fx Fy Fz]
векторКрутящие моменты и силы обратились к телу в виде [Tx Ty Tz Fx Fy Fz]
вектор. Первые три элемента ключа соответствуют моментам вокруг xyz - оси. Последними тремя элементами являются линейные силы вдоль тех же осей. Если вы не задаете робота configuration
, ключ принят, чтобы быть относительно базовой системы координат.
configuration
— Настройка роботаНастройка робота в виде вектора с положениями для всех нефиксированных соединений в модели робота. Можно сгенерировать настройку с помощью homeConfiguration(robot)
, randomConfiguration(robot)
, или путем определения собственных объединенных положений. Использовать векторную форму configuration
, установите DataFormat
свойство для robot
к любому "row"
или "column"
.
fext
— Внешняя матрица силыВнешняя матрица силы, возвращенная или как n-by-6 или как 6 n матрицей, где n является скоростным номером (степени свободы) робота. Форма зависит от DataFormat
свойство robot
. "row"
формат данных использует n-by-6 матрица. "column"
формат данных использует 6 n.
Составленная матрица перечисляет только значения кроме нуля в местоположениях, относящихся к заданному телу. Можно добавить, спрессовывают матрицы, чтобы задать несколько сил на нескольких телах. Используйте внешнюю матрицу силы, чтобы задать внешние силы к функциям динамики inverseDynamics
и forwardDynamics
.
Указания и ограничения по применению:
При создании rigidBodyTree
объект, используйте синтаксис, который задает MaxNumBodies
как верхняя граница для добавления тел к модели робота. Необходимо также задать DataFormat
свойство как пара "имя-значение". Например:
robot = rigidBodyTree("MaxNumBodies",15,"DataFormat","row")
Чтобы минимизировать использование данных, ограничьте верхнюю границу номером близко к ожидаемому количеству тел в модели. Все форматы данных поддерживаются для генерации кода. Чтобы использовать функции динамики, формат данных должен быть установлен в "row"
или "column"
.
show
и showdetails
функции не поддерживают генерацию кода.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.