generalizedInverseKinematics

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

Описание

generalizedInverseKinematics Система object™ использует набор кинематических ограничений, чтобы вычислить объединенную настройку для модели дерева твердого тела, заданной rigidBodyTree объект. 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 свойство.

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

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

Создайте обобщенный объект решателя инверсной кинематики. Задайте 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').

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

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

release(obj)

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

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

Примеры

свернуть все

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

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

load exampleRobots.mat lbr

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

gik = generalizedInverseKinematics;

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

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 object. The axes object 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 object. The axes object 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