Skip to content

Software

joseastorgat edited this page Aug 23, 2016 · 24 revisions

En la presente sección se entrega la información correspondiente al software desarrollado y utilizado en el control del Gripper Universal, y su uso implementado en el robot KUKA KR6.

Una característica importante del software desarrollado es que el sistema que controla la funcionalidad del Gripper es independiente a la interfaz utilizada para manejar el robot KUKA. Tanto el control del Gripper y del robot KUKA están desarrollados en ROS y el lenguaje en el que está programado es python.

El software esta separado en las siguientes 3 secciones.

##1.Sistema de Funcionamiento del Gripper:

###Funcionalidad:

Para establecer comunicación entre el arduino que actúa encendiendo o apagando el Gripper y el PC Master con que se desea manipular el Gripper, se hace uso de ROS. Se establecen ambos como Nodos que se envian mensajes entre ellos, como se indica en el siguiente diagrama.

Gráfico de conexión entre nodos y tópicos de ROS involucrados

Desde el PC Master se crea un nodo de control del Gripper, el cual se encarga de publicar en el topic gripper_cmd el estado del gripper. El nodo Arduino se suscribe a este topic, y enciende o apaga el relé que controla el Gripper. Mientras el relé esté encendido, la aspiradora estará funcionando, y el gripper agarrará el objeto. El nodo Arduino publica en el topic gripper_state un mensaje customizado del tipo state_msg, el cual contiene información del tiempo de ejecución del programa y el estado en el que se encuentra el relé.

###Nodo Arduino:

Para poder utilizar el Arduino Uno como un nodo de ROS, se hace uso de [rosserial_arduino] (http://wiki.ros.org/rosserial_arduino).

El arduino funciona como nodo publisher y suscriber. Su principal función es suscribirse al topic gripper_cmd, desde el cual recibe un Bool que indica la acción que debe ejecutar, al llegar un mensaje True, el arduino encenderá el relé conectado al pin A0, y al llegar un mensaje False lo apagará. Una función secundaría es la de publicar en el topic gripper_state, el estado en el que se encuentra el relé y el tiempo desde que se ejecuta el programa. Esto sirve para detectar problemas entre la comunicación del nodo de control y el nodo Arduino.

Codigo: GripperArduino.ino

Nodo Controlador (Gripper Interface):

El nodo controlador es el nodo encargado de publicar el mensaje que será leído por el arduino, indicando el estado del gripper (cerrado o abierto).

Para la creación de este nodo, fue creada la clase Gripper en Python (usando rospy), la cual crea un objeto publisher y suscriber, que se encarga de publicar constantemente con un rate de 10 Hz el mensaje al topic gripper_cmd. A la vez, se suscribe a gripper_state para recibir e informar el estado del gripper y el tiempo de ejecución del programa.

Clase Gripper:

Funciones de la clase Gripper

  • Gripper.start(): Inicializa la publicación constante del mensaje en el topic gripper_cmd
  • Griper.update_state(): La función que se encarga de publicar constantemente el mensaje en el topic gripper_cmd
  • Gripper.set(Bool): Función que cambia el mensaje a publicar.
  • Gripper.open(): Cambia el mensaje a publicar a False (suelta objeto).
  • Gripper.close(): Cambia el mensaje a publicar a True (agarre de objeto).
  • Gripper.shutdown(): Detiene la publicación del mensaje.
  • Gripper.Callback(): Función para recibir el mensaje state_msg desde el arduino, y lo publica con logdebug( state_msg).

Codigo: [gripper_interface.py] (https://github.com/mecatronica-fcfm/kuka_universal_gripper/blob/master/src/kuka_universal_gripper/gripper_interface.py)

##2.Control de los movimientos del KUKA KR6:

El control del robot KUKA se realiza a través de la interfaz desarrollada en ROS, ubicada en el siguiente repositorio: [KUKA KR6 with KRC2 controller] (https://github.com/rorromr/kuka_kr6).

En este repositorio, fue de especial utilidad la interfaz desarrollada en Python, la clase KukaCommander, que se encuentra en el paquete kuka_driver, que permite controlar el movimiento del robot KUKA y su velocidad de movimiento a través de funciones en Python.

##3.Programas Usuario:

Lector de Rutinas:

Programa en Python que permite ejecutar una rutina predefinida, escrita en un archivo de texto. Este programa funciona utilizando las clases Gripper y KukaCommander, para mover el KUKA y manipular el Gripper.

Funciona interpretando cada línea de texto de la rutina como un comando hacia el KUKA-Gripper.

También se creó un lector de prueba que permite probar las rutinas sin la utilización del robot manipulador y comprobar posibles errores.

Código lector : lector.py

Código lector de prueba: lector_prueba.py

Kuka Shadow Gripper:

Kuka Interactive es un package en el repositorio kuka_kr6 que nos permite mover el robot kuka con cinemática inversa, moviendo un robot "sombra" a la posición que deseamos mover el kuka. Funciona a través de la herramienta rviz de visualización 3D de Ros.

A este programa se le incorporaron las funcionalidades del gripper, permitiendo que ademas de mover el robot, se pudiese cerrar y abrir el gripper, dando como resultado el programa Kuka Shadow Gripper.

Código Kuka Shadow Gripper : interactive_gripper.py

Package Kuka Interactive : https://github.com/rorromr/kuka_kr6/tree/master/kuka_interface/src/kuka_interface