Con un robot de 6 ejes, dada la posición del efector final y el rango de orientaciones, cómo encontrar valores de unión óptimos

10

Dado un brazo de robot articulado de seis ejes que sostiene una herramienta en su efector final, si tengo una posición de herramienta y orientación de herramienta deseadas, habrá exactamente 1 solución a la ecuación de cinemática inversa para que el robot alcance esa posición.
(o más bien hasta 16 soluciones diferentes, dependiendo del rango de las articulaciones)

http://en.wikipedia.org/wiki/Robotic_arm

Pero si el robot sostiene algo así como un bolígrafo, y quiero que el robot marque un punto específico con ese bolígrafo en el objetivo, entonces no me importa cómo está orientado el bolígrafo, siempre que sea perpendicular a la superficie marcada.

Entonces la ecuación de cinemática inversa tendrá infinitas soluciones.

¿Cómo puedo elegir entre estas soluciones la configuración conjunta más cercana a la configuración actual: la que requerirá la menor cantidad de movimiento para llegar?
(¿o la configuración de la junta que es óptima de acuerdo con algún otro criterio similar, como que todos los ángulos de la junta están más lejos de su máximo y mínimo?)

HugoRune
fuente

Respuestas:

9

Primero, necesitamos definir óptimo . Como no dice lo que considera óptimo, la mayoría de las personas elige una expresión cuadrática. Por ejemplo, suponga que sus ángulos comunes actuales están dados por el vector . Podemos considerar minimizar el movimiento requerido: con un error x = α - α s t a r t , puede definir una función de costo J = x T Q x para alguna matrizαX=α-αstunartJ=XTQX . Normalmente usamos una matriz diagonal, pero cualquier matriz positiva definida.Q

En un ejemplo simplificado con dos ángulos de unión, si la unión tuviera un motor más barato (quizás más cerca del efector final), podríamos tener una función de costo deuna

, es decir. El movimiento de la articulación b es dos veces más costoso que la articulación a .J=[XunaXsi][10 00 02][XunaXsi]siuna

Ahora, la ecuación cinemática es una fórmula matricial, y en notación Denavit-Hartenberg podría ser:

, donde el lado derecho representa la posición ( x , y , z ) y la orientación (actualmente establecida como rotación cero), dada la ángulos articularesTyo=[10 00 0X0 010 0y0 00 01z0 00 00 01](X,y,z)

Como no nos importa la orientación, y solo la posición, podemos truncar las primeras 3 columnas de la última matriz de transformación y la última fila de la primera matriz de transformación. Podemos expresar de manera equivalente esta fórmula como:

[10 00 00 00 010 00 00 00 010 0]Tyo[0 00 00 01]=[Xyz]

Multiplicando el lado izquierdo, obtenemos tres ecuaciones. Si los parámetros fueran lineales, sería fácil de resolver. Este es el caso si todos los actuadores son actuadores lineales. En este caso, el problema es en realidad un programa cuadrático . Podemos reorganizar el lado izquierdo para obtener la ecuación:

, para alguna matrizKX=[Xyz] .K

Un programa cuadrático es un problema que se puede expresar en la forma:

Minimizar J=12XTQX+CTX

Sujeto a , E x = dUNAXsimiX=re

Para resolver esto, hay una serie de algoritmos que puede usar, por ejemplo, punto interior, conjunto activo, .... Simplemente encuentre una biblioteca adecuada y la resolverá por usted.

Un sistema no lineal de ecuaciones es más difícil de resolver. Esto se llama programación no lineal , pero es lo que tiene si tiene uniones giratorias.

Esencialmente, en lugar de ecuaciones matriciales, tiene funciones no lineales.

Minimice sujeto a h ( x ) = 0 , g ( x ) 0 (reorganice si es necesario para que el RHS de las restricciones sea cero)F(X)h(X)=0 0sol(X)0 0

Los algoritmos utilizados para resolver esto son aún más complejos, pero incluyen algoritmos reflexivos de punto interior, programación cuadrática secuencial (SQP), conjunto activo y región de confianza. Obviamente, la explicación de cómo funcionan estos algoritmos es muy extensa, y la dejaré fuera del alcance de esta respuesta. Baste decir que la cantidad de contenido en los algoritmos utilizados para la programación cuadrática podría ser un curso completo en sí mismo.

Debería encontrar una biblioteca para resolver el problema, llevaría mucho tiempo codificar una implementación eficiente, y las implementaciones eficientes pueden manejar 100 (o más) variables a la vez. Por ejemplo, si usa MATLAB, entonces hay documentación sobre cómo usar la función fmincon de Optimization Toolbox.

Para resolverlo en línea, es posible que desee C ++ u otra implementación nativa, por ejemplo, NLopt. Tenga en cuenta que esto puede no ser algo que un microcontrolador pueda resolver rápidamente, y muchas bibliotecas pueden tener otras dependencias que no son fáciles de usar en un microcontrolador (ya que están destinadas a una computadora).


Si no le preocupa la eficiencia y solo quiere algo que pueda codificar usted mismo, entonces suponiendo que haya una función que pueda llamar para resolver el problema cinemático inverso , simplemente puede hacer un método de descenso de gradiente. Por ejemplo, eligiendo arbitrariamente una orientación inicial aleatoria, resuelva el problema inverso y luego verifique la función de costo. Luego puede usar el análisis de perturbaciones para verificar cómo debe variar la orientación. Por ejemplo, si verifica orientaciones similares alrededor de su orientación actual (es decir, 8 puntos en una cuadrícula cúbica), puede obtener una aproximación de segundo orden de cómo varía la función de costo en cada dirección.

Usando la aproximación de segundo orden (conocida como matriz de Hesse, ya que es multivariada - tridimensional para orientación), puede encontrar el cruce por cero del gradiente de la función de costo (es decir, los mínimos locales pronosticados).

Con la nueva orientación prevista, simplemente vuelva a pasarla por el solucionador inverso y repita hasta que la precisión sea suficiente.

Tenga en cuenta que esto probablemente no será tan eficiente, porque el problema cinemático inverso en sí mismo debe resolverse de forma iterativa (por lo que está utilizando repetidamente una función que a su vez lleva un tiempo resolver). Además, el código involucrado puede ser menor que un algoritmo de optimización completo, pero sigue siendo bastante sustancial y no es una inversión de tiempo insignificante.


Usando cualquiera de los métodos (resolviendo formalmente como un programa no lineal o usando iterativamente usando una función para resolver el problema inverso), la solución puede no ser óptima si hay múltiples mínimos locales. En este caso, puede intentar encontrar los mínimos globales utilizando varios enfoques. Incluso con un solucionador de programación no lineal, se espera que lo siembres con valores iniciales (por ejemplo, ángulos de unión). Puede ejecutar repetidamente cualquiera de los métodos con la semilla generada de varias maneras:

  • reinicio aleatorio (se genera aleatoriamente)
  • basado en cuadrícula

u otros métodos personalizados.

Sin embargo, tenga en cuenta que si hay muchos mínimos, no hay una buena manera de garantizar que encontrará los mínimos globales. Solo puedes mejorar tus posibilidades.

ronalchn
fuente
2

Dado que la pregunta es sobre un robot industrial, probablemente no tengamos un modelo de la dinámica del robot, por lo que supongo que estamos buscando soluciones que optimicen solo un criterio cinemático.

El robot tiene una solución de forma cerrada para su cinemática inversa, pero desafortunadamente el efector final tiene un grado de libertad de rotación adicional, lo que significa que el robot tiene esencialmente 7 grados de libertad. Pero debido a que este es solo un dof más , no es un problema tan grande como uno podría pensar.

0,051360118 años

Si la mayoría de las veces el lápiz solo se mueve un poco (por ejemplo, al dibujar una línea), otro truco para acelerar la búsqueda es utilizar IK numérico, por ejemplo, el método pseudoinverso:

q1JΔXΔX=JΔqΔqq2=q1+ΔqΔqΔq

q2

antonakos
fuente
1

rz

J-1X˙=Θ˙=[j1j2j3j4 4j5 5j6 6][X˙y˙z˙rX˙ry˙rz˙]=[θ1˙θ2˙θ3˙θ4 4˙θ5 5˙θ6 6˙]
jyoyothJ-1Θ˙rz˙
Θ˙=Θ˙X˙...ry˙+Θ˙rz˙Θ˙rz˙=j6 6rz˙
(Θ˙X˙...ry˙+Θ˙rz˙)Tre(Θ˙X˙...ry˙+Θ˙rz˙)
reUNA=Θ˙X˙...ry˙si=Θ˙rz˙

UNATreUNA+2siTreUNA+siTresioUNATreUNA+2rz˙j6 6TreUNA+rz˙2j6 6Trej6 6

Ahora tenemos una ecuación fácil para diferenciar en . Encontramos la derivada con respecto a ˙ r z y la establecemos en 0 . 2 j 6 T D A + 2rz˙rz˙0 0

2j6 6TreUNA+2rz˙j6 6Trej6 6=0 0rz˙=-j6 6TreUNAj6 6Trej6 6
joshkarges
fuente