Main Content

inverseKinematics

Crear solver cinemático inverso

Descripción

el inverseKinematics crea un solucionador cinemático inverso (IK) para calcular configuraciones de juntas para una pose de efecto final deseada basada en un modelo de árbol de cuerpo rígido especificado.System object™ Cree un modelo de árbol de cuerpo rígido para su robot utilizando la clase.rigidBodyTree Este modelo define todas las restricciones de unión que aplica el solucionador. Si es posible una solución, se obedecen los límites de unión especificados en el modelo de robot.

Para especificar más restricciones además de la pose del efector final, incluidas las restricciones de apuntamiento, los límites de posición o los objetivos de orientación, considere la posibilidad de utilizar .generalizedInverseKinematics Esta clase le permite calcular soluciones DE IK multirestricciones.

Para calcular configuraciones de unión para una pose de efecto final deseada:

  1. Cree el inverseKinematics objeto y establecer sus propiedades.

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

Para obtener más información sobre cómo funcionan los objetos del sistema, consulte .¿Qué son los objetos del sistema?

Creación

Descripción

ejemplo

ik = inverseKinematics crea un solucionador cinemático inverso. Para utilizar el solucionador, especifique un modelo de árbol de sólido rígido en la propiedad.RigidBodyTree

ik = inverseKinematics(Name,Value) crea un solucionador cinemático inverso con opciones adicionales especificadas por uno o más argumentos de par. es un nombre de propiedad y es el valor correspondiente. debe aparecer dentro de comillas simples ( ).Name,ValueNameValueName'' 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 , lo que significa que no puede cambiar sus valores después de llamar al objeto.intunable Los objetos se bloquean cuando se llaman a ellos y la función los desbloquea.release

Si una propiedad es , puede cambiar su valor en cualquier momento.Armonioso

Para obtener más información sobre cómo cambiar los valores de propiedad, consulte .Diseño del sistema en MATLAB mediante objetos de sistema

Modelo de árbol de sólido rígido, especificado como un objeto.rigidBodyTree Si modifica el modelo de árbol de sólido rígido, vuelva a asignar el árbol de sólido rígido a esta propiedad. Por ejemplo:

Cree el solucionador de IK y especifique el árbol de sólidorígido.

ik = inverseKinematics('RigidBodyTree',rigidbodytree)

Modifique el modelo de árbol de sólido rígido.

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

Reasignar el árbol de sólido rígido al solucionador de IK. Si se llama al solucionador o a la función antes de modificar el modelo de árbol de sólido rígido, utilice para permitir que se cambie la propiedad.steprelease

ik.RigidBodyTree = rigidbodytree;

Algoritmo para resolver cinemática inversa, especificado como cualquiera o .'BFGSGradientProjection''LevenbergMarquardt' Para obtener más información sobre cada algoritmo, consulte .Algoritmos cinemáticos inversos

Parámetros asociados con el algoritmo especificado, especificados como una estructura. Los campos de la estructura son específicos del algoritmo. Ver.Parámetros del solucionador

Uso

Descripción

ejemplo

[configSol,solInfo] = ik(endeffector,pose,weights,initialguess) encuentra una configuración de unión que logra la pose de efecto final especificada. Especifique una conjetura inicial para la configuración y las ponderaciones deseadas en las tolerancias para los seis componentes de .pose La información de la solución relacionada con la ejecución del algoritmo, , se devuelve con la solución de configuración conjunta, .solInfoconfigSol

Argumentos de entrada

expandir todo

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

Pose de efecto 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 sólido rígido especificado en la propiedad.endeffector

Peso de las tolerancias de pose, especificado como un vector de seis elementos. Los tres primeros elementos corresponden a los pesos del error de orientación para la pose deseada. Los tres últimos elementos corresponden a los pesos en el error en la posición para la pose deseada.xyz

Conjetura inicial de la configuración del robot, especificada como una matriz de estructura o vector. Utilice esta conjetura inicial para ayudar a guiar al solucionador a una configuración de robot deseada. No se garantiza que la solución esté cerca de esta conjetura inicial.

Para utilizar el formulario vectorial, establezca la propiedad del objeto asignado en la propiedad en o .DataFormatRigidBodyTree'row''column'

Argumentos de salida

expandir todo

Configuración del robot, devuelta como una matriz de estructura. La matriz structure contiene estos campos:

  • — Vector de caracteres para el nombre de la articulación especificada en el modelo de robotJointNameRigidBodyTree

  • — Posición de la junta correspondienteJointPosition

Esta configuración de unión es la solución calculada que logra la pose de efecto final deseada dentro de la tolerancia de la solución.

Para utilizar el formulario vectorial, establezca la propiedad del objeto asignado en la propiedad en o .DataFormatRigidBodyTree'row''column'

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

  • — Número de iteraciones ejecutados por el algoritmo.Iterations

  • — Número de reinicios aleatorios porque el algoritmo se atascó en un mínimo local.NumRandomRestarts

  • — La magnitud del error de pose para la solución en comparación con la postura de efecto final deseada.PoseErrorNorm

  • — Código que proporciona más detalles sobre la ejecución del algoritmo y qué hizo que se devolviera.ExitFlag Para los indicadores de salida de cada tipo de algoritmo, consulte .Banderas de salida

  • — Vector de caracteres que describe si la solución está dentro de la tolerancia ( ) o la mejor solución posible que el algoritmo podría encontrar ( ).Status'success''best available'

Funciones del objeto

Para utilizar una función de objeto, especifique el como el primer argumento de entrada.System object Por ejemplo, para liberar recursos del sistema de un nombre , utilice esta sintaxis:System objectobj

release(obj)

expandir todo

stepRun System object algorithm
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 unión para un modelo de robot para lograr una posición de efecto final deseada. El objeto del sistema utiliza algoritmos cinemáticos inversos para resolver posiciones conjuntas válidas.inverseKinematics

Cargar robots de ejemplo. El robot es un modelo de un brazo robótico de seis ejes con seis articulaciones revolutas.puma1rigidBodyTree

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 del efector final (L6) a la base para esa configuración aleatoria. Utilice esta transformación como una postura de objetivo del efector final. Muestre esta configuración.

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

Cree un objeto para el modelo.inverseKinematicspuma1 Especifique las ponderaciones para los diferentes componentes de la pose. Utilice un peso de magnitud inferior para los ángulos de orientación que los componentes de posición. Utilice la configuración doméstica del robot como una suposición inicial.

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

Calcule las posiciones de unión utilizando el objeto.ik

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

Mostrar la configuración de la solución recién generada. La solución es una configuración de junta ligeramente diferente que logra la misma posición del efector final. Varias llamadas al objeto pueden dar configuraciones de unión similares o muy diferentes.ik

show(puma1,configSoln);

Consideraciones de compatibilidad

expandir todo

Cambio de comportamiento en versión futura

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

Introducido en R2016b