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.

Algoritmos de cinemática inversa

Las clases inverseKinematics y generalizedInverseKinematics le dan acceso a los algoritmos de cinemática inversa (IK). Puede utilizar estos algoritmos para generar una configuración de robot que logre los objetivos y las restricciones especificados para el robot. Esta configuración del robot es una lista de posiciones de articulación que se encuentran dentro de los límites de posición del modelo de robot y no infringen ninguna restricción que tenga el robot.

Elegir un algoritmo

MATLAB® admite dos algoritmos para conseguir una solución de IK: el algoritmo de proyección BFGS y el algoritmo de Levenberg-Marquardt. Ambos algoritmos son métodos de optimización iterativos, basados en gradientes, que parten de una estimación inicial sobre la solución y tratan de minimizar una función de coste específica. Si cualquiera de los dos algoritmos converge en una configuración en la que el coste es cercano a cero dentro de una tolerancia especificada, ha encontrado una solución al problema de cinemática inversa. Sin embargo, para algunas combinaciones de estimaciones iniciales y poses deseadas del efector final, el algoritmo puede salir sin encontrar una configuración ideal del robot. Para hacer frente a esto, el algoritmo utiliza un mecanismo de reinicio aleatorio. Si está activado, el mecanismo de reinicio aleatorio reinicia la búsqueda iterativa a partir de una configuración aleatoria del robot siempre que esa búsqueda no encuentre una configuración que logre la pose deseada del efector final. Estos reinicios aleatorios continúan hasta que se encuentre una solución de IK que cumpla los requisitos, hasta que haya transcurrido el tiempo máximo o hasta que se alcance el límite de iteración.

Para establecer el algoritmo, especifique la propiedad SolverAlgorithm como 'BFGSGradientProjection' o 'LevenbergMarquardt'.

Proyección de gradiente BFGS

El algoritmo de proyección de gradiente Broyden-Fletcher-Goldfarb-Shanno (BFGS) es un método cuasi-Newton que utiliza los gradientes de la función de coste de las iteraciones anteriores para generar información aproximada de segunda derivada. El algoritmo utiliza esta información de segunda derivada para determinar el paso que debe darse en la iteración actual. Se utiliza un método de proyección de gradiente para tratar los límites de la función de coste que crean los límites de articulación del modelo del robot. La dirección calculada se modifica para que la dirección de búsqueda sea siempre válida.

Este método es el algoritmo predeterminado y es más sólido a la hora de encontrar soluciones que el método de Levenberg-Marquardt. Es más eficaz para las configuraciones cercanas a los límites de articulación o cuando la estimación inicial no se acerca a la solución. Si la estimación inicial está cerca de la solución y se necesita una solución más rápida, considere el método de Levenberg-Marquardt.

Levenberg-Marquardt

La variante del algoritmo de Levenberg-Marquardt (LM) que se utiliza en la clase InverseKinematics es un método de mínimos cuadrados con amortiguación de errores. El factor de amortiguación de errores ayuda a evitar que el algoritmo escape de un mínimo local. El algoritmo de LM está optimizado para converger mucho más rápido si la estimación inicial está cerca de la solución. Sin embargo, el algoritmo no gestiona bien las estimaciones iniciales arbitrarias. Considere el uso de este algoritmo para encontrar soluciones de IK para una serie de poses a lo largo de una trayectoria deseada del efector final. Una vez que se ha encontrado una configuración del robot para una pose, esa configuración suele ser una buena estimación inicial de una solución de IK para la siguiente pose en la trayectoria. En esta situación, el algoritmo de LM puede dar resultados más rápidos. De lo contrario, utilice el Proyección de gradiente BFGS en su lugar.

Parámetros del solver

Cada algoritmo tiene parámetros específicos que se pueden regular para mejorar las soluciones. Esos parámetros se especifican en la propiedad SolverParameters del objeto.

Proyección de gradiente BFGS

Los parámetros del solver para el algoritmo BFGS tienen los siguientes campos:

  • MaxIterations: número máximo de iteraciones permitidas. El valor predeterminado es 1500.

  • MaxTime: número máximo de segundos durante los cuales se ejecuta el algoritmo antes de que se agote el tiempo. El valor predeterminado es 10.

  • GradientTolerance: umbral del gradiente de la función de coste. El algoritmo se detiene si la magnitud del gradiente cae por debajo de ese umbral. Debe ser un escalar positivo.

  • SolutionTolerance: umbral de la magnitud del error entre la pose del efector final generada a partir de la solución y la pose deseada. En este cálculo se incluyen las ponderaciones especificadas para cada componente de la pose en el objeto. Debe ser un escalar positivo.

  • EnforceJointLimits: indicador de si se consideran los límites de articulación en el cálculo de la solución. JointLimits es una propiedad del modelo de robot en rigidBodyTree. De forma predeterminada, se aplican los límites de articulación.

  • AllowRandomRestarts: indicador de si se permiten los reinicios aleatorios. Los reinicios aleatorios se activan cuando el algoritmo se acerca a una solución que no cumple las restricciones. Se utiliza una estimación inicial generada aleatoriamente. MaxIteration y MaxTime se siguen cumpliendo. De forma predeterminada, los reinicios aleatorios están activados.

  • StepTolerance: tamaño de paso mínimo permitido por el solver. Los tamaños de paso más pequeños suelen significar que la solución está cerca de la convergencia. El valor predeterminado es 10–14.

Levenberg-Marquardt

Los parámetros del solver para el algoritmo de LM tienen los siguientes campos extra, además de los que requiere el método Proyección de gradiente BFGS:

  • ErrorChangeTolerance: umbral del cambio de error de pose del efector final entre iteraciones. El algoritmo devuelve si los cambios en todos los elementos del error de pose son menores que este umbral. Debe ser un escalar positivo.

  • DampingBias: término constante de amortiguación. El algoritmo de LM tiene una característica de amortiguación controlada por esta constante que opera con la función de coste para controlar la tasa de convergencia. Para desactivar la amortiguación, utilice el parámetro UseErrorDamping.

  • UseErrorDamping: 1 (valor predeterminado), indicador de si se utiliza la amortiguación. Establezca este parámetro en false para desactivar la amortiguación.

Información de la solución

Al utilizar los algoritmos de cinemática inversa, cada llamada al objeto devuelve información de la solución sobre el rendimiento del algoritmo. La información de la solución se proporciona como una estructura con 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').

Indicadores de salida

En la información de la solución, los indicadores de salida aportan más detalles sobre la ejecución del algoritmo específico. Observe la propiedad Status del objeto para saber si el algoritmo ha resultado satisfactorio. Cada código de indicador de salida tiene una descripción definida.

Indicadores de salida del algoritmo de 'BFGSGradientProjection':

  • 1: se ha encontrado un mínimo local.

  • 2: número máximo de iteraciones alcanzadas.

  • 3: el algoritmo se ha agotado durante la operación.

  • 4: tamaño de paso mínimo. El tamaño del paso está por debajo del campo StepToleranceSize de la propiedad SolverParameters.

  • 5: no existe un indicador de salida. Solo es relevante para el algoritmo 'LevenbergMarquardt'.

  • 6: dirección de búsqueda no válida.

  • 7: la hessiana no es semidefinida positiva.

Indicadores de salida del algoritmo de 'LevenbergMarquardt':

  • 1: se ha encontrado un mínimo local.

  • 2: número máximo de iteraciones alcanzadas.

  • 3: el algoritmo se ha agotado durante la operación.

  • 4: tamaño de paso mínimo. El tamaño del paso está por debajo del campo StepToleranceSize de la propiedad SolverParameters.

  • 5: el cambio de error de pose del efector final está por debajo del campo ErrorChangeTolerance de la propiedad SolverParameters.

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.

Consulte también

| |

Temas relacionados