generalizedInverseKinematics

Создайте обратную кинематику с ограничениями решателя

Описание

The generalizedInverseKinematics Системная object™ использует набор кинематических ограничений, чтобы вычислить строение соединения для модели древовидного твердого тела, заданной rigidBodyTree объект. The generalizedInverseKinematics объект использует нелинейный решатель, чтобы удовлетворить ограничениям или достичь наилучшего приближения.

Задайте типы ограничений, ConstraintInputs, перед вызовом объекта. Чтобы изменить входные входы ограничения после вызова объекта, вызовите релиз (gik).

Задайте входы ограничения как объекты ограничения и вызовите generalizedInverseKinematics с переданными в него объектами. Для создания объектов ограничений используйте следующие объекты:

Если вашим единственным ограничением является положение и ориентация эффектора конца, рассмотрите использование inverseKinematics как ваш решатель вместо этого.

Для решений аналитической обратной кинематики в закрытой форме смотрите analyticalInverseKinematics.

Чтобы решить обобщенные ограничения обратной кинематики:

  1. Создайте generalizedInverseKinematics Объекту и установите его свойства.

  2. Вызывайте объект с аргументами, как будто это функция.

Дополнительные сведения о работе системных объектов см. в разделе «Что такое системные объекты?».

Создание

Описание

пример

gik = generalizedInverseKinematics возвращает обобщенный решатель обратной кинематики без заданной твердой модели дерева тел. Задайте rigidBodyTree модель и ConstraintInputs свойство перед использованием этого решателя.

gik = generalizedInverseKinematics('RigidBodyTree',rigidbodytree,'ConstraintInputs',inputTypes) возвращает обобщенный решатель обратной кинематики с древовидной моделью твердого тела и заданными ожидаемыми входами ограничений.

gik = generalizedInverseKinematics(Name,Value) возвращает обобщенный решатель обратной кинематики с каждым заданным именем свойства, установленным на заданное значение одним или несколькими Name,Value аргументы в виде пар. Name должны находиться внутри одинарных кавычек (''). Можно задать несколько аргументы пары "имя-значение" в любом порядке как Name1,Value1,...,NameN,ValueN.

Свойства

расширить все

Если не указано иное, свойства являются нетронутыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируются, когда вы вызываете их, и release функция разблокирует их.

Если свойство настраивается, можно изменить его значение в любой момент.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

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

Количество входов ограничения, заданное как скаляр. Значение этого свойства является количеством типов ограничений, заданных в ConstraintInputs свойство.

Входные типы ограничений, заданные как массив ячеек из векторов символов. Возможные входные типы ограничений со связанными с ними объектами ограничений:

Используйте объекты ограничения, чтобы задать необходимые параметры и передать эти типы объектов объекту при вызове. Для примера:

Создайте обобщенный объект решателя обратной кинематики. Задайте RigidBodyTree и ConstraintInputs свойства.

gik = generalizedInverseKinematics(...
					'RigidBodyTree',rigidbodytree,
					'ConstraintInputs',{'position','aiming'});

Создайте соответствующие объекты ограничений.

positionTgt = constraintPositionTarget('left_palm');
aimConst = constraintAiming('right_palm');

Передайте объекты ограничения в объект решателя с начальным предположением.

configSol = gik(initialGuess,positionTgt,aimConst);

Модель древовидного твердого тела, заданная как rigidBodyTree объект. Задайте это свойство перед использованием решателя. Если вы измените модель древовидного твердого тела, переназначите это свойство древовидному твердому телу. Для примера:

Создайте решатель IK и задайте древовидное твердое тело.

gik = generalizedInverseKinematics(...
					'RigidBodyTree',rigidbodytree,
					'ConstraintInputs',{'position','aiming'});

Измените модель древовидного твердого тела.

addBody(rigidbodytree,rigidBody('body1'),'base')

Переназначите древовидное твердое тело решателю IK. Если решатель или step функция вызывается перед изменением модели древовидного твердого тела, используйте release чтобы разрешить изменение свойства.

gik.RigidBodyTree = rigidbodytree;

Алгоритм решения обратной кинематики, заданный как 'BFGSGradientProjection' или 'LevenbergMarquardt'. Для получения дополнительной информации о каждом алгоритме, см. «Алгоритмы обратной кинематики».

Параметры, сопоставленные с заданным алгоритмом, задаются как структура. Поля в структуре специфичны для алгоритма. См. «Параметры решателя».

Использование

Описание

[configSol,solInfo] = gik(initialguess,constraintObj,...,constraintObjN) находит строение шарнира, configSol, на основе начального предположения и разделенного запятыми списка объектов описания ограничений. Количество описаний ограничений зависит от ConstraintInputs свойство.

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

расширить все

Начальное предположение строения робота, заданное как массив структур или вектор. Значение initialguess зависит от DataFormat свойство объекта, заданное в RigidBodyTree свойство, заданное в gik.

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

Описания ограничений, заданные ConstraintInputs свойство gik, заданный как один или несколько из следующих объектов ограничений:

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

расширить все

Решение строения робота, возвращаемое как массив структур или вектор, зависит от DataFormat свойство объекта, заданное в RigidBodyTree свойство, заданное в gik.

Массив структур содержит следующие поля:

  • JointName - Вектор символов для имени соединения, заданного в RigidBodyTree модель робота

  • JointPosition - Положение соответствующего соединения

Векторный выход является массивом положений соединений, которые были бы даны в JointPosition для выхода структуры.

Это строение соединения является вычисленным решением, которое достигает целевого положения end-effector в пределах допуска решения.

Примечание

Для шарниров вращения, если пределы соединений превышают область значений 2*pi, где происходит перенос положения соединения, тогда положение возвращенного соединения является одним из самых близких к нижней границе соединения.

Информация о решении, возвращенная как структура, содержащая следующие поля:

  • Iterations - Количество итераций, выполняемых решателем.

  • NumRandomRestarts - Количество случайных перезапусков, потому что решатель застрял в локальном минимуме.

  • ConstraintViolation - Информация об ограничении, возвращенная как массив структур. Каждая структура массива имеет следующие поля:

    • Type: Тип соответствующего входа ограничения, заданный в ConstraintInputs свойство.

    • Violation: Вектор нарушений ограничений для соответствующего типа ограничений. 0 указывает, что ограничение выполнено.

  • ExitFlag - Код, который приводит более подробную информацию о выполнении решателя и о том, что заставило его вернуться. Флаги выхода каждого типа решателя см. в разделе Флаги выхода.

  • Status - Вектор символов, описывающий, находится ли решение в пределах допусков, заданных каждым ограничением ('success'). Если решение находится вне допуска, задается лучшее возможное решение, которое мог бы найти решатель ('best available').

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

Чтобы использовать функцию объекта, задайте системный объект в качестве первого входного параметра. Например, чтобы освободить системные ресурсы системного объекта с именем obj, используйте следующий синтаксис:

release(obj)

расширить все

stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

Создайте обобщенный решатель обратной кинематики, который держит роботизированную руку в определенном месте и указывает на основу робота. Создайте объекты ограничения, чтобы передать необходимые параметры ограничений в решатель.

Загрузите предопределенную модель робота KUKA LBR, которая задается как rigidBodyTree объект.

load exampleRobots.mat lbr

Создайте Системную object™ для решения обобщенной обратной кинематики.

gik = generalizedInverseKinematics;

Сконфигурируйте системный объект, чтобы использовать робота KUKA LBR.

gik.RigidBodyTree = lbr;

Скажите решателю, чтобы он ожидал PositionTarget объект и constraintAiming и constraintPositionTarget объект как входные входы ограничения.

gik.ConstraintInputs = {'position','aiming'};

Создайте два объекта ограничения.

  1. Источник тела с именем tool0 расположен по адресу [0.0 0.5 0.5] относительно базовой системы координат робота.

  2. Ось Z тела с именем tool0 указывает в сторону источника базовой системы координат робота.

posTgt = constraintPositionTarget('tool0');
posTgt.TargetPosition = [0.0 0.5 0.5];

aimCon = constraintAiming('tool0');
aimCon.TargetPoint = [0.0 0.0 0.0];

Найдите строение, которая удовлетворяет ограничениям. Необходимо передать объекты ограничений в системный объект в том порядке, в котором они были заданы в ConstraintInputs свойство. Задайте начальное предположение в строении робота.

q0 = homeConfiguration(lbr); % Initial guess for solver
[q,solutionInfo] = gik(q0,posTgt,aimCon);

Визуализируйте строение, возвращенную решателем.

show(lbr,q);
title(['Solver status: ' solutionInfo.Status])
axis([-0.75 0.75 -0.75 0.75 -0.5 1])

Figure contains an axes. The axes with title Solver status: success contains 19 objects of type patch, line. These objects represent base_link, link_1, link_2, link_3, link_4, link_5, link_6, link_7, tool0, base.

Постройте график сегмента линии от целевого положения до начала основ. Источник tool0 система координат совпадает с одним концом сегмента, и его z-ось выровнена по сегменту.

hold on
plot3([0.0 0.0],[0.5 0.0],[0.5 0.0],'--o')
hold off

Figure contains an axes. The axes with title Solver status: success contains 20 objects of type patch, line. These objects represent base_link, link_1, link_2, link_3, link_4, link_5, link_6, link_7, tool0, base.

Вопросы совместимости

расширить все

Изменение поведения в будущем релизе

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

.
Введенный в R2017a