Main Content

inverseKinematics

Crear un solver de cinemática inversa

Descripción

El System object™ inverseKinematics crea un solver de cinemática inversa (IK) para calcular las configuraciones de articulaciones de la pose del efector final deseada a partir de un modelo de árbol de cuerpo rígido especificado. Cree un modelo de árbol de cuerpo rígido para el robot mediante la clase rigidBodyTree. Este modelo define todas las restricciones de articulación que aplica el solver. Si hay una solución posible, se obedecen los límites de articulación especificados en el modelo de robot.

Para especificar otras restricciones diferentes de la pose del efector final, incluidas restricciones de apuntamiento, límites de posición u objetivos de orientación, considere usar generalizedInverseKinematics. Este objeto permite calcular soluciones de IK multirestricciones.

Para obtener soluciones de IK analíticas de forma cerrada, consulte analyticalInverseKinematics.

Para calcular configuraciones de articulaciones para la pose del efector final deseada:

  1. Cree el objeto inverseKinematics 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

ik = inverseKinematics crea un solver de cinemática inversa. Para usar el solver, especifique un modelo de árbol de cuerpo rígido en la propiedad RigidBodyTree.

ik = inverseKinematics(Name,Value) crea un solver de cinemática inversa con opciones adicionales especificadas por uno o más argumentos de par Name,Value. Name es un nombre de propiedad y Value es el valor correspondiente. Name se debe encerrar 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.

Modelo de árbol de cuerpo rígido, especificado como un objeto rigidBodyTree. 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.

ik = inverseKinematics('RigidBodyTree',rigidbodytree)

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.

ik.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

ejemplo

[configSol,solInfo] = ik(endeffector,pose,weights,initialguess) busca una configuración de articulación que alcanza la pose del efector final especificada. Especifique una estimación inicial para la configuración y las ponderaciones deseadas en las tolerancias de los seis componentes de pose. La información de la solución relativa a la ejecución del algoritmo, solInfo, se devuelve con la solución de la configuración de articulación, configSol.

Argumentos de entrada

expandir todo

Nombre del efector final, especificado como vector de caracteres. El efector final debe ser un cuerpo en el objeto rigidBodyTree especificado en el System object inverseKinematics.

Pose del efector final, especificada como una transformación homogénea de 4 por 4. Esta transformación define la posición y la orientación deseadas del cuerpo rígido especificado en la propiedad endeffector.

Ponderación para las tolerancias de la pose, especificada como un vector de seis elementos. Los primeros tres elementos corresponden a las ponderaciones de error en la orientación para la pose deseada. Los primeros tres elementos corresponden a las ponderaciones de error en la posición xyz para la pose deseada.

Estimación inicial de la configuración del robot, especificada como arreglo de estructuras o vector. Utilice esta estimación inicial para ayudar al solver a encontrar la configuración de robot deseada. No existe ninguna garantía de que la solución se aproxime a esta estimación inicial.

Para utilizar la forma de vector, establezca la propiedad DataFormat del objeto asignado en la propiedad RigidBodyTree en 'row' o 'column'.

Argumentos de salida

expandir todo

La configuración del robot, devuelta como un arreglo de estructuras. 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 configuración de articulación es la solución calculada que alcanza la pose del efector final deseada dentro de la tolerancia de la solución.

Nota

En el caso de las articulaciones rotativas, 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.

Para utilizar la forma de vector, establezca la propiedad DataFormat del objeto asignado en la propiedad RigidBodyTree en 'row' o 'column'.

La información de la solución, devuelta como una estructura. La estructura con la información de la solución contiene los siguientes campos:

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

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

  • PoseErrorNorm: la magnitud de error de la pose de la solución comparada con la pose del efector final deseada.

  • ExitFlag: el código que proporciona más detalles sobre la ejecución del algoritmo y la causa de que sea devuelta. Para ver los indicadores de salida de los diferentes tipos de algoritmo, consulte Indicadores de salida.

  • Status: el vector de caracteres que describe si la solución se encuentra dentro de la tolerancia ('success') o la mejor solución posible que ha encontrado el algoritmo ('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

Cargue un manipulador PUMA 560 de Robotics System Toolbox™ loadrobot y muestre el modelo de robot en una figura.

puma = loadrobot("puma560");
show(puma,homeConfiguration(puma),PreservePlot=false);
axis([-1 1 -1 1 0 2])
title("PUMA 560 Home Configuration")

La posición deseada que debe alcanzar el efector final del robot es [-0.5 0.5 0.75]. La cinemática inversa utiliza una pose deseada para resolver las configuraciones de articulaciones, por lo que primero debe convertir la posición a una matriz de transformación homogénea SE(3) con la traslación deseada. Luego, represente la transformación de la pose.

pos = [-0.5 0.5 0.75];
poseTF = trvec2tform(pos);
hold on
plotTransforms(pos,eul2quat([0 0 0]),FrameSize=0.2);
title("PUMA 560 and End-Effector Target Position")

Cree un System object™ inverseKinematics para el modelo de robot puma. Especifique las ponderaciones para la rotación y la posición de la pose. Dado que el objetivo es que el efector final alcance esa posición sin ninguna restricción en la orientación, establezca las ponderaciones del ángulo de orientación en cero para que la solución de orientación no sea importante para el solver de IK. Utilice la configuración inicial del robot como estimación inicial.

ik = inverseKinematics("RigidBodyTree",puma);
weights = [0 0 0 1 1 1];
initialguess = homeConfiguration(puma);

Calcule las posiciones de articulación con el System object ik. Utilice el último enlace del modelo de robot, link7, como efector final.

[configSoln,solnInfo] = ik("link7",poseTF,weights,initialguess);

Muestre la configuración de la solución generada, que ahora alcanza la posición objetivo.

show(puma,configSoln,PreservePlot=false);
title("End-Effector Target Position Achieved")

Observe que para la mayoría de los problemas de IK, existen varias configuraciones que pueden alcanzar la pose objetivo deseada. Dado que el solver se basa en optimización, podría aproximarse a una solución que en realidad no alcanza la pose deseada. Si esto ocurre, el solver se reinicia automáticamente y utiliza una configuración aleatoria como estimación inicial. Esto significa que ejecutar la función más de una vez para la misma pose objetivo podría generar diferentes configuraciones que alcancen la pose objetivo. Para evitar la aleatoriedad, puede establecer el valor inicial del generador de números aleatorios o puede utilizar una estimación inicial que se acerque más a la solución, deshabilitando al mismo tiempo AllowRandomRestart.

ik.SolverParameters.AllowRandomRestart = false

Si debe encontrar todas las soluciones posibles, utilice el objeto analyticalInverseKinematics.

Referencias

[1] Badreddine, Hassan, Stefan Vandewalle, and Johan Meyers. "Sequential Quadratic Programming (SQP) for Optimal Control in Direct Numerical Simulation of Turbulent Flow." Journal of Computational Physics. 256 (2014): 1–16. doi:10.1016/j.jcp.2013.08.044.

[2] Bertsekas, Dimitri P. Nonlinear Programming. Belmont, MA: Athena Scientific, 1999.

[3] Goldfarb, Donald. "Extension of Davidon’s Variable Metric Method to Maximization Under Linear Inequality and Equality Constraints." SIAM Journal on Applied Mathematics. Vol. 17, No. 4 (1969): 739–64. doi:10.1137/0117067.

[4] Nocedal, Jorge, and Stephen Wright. Numerical Optimization. New York, NY: Springer, 2006.

[5] Sugihara, Tomomichi. "Solvability-Unconcerned Inverse Kinematics by the Levenberg–Marquardt Method." IEEE Transactions on Robotics Vol. 27, No. 5 (2011): 984–91. doi:10.1109/tro.2011.2148230.

[6] Zhao, Jianmin, and Norman I. Badler. "Inverse Kinematics Positioning Using Nonlinear Programming for Highly Articulated Figures." ACM Transactions on Graphics Vol. 13, No. 4 (1994): 313–36. doi:10.1145/195826.195827.

Capacidades ampliadas

Historial de versiones

Introducido en R2016b

expandir todo