робототехника. GeneralizedInverseKinematics

Создайте мультиограничительный решатель инверсной кинематики

Описание

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

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

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

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

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

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

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Синтаксис

gik = robotics.GeneralizedInverseKinematics
gik = robotics.GeneralizedInverseKinematics('RigidBodyTree',rigidbodytree,'ConstraintInputs',inputTypes)
gik = robotics.GeneralizedInverseKinematics(Name,Value)

Описание

пример

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

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

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

positionTgt = robotics.PositionTarget('left_palm');
aimConst = robotics.AimingConstraint('right_palm');

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

configSol = gik(initialGuess,positionTgt,aimConst);

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

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

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

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

addBody(rigidbodytree,robotics.RigidBody('body1'), 'base')

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

gik.RigidBodyTree = rigidbodytree;

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

Параметры сопоставлены с заданным алгоритмом, заданным как структура. Поля в структуре характерны для алгоритма. Смотрите Параметры Решателя.

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

Синтаксис

[configSol,solInfo] = gik(initialguess,constraintObj,...,constraintObjN)

Описание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Iterations — Количество итераций запущено решателем.

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

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

    • Ввод: Тип соответствующего ограничительного входа, как задано в свойстве ConstraintInputs.

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

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

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

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

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

release(obj)

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

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

Примеры

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

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

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

load exampleRobots.mat lbr

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

gik = robotics.GeneralizedInverseKinematics;

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

gik.RigidBodyTree = lbr;

Скажите решателю ожидать объект PositionTarget и объект AimingConstraint как ограничительные входные параметры.

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

Создайте два ограничительных объекта.

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

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

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

aimCon = robotics.AimingConstraint('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])

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

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

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

Введенный в R2017a