analyticalInverseKinematics

Решите инверсную кинематику закрытой формы

Описание

analyticalInverseKinematics объект генерирует функции что компьютер все решения закрытой формы для инверсной кинематики (IK) для последовательно-цепочечных манипуляторов. Объект генерирует пользовательскую функцию, чтобы найти несколько отличных объединенных настроек, которые достигают желаемого положения исполнительного элемента конца. Поддержка объектов шесть моделей робота дерева твердого тела степени свободы (DOF) совместимыми кинематическими параметрами. Это основные элементы решателя:

  • Модель Robot — модель дерева Твердого тела, которая задает кинематику робота. Задайте эту модель как rigidBodyTree возразите при создании решателя.

  • Кинематическая группа — корпус Основы и исполнительного элемента конца называет для 6-DOF последовательную цепь, которая является частью модели робота. Чтобы установить этот параметр, используйте showdetails функция.

  • Кинематический тип группы — Классификация соединений, соединяющих основу, чтобы закончить исполнительный элемент.

Чтобы видеть все возможные поддерживаемые кинематические группы для вашего робота, используйте showdetails объектная функция. Чтобы установить определенную группу из списка, щелкните по ссылке Use this kinematic group для кинематической группы в возвращенном списке.

Чтобы вычислить инверсную кинематику для определенной кинематической группы, используйте generateIKFunction объектная функция. Чтобы гарантировать вашему роботу и кинематическая группа, модели совместима, проверяет свойство IsValidGroupForIK после выбора кинематической группы.

Чтобы сгенерировать числовые решения, используйте inverseKinematics и generalizedInverseKinematics объекты.

Создание

Описание

пример

analyticalIK = analyticalInverseKinematics(robotRBT) создает аналитический решатель инверсной кинематики для модели робота дерева твердого тела в виде rigidBodyTree объект. Исполнительный элемент конца является итоговым телом, перечисленным в свойстве Bodies модели робота. robotRBT аргумент устанавливает свойство RigidBodyTree.

analyticalIK = analyticalInverseKinematics(robotRBT,'KinematicGroup',kinGroup) устанавливает свойство KinematicGroup на kinGroup аргумент в виде структуры.

Свойства

развернуть все

Модель робота дерева твердого тела в виде rigidBodyTree объект. Чтобы использовать предоставленную модель робота, смотрите loadrobot. Чтобы импортировать модели Unified Robot Description Format (URDF), смотрите importrobot функция.

Корпус основы и исполнительного элемента конца называет в виде структуры. Структура содержит эти поля:

  • BaseName — Имя тела в модели робота сохранено в RigidBodyTree свойство, которое представляет основу кинематической группы. Значением по умолчанию является основа RigidBodyTree свойство.

  • EndEffectorBodyName — Имя тела в модели робота сохранено в RigidBodyTree свойство, которое представляет конец кинематической группы. Значением по умолчанию является последнее тело в свойстве Bodies модели робота..

Пример: struct("BaseName","base","EndEffectoryBodyName","tool0")

Типы данных: struct

Это свойство доступно только для чтения.

Классификация кинематической группы, сохраненной как вектор символов. Каждый символ задает класс соответствующего объединенного типа от основы в конец исполнительный элемент. Это опции для символов:

  • R — Шарнирное соединение

  • P — Призматическое соединение

  • S — Сферическое соединение, созданное тремя последовательными шарнирными соединениями с пересекающимися осями

Когда создано, объект автоматически выбирает кинематическую группу из модели робота, но другие опции могут быть доступными. Чтобы видеть допустимые кинематические группы для вашей модели, используйте showdetails объектная функция.

Пример: 'RRRSSS'

Типы данных: char

Это свойство доступно только для чтения.

Отображение конфигурации решения IK к настройке дерева твердого тела в виде вектора с шестью элементами. Это отображение преобразует индексы решения IK, которое выводится от generateIKFunction функционируйте в индексы для модели робота, сохраненной в свойстве RigidBodyTree.

Пример: [1 2 3 4 5 6]

Типы данных: double

Это свойство доступно только для чтения.

Индикация относительно того, возможно ли решение закрытой формы, сохранено как логическое, 1 TRUE или 0 ложь). Когда этим свойством является false, generateIKFunction функция не может сгенерировать решатель IK для текущей кинематической группы. Используйте showdetails возразите функции, чтобы проверять, существуют ли какие-либо допустимые группы. Чтобы выбрать допустимую группу, задайте различную основу или исполнительный элемент конца к KinematicGroup свойство, или изменяют кинематические параметры вашей модели робота, сохраненной в свойстве RigidBodyTree.

Типы данных: логический

Функции объекта

generateIKFunctionСгенерируйте функцию для инверсной кинематики закрытой формы
showdetailsОтобразите обзор доступных кинематических групп

Примеры

свернуть все

Сгенерируйте решения для инверсной кинематики (IK) закрытой формы для желаемого исполнительного элемента конца. Загрузите предоставленную модель робота и смотрите детали о выполнимых кинематических группах корпусов исполнительного элемента конца и основы. Сгенерируйте функцию для своей желаемой кинематической группы. Смотрите различные настройки для определенного положения исполнительного элемента конца.

Модель робота

Загрузите модель робота ABB IRB 120 в рабочую область. Отобразите модель.

robot = loadrobot('abbIrb120','DataFormat','row');
show(robot);

Аналитический IK

Создайте аналитический решатель IK. Покажите детали для модели робота, которая перечисляет различные кинематические группы, доступные для закрытой формы аналитические решения IK. Выберите вторую кинематическую группу путем нажатия на Use эта кинематическая ссылка группы во второй строке таблицы.

aik = analyticalInverseKinematics(robot);
showdetails(aik)
--------------------
Robot: (8 bodies)

Index      Base Name   EE Body Name     Type                    Actions
-----      ---------   ------------     ----                    -------
    1      base_link         link_6   RRRSSS   Use this kinematic group
    2      base_link          tool0   RRRSSS   Use this kinematic group

Смотрите кинематическую группу, которая перечисляет основу и имена корпуса исполнительного элемента конца. Для этого робота группа использует 'base_link' и 'tool0' тела, соответственно.

aik.KinematicGroup
ans = struct with fields:
               BaseName: 'base_link'
    EndEffectorBodyName: 'tool0'

Сгенерируйте функцию

Сгенерируйте функцию IK для выбранной кинематической группы. Задайте имя для функции, которая сгенерирована и сохранена в текущем каталоге.

generateIKFunction(aik,'robotIK');

Задайте желаемое положение исполнительного элемента конца. Преобразуйте xyz-позиционное в гомогенное преобразование.

eePosition = [0 0.5 0.5];
eePose = trvec2tform(eePosition);
hold on
plotTransforms(eePosition,tform2quat(eePose))
hold off

Сгенерируйте настройку для решения IK

Задайте гомогенное преобразование к сгенерированной функции IK, которая генерирует все решения для желаемого положения исполнительного элемента конца. Отобразите первую сгенерированную настройку, чтобы проверить, что желаемое положение было достигнуто.

ikConfig = robotIK(eePose); % Uses the generated file

show(robot,ikConfig(1,:));
hold on
plotTransforms(eePosition,tform2quat(eePose))
hold off

Отобразите всю закрытую форму решения IK последовательно.

figure;
numSolutions = size(ikConfig,1);

for i = 1:size(ikConfig,1)
    subplot(1,numSolutions,i)
    show(robot,ikConfig(i,:));
end

Некоторые модели робота манипулятора имеют большие степени свободы (ЧИСЛО СТЕПЕНЕЙ СВОБОДЫ). Чтобы достигнуть определенных положений исполнительного элемента конца, однако, только шесть ЧИСЕЛ СТЕПЕНЕЙ СВОБОДЫ требуются. Используйте 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

Расширенные возможности

Введенный в R2020b
Для просмотра документации необходимо авторизоваться на сайте