exponenta event banner

generalizedInverseKinematics

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

Описание

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

Укажите типы ограничений, ConstraintInputs, перед вызовом объекта. Чтобы изменить входные данные ограничения после вызова объекта, вызовите release(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 для вывода структуры.

Эта конфигурация соединения является вычисленным решением, которое достигает целевой конечной эффекторной позы в пределах допуска решения.

Примечание

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

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

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

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

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

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

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

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

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

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

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

release(obj)

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

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

Примеры

свернуть все

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

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

load exampleRobots.mat lbr

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

gik = generalizedInverseKinematics;

Сконфигурируйте объект System для использования робота 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];

Найдите конфигурацию, удовлетворяющую ограничениям. Необходимо передать объекты ограничения в объект System в том порядке, в котором они были указаны в 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