Contenido principal

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.

El solver de IK utiliza un enfoque de optimización basado en gradiente descendente para encontrar una configuración de articulación que sea un mínimo local de la función objetivo de error cuadrado de pose ponderada:

argminqw'pose_err(Tdes,FK(q,ee_link))22,

donde:

  • w es el vector de ponderación de seis elementos. Puede especificarlo utilizando el argumento weights para priorizar la importancia relativa entre componentes de orientación y traslación.

  • pose_err(Tdes,FK(q,ee_link) es una función con valores vectoriales que representa el error de pose de seis elementos entre la pose deseada Tdes del efector final y la pose del efector final calculada mediante cinemática directa.

  • FK es una función de cinemática directa que calcula la pose en una configuración de articulación q para el eslabón efector final ee_link del 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

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.

ejemplo

ik = inverseKinematics(PropertyName=Value) especifica propiedades del solver de cinemática inversa mediante uno o más argumentos nombre-valor opcionales. Por ejemplo, SolverAlgorithm="fminconsqp" utiliza el solver SQP fmincon como solver de cinemática inversa.

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", "LevenbergMarquardt" o "fminconsqp". Para ver los detalles de los diferentes algoritmos, consulte Algoritmos de cinemática inversa.

El algoritmo "fminconsqp" requiere Optimization Toolbox™.

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] = 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.

ejemplo

Argumentos de entrada

expandir todo

Nombre del efector final, especificado como vector de caracteres. El efector final debe ser un marco 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 últimos tres elementos corresponden a las ponderaciones de error en la posición xyz para la pose deseada.

El solver minimiza la norma cuadrada ponderada del vector de error de pose. Establezca las ponderaciones en cero para ignorar los componentes de rotación o traslación específicos o aumente las ponderaciones para priorizar determinados componentes. La optimización se detiene cuando esta norma de error ponderada es menor que el valor del campo SolutionTolerance de la propiedad SolverParameters.

Ejemplo: El vector de ponderaciones [0,0,0,100,1,1] establece una prioridad elevada para la posición x del efector final deseado en el marco base del robot.

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

puma = loadrobot("puma560");

Establezca la posición deseada del efector final y conviértala en una matriz de transformación homogénea SE(3).

pos = [-0.5 0.5 0.75];
eePoseTF = trvec2tform(pos);

Cree el solver de IK y establezca las ponderaciones de manera que el solver priorice alcanzar la posición xyz deseada frente a la orientación deseada. Utilice la configuración de articulación inicial como estimación inicial para el solver.

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

Resuelva la IK para el efector final del modelo de robot, link7.

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

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

show(puma,configSoln);
hold on
plotTransforms(pos,eul2quat([0 0 0]),FrameSize=0.3);
axis auto padded
title("End-Effector Target Position Achieved")

Figure contains an axes object. The axes object with title End-Effector Target Position Achieved, xlabel X, ylabel Y contains 24 objects of type patch, line.

Observe que para la mayoría de los problemas de IK, existen múltiples 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 la semilla 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.

Cargue un robot y cree un solver de cinemática inversa para él. Establezca el algoritmo del solver en el algoritmo SQP fmincon.

robot = loadrobot("universalUR5",DataFormat="row");
ik = inverseKinematics(RigidBodyTree=robot,SolverAlgorithm="fminconsqp");

Establezca el último cuerpo del robot como efector final, establezca una pose objetivo, establezca las ponderaciones y establezca la configuración de estimación inicial.

ee = robot.BodyNames{end};
poseTarget = se3([0 pi/2 -pi/2],"eul","ZYX",[0 0.7 0.3]);
weights = [1 1 1 0.8 0.8 0.8];
initGuessConfig = [pi/2 0 0 0 0 0];

Muestre el robot en la configuración de la estimación inicial y represente la pose objetivo.

show(robot,initGuessConfig);
axis([-0.5 0.5 -0.1 0.9 -0.1 0.8])
hold on
plotTransforms(poseTarget,FrameSize=0.2);
title("Initial Guess Configuration and Pose Target")

Figure contains an axes object. The axes object with title Initial Guess Configuration and Pose Target, xlabel X, ylabel Y contains 32 objects of type patch, line.

Resuelva una configuración que alcance la pose objetivo utilizando las ponderaciones especificadas y la configuración de estimación inicial.

[config,solninfo] = ik(ee,tform(poseTarget),weights,initGuessConfig);
show(robot,config,PreservePlot=false);
title("End-Effector Target Pose Achieved")
hold off

Figure contains an axes object. The axes object with title End-Effector Target Pose Achieved, xlabel X, ylabel Y contains 32 objects of type patch, line.

solninfo.Status
ans = 
'success'

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

expandir todo

Historial de versiones

Introducido en R2016b

expandir todo