Отобразите обзор доступных кинематических групп
отображает обзор всех кинематических комбинаций группы, доступных для kinGroupDetails
= showdetails(analyticalIK
)rigidBodyTree
объект сопоставлен с аналитическим решателем инверсной кинематики (IK). Каждая кинематическая группа содержит имена тела для обоих основа и исполнительный элемент конца, которые допустимы для решений закрытой формы аналитического IK.
Чтобы использовать определенную кинематическую группу для вашего объекта, щелкните по соответствующей ссылке Use this kinematic group в выходной таблице. Эта ссылка обновляет свойства KinematicGroup и KinematicGroupType analyticalInverseKinematics
объект.
Некоторые модели робота манипулятора имеют большие степени свободы (ЧИСЛО СТЕПЕНЕЙ СВОБОДЫ). Чтобы достигнуть определенных положений исполнительного элемента конца, однако, только шесть ЧИСЕЛ СТЕПЕНЕЙ СВОБОДЫ требуются. Используйте analyticalInverseKinematics
объект, который поддерживает роботов с шестью степенями свободы, чтобы определить различные допустимые кинематические группы для этой модели робота большой степени свободы. Используйте showdetails
возразите функции, чтобы получить информацию о модели.
Загрузите модель робота и сгенерируйте решатель IK
Загрузите модель робота в рабочую область и создайте analyicalInverseKinematics
объект. Используйте showdetails
возразите функции, чтобы видеть поддерживаемые кинематические группы.
robot = loadrobot('willowgaragePR2','DataFormat','row'); aik = analyticalInverseKinematics(robot); opts = showdetails(aik);
-------------------- Robot: (94 bodies) Index Base Name EE Body Name Type Actions ----- --------- ------------ ---- ------- 1 l_shoulder_pan_link l_wrist_roll_link RSSSSS Use this kinematic group 2 r_shoulder_pan_link r_wrist_roll_link RSSSSS Use this kinematic group 3 l_shoulder_pan_link l_gripper_palm_link RSSSSS Use this kinematic group 4 r_shoulder_pan_link r_gripper_palm_link RSSSSS Use this kinematic group 5 l_shoulder_pan_link l_gripper_led_frame RSSSSS Use this kinematic group 6 l_shoulder_pan_link l_gripper_motor_accelerometer_link RSSSSS Use this kinematic group 7 l_shoulder_pan_link l_gripper_tool_frame RSSSSS Use this kinematic group 8 r_shoulder_pan_link r_gripper_led_frame RSSSSS Use this kinematic group 9 r_shoulder_pan_link r_gripper_motor_accelerometer_link RSSSSS Use this kinematic group 10 r_shoulder_pan_link r_gripper_tool_frame RSSSSS Use this kinematic group
Выберите группу, programmically использующую выход showdetails
возразите функции, opts
. Выбранная группа использует левое плечо в качестве основы с левым запястьем как исполнительный элемент конца.
aik.KinematicGroup = opts(1).KinematicGroup; disp(aik.KinematicGroup)
BaseName: 'l_shoulder_pan_link' EndEffectorBodyName: 'l_wrist_roll_link'
Сгенерируйте функцию IK для выбранной группы.
generateIKFunction(aik,'willowRobotIK');
Решите аналитический IK
Задайте целевое положение исполнительного элемента конца с помощью случайным образом сгенерированной настройки.
rng(0); expConfig = randomConfiguration(robot); eeBodyName = aik.KinematicGroup.EndEffectorBodyName; baseName = aik.KinematicGroup.BaseName; expEEPose = getTransform(robot,expConfig,eeBodyName,baseName);
Решите для всех настроек робота, которые достигают заданного положения исполнительного элемента конца с помощью сгенерированной функции IK. Чтобы проигнорировать объединенные пределы, задайте false
как второй входной параметр.
ikConfig = willowRobotIK(expEEPose,false);
Чтобы отобразить целевое положение исполнительного элемента конца в мировой системе координат, получите преобразование от основы модели робота, а не основы кинематической группы. Отобразите все сгенерированные решения IK путем определения индексов для кинематической группы решение IK в векторе настройки, используемом с show
функция.
eeWorldPose = getTransform(robot,expConfig,eeBodyName); generatedConfig = repmat(expConfig, size(ikConfig,1), 1); generatedConfig(:,aik.KinematicGroupConfigIdx) = ikConfig; for i = 1:size(ikConfig,1) figure; ax = show(robot,generatedConfig(i,:)); hold all; plotTransforms(tform2trvec(eeWorldPose),tform2quat(eeWorldPose),'Parent',ax); title(['Solution ' num2str(i)]); end
analyticalIK
— Аналитический решатель IKanalyticalInverseKinematics
объектАналитический решатель инверсной кинематики в виде analyticalInverseKinematics
объект.
kinGroupDetails
— Кинематические детали классификации группКинематические детали классификации групп, возвращенные как структура с этими полями:
KinematicGroup
— Структура, которая содержит основу и имена корпуса исполнительного элемента конца кинематической группы в полях BaseName
и EndEffectorBodyName
, соответственно.
Type
— Кинематическая классификация групп вводит с тем же форматом как то свойство KinematicGroupType analyticalInverseKinematics
объект.
IsIntersectionAxesMidpoint
— n - вектор элемента указание, пересекается ли каждая определенная объединенная ось с предыдущим или после нефиксированного соединения. n является количеством нефиксированных соединений в кинематической группе.
MidpointAxisIntersections
— 2 3 n массивом, который хранит объединенные точки пересечения, где каждый элемент третьей размерности соответствует одному соединению.For каждый канал n, первая строка, являются точкой пересечения от предыдущего соединения до соединения, представленного тем каналом. Вторая строка является точкой пересечения от соединения до следующего соединения. Массив дает точки пересечения как [x y z]
координаты относительно основы.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.