Составьте матрицу внешних сил относительно базы
составляет матрицу внешних сил, которую можно использовать в качестве входов fext
= externalForce(robot
,bodyname
,wrench
)inverseDynamics
и forwardDynamics
для приложения внешних сил, wrench
, к телу, заданному bodyname
. The wrench
вход принимается в базовую систему координат.
составляет матрицу внешних сил, принимая, что fext
= externalForce(robot
,bodyname
,wrench
,configuration
)wrench
находится в bodyname
система координат для заданного configuration
. Матрица сил fext
приведено в базовой системе координат.
Вычислите результирующие ускорения соединений для заданного строения робота с приложенными внешними силами и силами от силы тяжести. Ключ наносится на конкретное тело с весом, заданным для всего робота.
Загрузите предопределенную модель робота KUKA LBR, которая задается как 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
функция.
Загрузите предопределенную модель робота KUKA LBR, которая задается как 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
- Модель роботаrigidBodyTree
объектМодель робота, заданная как rigidBodyTree
объект. Как использовать externalForce
function, установите 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-на-6 или 6-by n, где n - число скоростей (степеней свободы) робота. Форма зависит от DataFormat
свойство robot
. The "row"
формат данных использует матрицу n -by-6. The "column"
формат данных использует 6-бай- n.
Составленная матрица приводит только значения, отличные от нуля, в местоположениях, относящихся к заданному телу. Можно добавить матрицы сил вместе, чтобы задать несколько сил на нескольких телах. Используйте матрицу внешних сил, чтобы задать внешние силы для динамических функций inverseDynamics
и forwardDynamics
.
Указания и ограничения по применению:
При создании rigidBodyTree
объект, используйте синтаксис, который задает MaxNumBodies
как верхняя граница для добавления тел к модели робота. Вы также должны задать DataFormat
свойство как пара "имя-значение". Для примера:
robot = rigidBodyTree("MaxNumBodies",15,"DataFormat","row")
Чтобы минимизировать использование данных, ограничьте верхнюю границу числом, близким к ожидаемому количеству тел в модели. Все форматы данных поддерживаются для генерации кода. Чтобы использовать функции динамики, формат данных должен быть установлен на "row"
или "column"
.
The show
и showdetails
функции не поддерживают генерацию кода.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.