showdetails

Отобразите обзор доступных кинематических групп

Описание

пример

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

Входные параметры

свернуть все

Аналитический решатель инверсной кинематики в виде analyticalInverseKinematics объект.

Выходные аргументы

свернуть все

Кинематические детали классификации групп, возвращенные как структура с этими полями:

  • KinematicGroup — Структура, которая содержит основу и имена корпуса исполнительного элемента конца кинематической группы в полях BaseName и EndEffectorBodyName, соответственно.

  • Type — Кинематическая классификация групп вводит с тем же форматом как то свойство KinematicGroupType analyticalInverseKinematics объект.

  • IsIntersectionAxesMidpointn - вектор элемента указание, пересекается ли каждая определенная объединенная ось с предыдущим или после нефиксированного соединения. n является количеством нефиксированных соединений в кинематической группе.

  • MidpointAxisIntersections — 2 3 n массивом, который хранит объединенные точки пересечения, где каждый элемент третьей размерности соответствует одному соединению.For каждый канал n, первая строка, являются точкой пересечения от предыдущего соединения до соединения, представленного тем каналом. Вторая строка является точкой пересечения от соединения до следующего соединения. Массив дает точки пересечения как [x y z] координаты относительно основы.

Введенный в R2020b