martes, 16 de agosto de 2016

Modelo cinemático inverso del robot RV-3SB para el toolbox ARTE de MATLAB


La cinemática inversa permite saber en donde colocar las articulaciones del robot solo conociendo la posición y orientación del elemento terminal, se puede resolver el problema cinemático inverso por medio de un método numérico o algebraico (Forma cerrada), el método numérico toma mucho tiempo para calcularse y ya que un robot de 6 grados de libertad tiene una solución analítica, usaremos el método algebraico o analítico para calcular la cinemática inversa y simular el comportamiento del robot RV-3SB por medio de la librería ARTE de la que hablamos en una entrada anterior.

I. Creación de la función de la cinemática inversa del robot RV-3SB en ARTE para MATLAB.


1. Copiamos la función inversekinematic_rv_6s.m que está en la carpeta robots/MITSUBISHI/rv-6s/ inversekinematic_rv_6s.m hacia la carpeta en donde tenemos nuestro robot robots/MITSUBISHI/rv-3sb/

2. Le cambiamos el nombre a la función y le llamamos inversekinematic_rv_3sb.m.

3. Vamos a abrir la función inversekinematic_rv_3sb.m para adecuarla al nombre de nuestro robot, dentro de la función sustituimos el nombre del robot RV_6S por el de RV_3SB y el de RV-6S por el de RV-3SB.

En la misma carpeta en donde está el archivo inversekinematic_rv_3sb.m también está el archivo parameters.m que es en donde definimos los parámetros DH (Denavit-Hartenberg) y en particular el nombre de la función para calcular la cinemática inversa:

robot.inversekinematic_fn = 'inversekinematic_rv_3sb(robot, T)';

Hay una función que está en la carpeta lib/kinematics/inversekinematic.m

Esta función permite llamar a todas las funciones cinemáticas inversas para cualquier robot y lo que hace internamente es evaluar la función de cinemática inversa para ese robot en particular.  En nuestro caso llama a la función inversekinematic_rv_3sb.m

Lo primero que la función inversekinematic.m hace es calcular la posición de la muñeca a partir de la posición del extremo, que es conocida y que viene dada por la matriz T. A partir de esta se calculan las variables q1, q2 y q3 utilizando la función solve_for_theta2 y solve_for_theta3, que están implementadas más abajo en el mismo archivo de función.

Una vez calculadas las variables articulares q1,  q2 y q3, se arreglan en una matriz con todas las posibles soluciones de variables articulares.

Para resolver las últimas tres coordenadas articulares utilizamos la función solve_spherical_wrirst o solve_spherical_wrirst2, en la mayoría de los robots que están en la librería se usa la primera debido a la posición y orientación relativa dentro de los sistemas. En el caso de los robots de ABB debemos usar solve_spherical_wrirst2 y en el caso de los robots Mitsubishi solve_spherical_wrirst. La función puede usar un método geométrico o algebraico para solucionar la cinemática inversa.

II. Prueba de la función en MATLAB.


4. Ejecutamos el programa MATLAB.

5. Debemos inicializar la librería ARTE y cargar el robot RV-3SB:
    >> init_lib
    >> robot=load_robot

6. Buscamos en el directorio robots, dentro de la carpeta MITSUBISHI y de allí en el RV-3SB para cargar el archivo de parámetros.

Luego de cargar el archivo, aparece el robot en una ventana de figura

7. Ejecutamos la función teach de la librería ARTE.
    >> teach
Si presionamos los botones X+, X-, Y+, Y-, Z+ o Z- ahora el robot sí se mueve sin darnos error.

8. Definimos un vector de coordenadas articulares:
    >> q=[pi/8, pi/8, pi/8, pi/8, pi/8, pi/8];

9. Visualizamos el robot en la posición articular q:
    >> drawrobot3d(robot, q);
Podemos girar el punto de vista del robot usando el botón .

10. Encontramos la matriz de transformación homogénea del sistema X6Y6Z6 del extremo en relación con el sistema de coordenadas de la base.
    >> T=directkinematic(robot, q)

11. Ahora vamos a calcular la cinemática inversa 
      >> qinv=inversekinematic(robot, T)


12. Como solución, la función devuelve ocho vectores columna de seis filas, indicando ocho posibles soluciones para situar el extremo con esa posición y orientación.

Tenemos que las primeras dos soluciones son de muñeca arriba y muñeca abajo, la tercera y cuarta solución son de codo abajo comparadas con las primera y segunda que son codo arriba.

NOTA: Debido a que los límites de la articulación q6 están entre -360º a +360º existen otras cuatro soluciones que podemos obtener al sumar 2π a q6 de la segunda, cuarta, sexta y octava respuestas, pero se debe tener cuidado que si el elemento terminal del robot real usa cables o mangueras para activarse, el giro extra de 360º puede forzar o romper las conexiones.

13. Podemos comprobar las soluciones viendo que una de ellas corresponde al vector de coordenadas articulares original.

Encontramos las matrices de orientación de Ti para tres de las soluciones:
      >> T
      >> Ti1=directkinematic(robot, qinv(:,1))
      >> Ti2=directkinematic(robot, qinv(:,2))
      >> Ti3=directkinematic(robot, qinv(:,3))

Con lo que comprobamos que las tres son iguales a la original y por lo tanto colocan al robot en la misma posición y orientación.

14. Para la tercera solución podemos comprobar, por medio de la función test_joints, si esta posición del robot es válida:
      >> test_joints(robot, qinv(:,3))
Con lo que obtenemos un error indicando que no es una posición válida.

15. Visualicemos las ocho posibles soluciones:
      >> drawrobot3d(robot, qinv(:,1));

      >> drawrobot3d(robot, qinv(:,2));

      >> drawrobot3d(robot, qinv(:,3));


      >> drawrobot3d(robot, qinv(:,4));

      >> drawrobot3d(robot, qinv(:,5));

      >> drawrobot3d(robot, qinv(:,6));

      >> drawrobot3d(robot, qinv(:,7));

      >> drawrobot3d(robot, qinv(:,8));

16. Vamos a hacer al robot transparente:
      >> robot.graphical.draw_transparent=1
      >> drawrobot3d(robot, qinv(:,1));

Si queremos quitar la transparencia:
      >> robot.graphical.draw_transparent=0
      >> drawrobot3d(robot, qinv(:,1));

17. Con la función teach no se comprueban los rangos de las articulaciones, por lo que podemos exceder el movimiento permitido del brazo.

III. Conclusiones.


Pudimos obtener la función cinemática inversa para el robot Mitsubishi RV-3SB de una forma relativamente sencilla y comprobamos su funcionamiento en la caja de herramientas ARTE de MATLAB. Podemos luego agregar más elementos como una pinza u otros modelos de la librería ARTE para interactuar con ellos.

Aquí dejamos el enlace para descargar todos los archivos creados para el modelo cinemático directo e inverso del robot RV-3SB.

1 comentario: