Main Content

generalizedInverseKinematics

Crear un solver de cinemática inversa multirestricciones

Descripción

El objeto generalizedInverseKinematics System object™ utiliza un conjunto de restricciones cinemáticas para calcular una configuración de articulación para el modelo de árbol de cuerpo rígido especificado por un objeto rigidBodyTree. El objeto generalizedInverseKinematics utiliza un solver no lineal para cumplir las restricciones o alcanzar la mejor aproximación.

Especifique los tipos de restricción, ConstraintInputs, antes de llamar al objeto. Para cambiar las entradas de las restricciones después de llamar al objeto, llame a release(gik).

Especifique las entradas de las restricciones como objetos de restricción y llame a generalizedInverseKinematics con dichos objetos pasados a él. Para crear objetos de restricción, utilice los siguientes objetos:

Si la única restricción es la posición y la orientación del efector final, considere utilizar inverseKinematics como solver en su lugar.

Para obtener soluciones de cinemática inversa analíticas de forma cerrada, consulte analyticalInverseKinematics.

Para resolver las restricciones de cinemática inversa generalizada:

  1. Cree el objeto generalizedInverseKinematics y configure sus propiedades.

  2. Llame al objeto con argumentos, como si fuera una función.

Para más información sobre el funcionamiento de los System objects, consulte ¿Qué son los System Objects?

Creación

Descripción

ejemplo

gik = generalizedInverseKinematics devuelve un solver de cinemática inversa generalizada sin especificar el modelo de árbol de cuerpo rígido. Especifique un modelo de rigidBodyTree y la propiedad ConstraintInputs antes de utilizar este solver.

gik = generalizedInverseKinematics('RigidBodyTree',rigidbodytree,'ConstraintInputs',inputTypes) devuelve un solver de cinemática inversa generalizada con el modelo de árbol de cuerpo rígido y las entradas de restricción previstas especificadas.

gik = generalizedInverseKinematics(Name,Value) devuelve un solver de cinemática inversa generalizada con cada nombre de propiedad especificado establecido en el valor indicado por uno o más argumentos de par Name,Value. Name debe aparecer entre comillas simples (''). Puede especificar varios argumentos de par nombre-valor en cualquier orden como Name1,Value1,...,NameN,ValueN.

Propiedades

expandir todo

A menos que se indique lo contrario, las propiedades son no ajustables, lo que significa que no puede modificar sus valores después de llamar al objeto. Los objetos se bloquean cuando llama a ellos, y la función release los desbloquea.

Si una propiedad es ajustable, puede modificar su valor en cualquier momento.

Para obtener más información sobre cómo modificar los valores de las propiedades, consulte Diseñar sistemas en MATLAB utilizando System objects.

Esta propiedad es de solo lectura.

Número de entradas de restricción, especificado como un escalar. El valor de esta propiedad es el número de tipos de restricción especificados en la propiedad ConstraintInputs.

Tipos de entradas de restricción, especificados como un arreglo de celdas de vectores de caracteres. Los posibles tipos de entradas de restricción con sus objetos de restricción asociados son:

También existen restricciones de articulación de bucle cerrado que restringen dos cuerpos rígidos de manera que el movimiento restringido es similar al de una articulación adicional entre los dos cuerpos. Sus tipos de entradas de restricción con los objetos de restricción asociados son:

Utilice los objetos de restricción para especificar los parámetros necesarios y pase esos tipos de objetos al objeto cuando lo llame. Por ejemplo:

Cree el objeto solver de cinemática inversa generalizada. Especifique las propiedades RigidBodyTree y ConstraintInputs.

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

Cree los objetos de restricción correspondientes.

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

Pase los objetos de restricción al objeto solver con una conjetura inicial.

configSol = gik(initialGuess,positionTgt,aimConst);

Modelo de árbol de cuerpo rígido, especificado como un objeto rigidBodyTree. Defina esta propiedad antes de utilizar el solver. Si modifica el modelo de árbol de cuerpo rígido, reasigne el árbol de cuerpo rígido a esta propiedad. Por ejemplo:

Cree un solver de IK y especifique el árbol de cuerpo rígido.

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

Modifique el modelo de árbol de cuerpo rígido.

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

Reasigne el árbol de cuerpo rígido al solver de IK. Si llama al solver o a la función step antes de modificar el modelo de árbol de cuerpo rígido, deberá usar release para modificar la propiedad.

gik.RigidBodyTree = rigidbodytree;

Algoritmo para resolver una cinemática inversa, especificado como 'BFGSGradientProjection' o 'LevenbergMarquardt'. Para ver los detalles de los diferentes algoritmos, consulte Algoritmos de cinemática inversa.

Parámetros asociados al algoritmo especificado, especificados como una estructura. Los campos de la estructura son específicos del algoritmo. Consulte Parámetros del solver.

Uso

Descripción

[configSol,solInfo] = gik(initialguess,constraintObj,...,constraintObjN) encuentra una configuración de articulación, configSol, basada en la conjetura inicial y una lista separada por comas de objetos de descripción de restricciones. El número de descripciones de restricciones depende de la propiedad ConstraintInputs.

Argumentos de entrada

expandir todo

Conjetura inicial de la configuración del robot, especificada como arreglo de estructuras o vector. El valor de initialguess depende de la propiedad DataFormat del objeto especificado en la propiedad RigidBodyTree indicada en gik.

Utilice esta conjetura inicial para ayudar al solver a encontrar la configuración de robot de destino. Sin embargo, no existe ninguna garantía de que la solución se aproxime a la conjetura inicial.

Descripciones de restricciones definidas por la propiedad ConstraintInputs de gik, especificadas como uno o más de los siguientes objetos de restricción:

Argumentos de salida

expandir todo

Solución de configuración de robot, devuelta como un arreglo de estructuras o vector; depende de la propiedad DataFormat del objeto especificado en la propiedad RigidBodyTree indicada en gik.

El arreglo de estructuras contiene los siguientes campos:

  • JointName: el vector de caracteres para el nombre de articulación especificado en el modelo de robot RigidBodyTree

  • JointPosition: posición de la articulación correspondiente

La salida del vector es un arreglo de las posiciones de articulación que se darían en JointPosition para una salida de estructura.

La configuración de articulación es la solución calculada que alcanza la pose del efector final de destino dentro de la tolerancia de la solución.

Nota

En el caso de las articulaciones giratorias, si los límites de la articulación superan un rango de 2*pi, en el cual se produce el reajuste de la posición de la articulación, entonces la posición de articulación devuelta es la más próxima al límite inferior de la articulación.

La información de la solución, devuelta como una estructura, contiene estos campos:

  • Iterations: número de iteraciones ejecutadas por el solver.

  • NumRandomRestarts: número de reinicios aleatorios debidos a que el solver se ha atascado en un mínimo local.

  • ConstraintViolation: información sobre la restricción, devuelta como un arreglo de estructuras. Cada estructura del arreglo tiene estos campos:

    • Type: tipo de la entrada de restricción correspondiente, como se especifica en la propiedad ConstraintInputs.

    • Violation: vector de infracciones de las restricciones para el tipo de restricción correspondiente. 0 indica que la restricción se cumple.

  • ExitFlag: código que proporciona más detalles sobre la ejecución del solver y la causa de que se haya devuelto. Para ver los indicadores de salida de los diferentes tipos de solver, consulte Banderas de salida.

  • Status: vector de caracteres que describe si la solución se encuentra dentro de las tolerancias definidas por cada restricción ('success'). Si la solución está fuera de la tolerancia, se da la mejor solución posible que haya podido encontrar el solver ('best available').

Funciones del objeto

Para usar una función de objeto, especifique el System object como el primer argumento de entrada. Por ejemplo, para liberar recursos de sistema de un System object llamado obj, utilice la siguiente sintaxis:

release(obj)

expandir todo

stepEjecutar el algoritmo System object
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Ejemplos

contraer todo

Cree un solver de cinemática inversa generalizada que sostenga un brazo robótico en una ubicación específica y apunte hacia la base del robot. Cree los objetos de restricción para pasar los parámetros de restricción necesarios al solver.

Cargue un modelo de robot predefinido KUKA LBR, que se especifica como un objeto rigidBodyTree.

load exampleRobots.mat lbr

Cree el objeto System object™ para resolver la cinemática inversa generalizada.

gik = generalizedInverseKinematics;

Configure el objeto System object para utilizar el robot KUKA LBR.

gik.RigidBodyTree = lbr;

Indique al solver que espere un objeto PositionTarget y un objeto constraintAiming y constraintPositionTarget como entradas de restricción.

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

Cree los dos objetos de restricción.

  1. El origen del cuerpo denominado tool0 está situado en [0.0 0.5 0.5] respecto al marco base del robot.

  2. El eje z del cuerpo denominado tool0 apunta hacia el origen del marco base del robot.

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

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

Encuentre una configuración que cumpla las restricciones. Debe pasar los objetos de restricción al objeto System object en el orden en que se especificaron en la propiedad ConstraintInputs. Especifique una conjetura inicial sobre la configuración del robot.

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

Visualice la configuración devuelta por el solver.

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

{"String":"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.","Tex":"Solver status: success","LaTex":[]}

Represente un segmento de rectas desde la posición de destino hasta el origen de la base. El origen del marco tool0 coincide con un extremo del segmento y su eje z está alineado con el segmento.

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

{"String":"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.","Tex":"Solver status: success","LaTex":[]}

Capacidades ampliadas

Historial de versiones

Introducido en R2017a

expandir todo