Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

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, configure 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 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.

Para utilizar la forma de vector, configure 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

Genere posiciones de articulación para que un modelo de robot alcance la posición del efector final deseada. El System object inverseKinematics utiliza algoritmos de cinemática inversa para resolver posiciones de articulación válidas.

Cargue robots de ejemplo. El robot puma1 es el modelo rigidBodyTree de un brazo robótico de seis ejes con seis articulaciones giratorias.

load exampleRobots.mat
showdetails(puma1)
--------------------
Robot: (6 bodies)

 Idx    Body Name   Joint Name   Joint Type    Parent Name(Idx)   Children Name(s)
 ---    ---------   ----------   ----------    ----------------   ----------------
   1           L1         jnt1     revolute             base(0)   L2(2)  
   2           L2         jnt2     revolute               L1(1)   L3(3)  
   3           L3         jnt3     revolute               L2(2)   L4(4)  
   4           L4         jnt4     revolute               L3(3)   L5(5)  
   5           L5         jnt5     revolute               L4(4)   L6(6)  
   6           L6         jnt6     revolute               L5(5)   
--------------------

Genere una configuración aleatoria. Obtenga la transformación desde el efector final (L6) hasta la base para esa configuración aleatoria. Use esta transformación como la pose objetivo del efector final. Muestre la siguiente configuración.

randConfig = puma1.randomConfiguration;
tform = getTransform(puma1,randConfig,'L6','base');

show(puma1,randConfig);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 13 objects of type patch, line. These objects represent base, L1, L2, L3, L4, L5, L6.

Cree un objeto inverseKinematics para el modelo puma1. Especifique las ponderaciones para los diferentes componentes de la pose. Utilice una ponderación de magnitudes para los ángulos de orientación inferior a la de los componentes de la posición. Utilice la configuración inicial del robot como estimación inicial.

ik = inverseKinematics('RigidBodyTree',puma1);
weights = [0.25 0.25 0.25 1 1 1];
initialguess = puma1.homeConfiguration;

Calcule las posiciones de articulación con el objeto ik.

[configSoln,solnInfo] = ik('L6',tform,weights,initialguess);

Muestre la configuración de la solución que acaba de generar. La solución es una configuración de articulación ligeramente diferente que alcanza la misma posición del efector final. Múltiples llamadas al objeto ik pueden proporcionar configuraciones de articulaciones similares o muy diferentes.

show(puma1,configSoln);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 13 objects of type patch, line. These objects represent base, L1, L2, L3, L4, L5, L6.

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