Home » Grado » Diseño, monitorización y control de un hexápodo con ROS.

Login with your Social Account

Diseño, monitorización y control de un hexápodo con ROS.

  •  
  •  
  •  
  •  
  •  
  •  

En esta entrada se describe cómo hacer caminar a un robot hexápodo con ROS utilizando el paquete MoveIt!

En este trabajo se pretende diseñar y resolver el manejo de uno de estos pequeños robots que cada vez son más comunes en nuestro día a día y que llegan a ser los nuevos juguetes de una generación de niños que los ven como algo igual de común que un balón. Para ello, se diseñará el robot y posteriormente se resolverá su movimiento, bien mediante una simulación o bien mediante un cálculo matemático, para posteriormente tratar y enviar esos datos al robot, intentando que este se mueva de la manera deseada. Esto se puede diseñar de múltiples maneras, pero en este caso se ha elegido una herramienta denominada ROS, un sistema operativo para el control de robots, que plantea una integración de todo lo necesario para llevar a cabo el proyecto, y que ofrece un marco de posibilidades muy amplio.

  • El hexápodo

Para el desarrollo del presente proyecto el principal e indispensable elemento es el robot. En este caso se ha elegido un hexápodo, concretamente el Helium Frog HF08 Hexapod Robot (http://www.heliumfrog.com/hf08robot/hf08blog.html), un hexápodo imprimible de bajo coste. En la página web anterior se muestra un link que lleva a la plataforma GrabCAD donde aparecen los archivos necesarios para imprimir, mediante una impresora 3D, cada una de las piezas utilizadas.

El robot está compuesto de seis patas iguales, cada una con tres servos (en este caso se utilizan los servos TowerPro SG-5010).

Sin título

Una vez que el robot está construido se necesitará algún medio para conectar desde el ordenador con el robot y transferirle la información. Para esta tarea se va a utilizar una tarjeta de adquisición de datos, la Torobot, con capacidad para 32 servos, aunque solo se utilizarán 18.  La comunicación con la tarjeta se realizará vía puerto USB, por el cual se debe enviar un mensaje o telegrama con un formato concreto. En dicho telegrama los valores que podemos transferirle a la tarjeta, que establecerán la posición de los servos, son todos los números enteros incluidos en el intervalo de 500 a 2500. Se puede encontrar en la web el formato de estos mensajes.

El último paso que nos queda es la calibración. Para ello, se plantea un sistema de calibración consistente en dibujar en el suelo cuatro círculos concéntricos de 1 cm de radio el primero, 2 cm el segundo, 3 cm el tercero y así sucesivamente. Este proceso se realizará seis veces, una vez por cada pata, y en cada caso el centro de los círculos debe coincidir con la posición geométrica de la pata en su posición de reposo (ésta se obtiene a partir de las medidas geométricas del hexápodo). Así, una vez montado y con las patas en su posición inicial (con todos los servos a 1500) se va cambiando el valor de los servos hasta que todas las patas estén lo más próximas al centro de sus respectivos círculos.

Sin título

  • ROS

Una vez diseñado y construido el robot se necesita algo con lo que controlar dicha estructura y dotarla de movimiento, algo con lo que conectar e interactuar con la tarjeta para que esta accione los servos necesarios para conseguir el objetivo de que el hexápodo camine. ROS es la principal herramienta que se usará en el desarrollo del presente trabajo para resolver esa tarea. En el documento adjunto al final de la entrada se puede seguir los pasos para generar el espacio de trabajo y las modificaciones necesarias de los archivos generados en el paquete para un correcto funcionamiento del programa.

Con los paquetes, se organiza ROS, pero el sistema realmente funciona con la interacción principal de otros tres elementos: los nodos (ejecutables), los mensajes (datos) y los topics (temáticas). Aunque también existe un cuarto elemento necesario, el que se encarga de vigilar que todo lo anterior funcione correctamente: el Master (la ayuda de ROS). Este último es necesario ejecutarlo siempre en un terminal aparte para que los nodos puedan funcionar, por lo tanto con este elemento se activan todos los prerrequisitos de ROS.

El sistema de ROS funciona de manera sencilla. Para enviar mensajes entre un nodo y otro se utilizan los topics. Un nodo se puede suscribir a un topic o publicar en él. Cuando un nodo publica algo en un topic todos los nodos suscritos reciben ese mensaje. Para que todo esto funcione, el tipo de mensaje que envía el publicador tiene que ser el mismo que el que espera recibir el suscriptor y por tanto, cada topic tiene un tipo de mensaje que se determina en su creación.

  • MoveIt!

Con la aplicación MoveIt! vamos a resolver el propósito de este proyecto. Aunque esta no es la única posibilidad. MoveIt! es una nueva aplicación introducida en ROS para la manipulación de robots móviles. Permite la generación de trayectorias, resolución de la cinemática inversa, movimiento en planos en 3D, control del movimiento…

Pero como es obvio, lo primero que se necesita en este proceso es un modelo, hace falta un robot virtual que se pueda manejar y programar, y que el propio simulador pueda ver donde esta y que acciones tiene que hacer para llevarlo a donde se quiere llegar. Para ello se deberá de generar un tipo de archivo específico .urdfo. En el documento presente al final de la entrada se profundiza en la sintaxis de estos archivos y podemos encontrar el modelo utilizado en el trabajo.

Una vez ya tenemos el modelo él siguiente paso es cargarlo en el MoveIt! y empezar a trabajar con él. Aunque primero deberemos de generar el paquete necesario para utilizar la aplicación. Para ello utilizaremos el moveit_setup_assistant. En esta parte se definirán las diferentes partes del modelos que seremos capaces de mover y generaremos diferentes grupos de piezas que moveremos a la vez (por ejemplo en nuestro caso nos interesará tener un grupo que sean las tres partes que componen las patas del hexápodo).

Una vez ya hemos ajustado todos los parámetros del modelo podemos ejecutar el MoveIt! y empezar a programar trayectorias de los distintos grupos definidos en el asistente, siempre desde las extremidades.

Sin título

Si el grupo es sencillo (una única cadena de piezas), aparece al final del grupo unos marcadores que pueden utilizarse para desplazar el extremo por el espacio, y con ello arrastrar el grupo entero.

Con todo esto podría hacerse ya una simulación de un movimiento, leer la solución de dicho movimiento y enviársela al robot. Una vez establecidas posiciones iniciales y finales, se planificaría y ejecutaría observando en pantalla al modelo realizar el desplazamiento definido. Ahora buscaremos como indicarle al simulador la posición deseada sin tener que moverlo a mano.

Para ello utilizaremos una de las funciones que el MoveIt! nos ofrece. Move_group es el nodo donde se lleva a cabo toda la planificación del movimiento. Este nodo proporciona una amplia gama de prestaciones a la hora de la planificación. Dentro de este hay diversas funciones pero la que permite ajustar la goal state del extremo es la que nos interesa. Con esta función queda resuelto el problema, aquí se le podrá indicar a que posición cartesiana se desea que vaya y él hará los cálculos.

Para programarlo de la manera correcta, lo primero que se hace es inicializar un nodo. A continuación se toma el control del grupo a mover. Es importante resaltar que el tiempo de planificación es un problema en esta parte del proyecto, por defecto éste es de 5 segundos pero se deberá ampliar a 180 segundos para poder obtener una solución valida ya que intentamos programar 6 extremidades. Posteriormente ya se generan variables del tipo de mensajes que se van a enviar con las posiciones, y se le dan valores a los parámetros de ese mensaje. Finalmente se fija como posición final de cada end effector la posición establecida, y se planea y ejecuta una trayectoria hasta dichos puntos. Ejemplos de estos códigos se pueden ver en el documento adjunto al final de la entrada.

Por último lo que nos queda es comunicarnos con el robot y enviarle toda la información. Aquí es donde aparece el listener, un nodo cuya función, como se puede ver en el nombre, es escuchar al MoveIt! y suscribirse al topic donde se estén publicando los mensajes que indiquen al simulador el giro de los servos para llegar a esa posición final. Este topic es donde se publican las soluciones de la cinemática una vez se han calculado.

  • Cinemática inversa

Otra opción que podemos considerar es realizar nosotros mismos la resolución de la cinemática inversa. En este caso el sistema no es muy complejo por lo que mediante un simple análisis de ángulos podemos encontrar la solución al problema. Pero esta entrada está centrada en la resolución del proyecto mediante la simulación en MoveIt!. Para profundizar más en esta segunda alternativa podemos encontrar la resolución de la misma en el documento adjunto.

Sin título

  • Conclusión

El propósito del proyecto era conseguir diseñar una programación para dotar de movimiento al hexápodo. Este objetivo se ha conseguido, mediante el control de la herramienta ROS. Como conclusiones podemos obtener que MoveIt! es una herramienta muy potente y quizás demasiado para un proceso tan simple como este donde la resolución de la cinemática inversa puede ser un proceso más adecuado.

La aplicación está diseñada para poder generar escenarios, evitar obstáculos o introducir trayectorias muy complejas que sería imposible resolver a mano. Además ofrece una interacción continua con el robot mediante los sensores que este pueda tener generando mapas virtuales de lo que el robot “ve” y pudiendo interactuar con el entorno. En este trabajo el robot carece de sensores, y el movimiento que se le programa es independiente del entorno (se considera que se le ofrece un entorno propicio), por ello la segunda opción es más asequible y sencilla. El proyecto presentado tiene como objetivo que el robot camine hacia delante sin importar la presencia de obstáculos y por tanto el problema matemático es breve. Es en consecuencia más operativo que exista un nodo que resuelva la cinemática inversa antes que calcularlo mediante un simulador que tiene en cuenta muchas variables y cuyo algoritmo es genérico y por lo tanto más complejo.

A parte de esto, MoveIt! está diseñado para brazos robóticos o manipuladores, que como mucho presentan dos extremos. En el trabajo presentado se le ha introducido un modelo de seis patas. MoveIt! resuelve la cinemática colocando un extremo en una posición y luego el siguiente partiendo del primero, si uno falla vuelve a empezar lo que para seis extremos puede ser muy largo.

A pesar de todo eso, resaltar que con MoveIt! se ha logrado el objetivo, y que probablemente este sea el primer paso para un proyecto de mayor escala donde poder utilizar realmente todo su potencial.

En el siguiente fichero podéis encontrar más detalles de mi TFG:

 

A %d blogueros les gusta esto: