Problema de singularidad en solucionador cinemático inverso

9

Estoy luchando con este problema por días. Realmente espero que alguien pueda darme una pista de cuál es el problema.

El robot consta de 5 ejes. El primer eje gira alrededor del eje z y otros 4 ejes giran alrededor del eje y. Y el solucionador básicamente funciona.

Esto es lo que he hecho hasta ahora:

  1. Calculo el factor de manipulabilidad con mi matriz jacobiana (solo parte traslacional, ya que solo se rastrea la posición aquí. En realidad, también probé con una matriz jacobiana combinada, así que no solo la parte traslacional sino también la parte rotacional. Pero el movimiento brusco estaba allí de todas formas):

  2. Entonces el factor de amortiguación es:

    ingrese la descripción de la imagen aquí

  3. El factor de amortiguamiento se integra luego en el cálculo pseudo inverso:

ingrese la descripción de la imagen aquí

Como puede ver, este es solo un solucionador cinemático pseudo inverso clásico con un método de mínimo cuadrado amortiguado. El factor de manipulabilidad según el segundo movimiento (problema) es: ingrese la descripción de la imagen aquí La manipulabilidad cae al comienzo del video. ¿Pero por qué? Hasta donde sé, este factor de manipulabilidad indica la dependencia lineal de los ejes. Para mí, los ejes no parecen ser linealmente dependientes en la parte inicial.

Este movimiento brusco me vuelve loco. Como puede ver en la primera animación, el solucionador parece funcionar correctamente. ¿Que me estoy perdiendo aqui?

Joe
fuente
1
¡Bienvenido a Robotics , Joe! Esta es una pregunta fantástica, pero desafortunadamente no creo que haya suficientes detalles para responderla. Cuando un sistema llega a una singularidad, esperaría que algún eje de movimiento haga un giro salvaje, como un eje que gira 180 grados porque otro está tratando de ir de 89 a 91 grados (si 90 grados fueran la singularidad). Realmente no estoy viendo ese comportamiento aquí. Me pregunto si esto es más un problema de implementación, como usar algo como en atanlugar de atan2, etc. ¿Podría editar su pregunta para publicar el código que está usando?
Chuck
1
@ Chuck, edité la pregunta para que se pueda ver el "swing salvaje". (mira la 2. animación actualizada)
Joe

Respuestas:

1

Como otros ya han señalado, debe haber un problema con su implementación del algoritmo IK ya que no habrá ningún comportamiento singular en las descripciones que proporcionó.

Ahora tiene dos alternativas: comenzar a depurar el código o puede aprovechar el hecho de que el problema se puede dividir fácilmente en dos subproblemas para los que puede emplear fácilmente la mayor parte del código escrito hasta ahora.

Dado el objetivo 3D deseado (xd,yd,zd), es sencillo observar que el valor deseado de la primera articulación es: θ1d=arctan(ydxd).

La ley de control para conducir la primera articulación del manipulador a θ1d puede ser tan simple como:

θ1˙=K1(θ1dθ1).

Entonces, deja RSO(3) ser la matriz que explica la rotación de θ1d alrededor de z eje:

R=(cosθ1dsinθ1d0sinθ1dcosθ1d0001).

Mediante R, obtendrás el nuevo objetivo (xd,0,zd)1=RT(xd,yd,zd)T eso establecerá un nuevo problema plano IK 2D en el xz avión.

En este punto, puedes resolver (xd,zd)1 usando el jacobiano del manipulador 4-DOF restante.

Ugo Pattacini
fuente
Creo que no hay necesidad de analizar el problema en subproblemas. Dado que la declaración del vector unitario ya indica lo que acaba de describir.
Joe
El desglose es una mera sugerencia para permitirle reutilizar el 4 DOF Jacobian, que es la parte de su código que funciona sin problemas, como informó al comienzo de su publicación.
Ugo Pattacini
0

Creo que ha introducido una singularidad algorítmica en el primer eje de la muñeca. Me parece que, cuando alcanza los 90 grados "hacia abajo", que en lugar de llegar a 91, intenta pasar de cero a -269 grados.

Por supuesto, esto es especulativo sin ver el código.

SteveO
fuente