RoboDK y UR3

Para programar el robot podemos crear un programa dentro del propio RoboDK que se parece mucho a cómo se programan los Universal Robots desde sus terminales, una manera muy intuitiva donde declaramos targets y realizamos llamadas a movimientos (MoveJ, MoveL, …). Un ejemplo de cómo quedaría el programa en el árbol de elementos se puede ver en Fig. 1.


En nuestro caso, nosotros vamos a utilizar una programación en lenguaje Python. RoboDK también nos permite esta programación de alto nivel en otros lenguajes como C++ y a través de MATLAB. Desde MATLAB lo que deberíamos hacer es conectar no sólo el robot, sino RoboDK al entorno de MATLAB para poder trabajar desde él.


Para programar en Python tendremos que añadir el programa, el script de Python como un elemento al árbol de elementos como podemos ver en Fig.5. Para ejecutarlo es tan sencillo como dar doble clic al nombre en el árbol y ver cómo se ejecuta la simulación, o clic derecho “Ejecutar en Robot” si tenemos el robot conectado para cargar el programa en el controlador.


Hemos de tener en cuenta que, aunque veamos la posibilidad de “Editar el script”, este no nos abrirá el archivo fuente que le hemos cargado de fuera, sino un archivo temporal. Mientras lo tengamos abierto, cada cambio que hagamos al script y guardemos, se guardará para su ejecución. Si cerrásemos el editor y lo volvamos a abrir, es posible que nos cree un segundo archivo temporal y los cambios previamente realizados no estén presente, pues el archivo temporal parte del que esté en el árbol de elementos que no hemos modificado.


Para solucionar esto deberíamos de prestar atención a qué archivo es el que ha abierto el editor de código para saber con cuál estamos trabajando actualmente.

Fig. 1. Ejemplo de un programa hecho con targets en RoboDK. Este programa se mueve hasta la posición definida como “pos1_MasBajo”, luego se mueve linealmente hasta “pos2_IrAPieza”, seguido se mueve hasta la “pos3” y por último hasta “pos0_Vertical” donde termina el programa. Una instrucción no se ejecutará hasta que haya finalizado la anterior. Los targets están guardados en la jerarquía debajo del robot.

Fig.2. (a) Un programa de Python para ejecutar la simulación. (b) Opciones de ejecución del programa, primero sólo en simulación y segundo en el robot real que debería estar conectado previamente a darle a esta opción.

1.1. Programa de Python


En esta parte explicaremos un poco qué hemos hecho en el programa de Python que hemos creado para la simulación. Todo es programación normal en Python, salvo por el uso de las funciones especiales de las librerías de RoboDK.


Para la resolución hemos decidido simular cómo el robot se acerca a las piezas apoyadas en la mesa y las lleva a su lugar. Cada una de las 9 piezas piezas es llevada a un compartimento distinto de la estantería. Entendemos por “llevada” que el robot hace el movimiento de llevar la pieza hasta el sitio, pero no hay animación de la pinza

moviéndose.


El ejercicio se ha resuelto con una combinación de objetivos creados en la simulación y creados con código. Estos primeros se han generado moviendo el robot en el propio entorno de simulación y capturando la posición del actuador final. Estos targets en una ampliación del trabajo serían el resultado de detectar las piezas sobre la mesa.


Los otros, se han realizado con una aplicación de cinemática directa. Le hemos ido dando valores de ángulo a cada una de las articulaciones hasta llegar a la configuración final de la pose que queremos en el actuador final.


Durante la ejecución se puede apreciar que el actuador pasa ligeramente a través de la estantería. Esto se lleva a que nosotros estamos programando trayectorias donde le damos el punto de inicio y el final. La función encargada de generar la trayectoria no sabe que hay una posible colisión y por sí misma no puede lidiar con ella.


Si activásemos el mapa de colisiones que posee RoboDK, veríamos que, al chocar el robot con la estantería, inmediatamente detiene la simulación. No obstante, tras observarse unas colisiones leves (no está atravesando el techo de la estantería), se ha decidió mantener las colisiones apagadas e ignoradas.