|
Proyecto Hiro-Bot v 1.0 |
El proyecto Hiro-Bot consiste, básicamente, en la creación de un micrrobot móvil controlado mediante un Wiimote (es decir, un mando de la consola Wii), aprovechando su conectividad inalámbrica mediante Bluetooth y la gran versatilidad de control que ofrece gracias a sus sensores de inclinación, acelerómetros, sensores de infrarrojos, etc.
Índice:
El proyecto Hiro-Bot nace como práctica de laboratorio de la asignatura de Robótica Autónoma en la licenciatura de Ingeniería Informática de la Escuela Politécnica Superior de la Universidad Autónoma de Madrid. El principal objetivo ha sido conseguir realizar un proyecto algo diferente a las prácticas obligatorias propuestas, aprovechando para investigar un poco la potencia del Wiimote y sus posibles aplicaciones.
Para ello se ha partido de una placa GPBot proporcionada por los profesores de la asignatura y en primer lugar se ha procedido a construir la estructura del robot.
La estructura es simple a más no poder, ya que únicamente consta de una tabla de madera sobre la que se han sujetado la GPBot y los dos servos trucados que moverán las ruedas. En la parte inferior de la tabla se encuentran dos sensores ópticos CNY70, utilizados en un principio para que el robot siga líneas negras (aunque esta funcionalidad ya no esta presente en el software de Hiro-bot). Además, existen dos soportes para dos CNY70 que se en principio se utilizaban para ampliar la funcionalidad del seguimiento de líneas (detectando ángulos rectos y bifurcaciones), pero en la versión final de la estructura se encuentran cerca de los servos formando parte de los encoders que se podrían usar para implementar un control de velocidad.
Debido a que el Wiimote utiliza comunicaciones por Bluetooth, es necesario que haya un paso intermedio entre el Wiimote y el robot (ya que resultaría muy complicado leer el Wiimote directamente desde la GPBot), por lo que el robot sólo se comunicará con un PC (a través del puerto serie del micro), a la vez que el PC se comunica con el Wiimote (mediante un receptor de Bluetooth colocado en el PC).
El robot esta programado con un servidor que irá leyendo los datos que se reciban por el puerto serie y, según el dato recibido, realizar los distintos movimientos en los motores del robot. En la versión 1.0 el robot responde a 9 órdenes distintas, que son: avanzar, retroceder, rotar a la izquierda, rotar a la derecha, girar y avanzar a la izquierda, girar y avanzar a la derecha, y parar. Los detalles de la implementación del servidor se encuentran en los comentarios del código suministrado más adelante. Para poder compilar el programa se ha usado el compilador SDCC y para programar la GPBot, el programa gpbot-down.
Como se ha dicho, la comunicación entre el Wiimote y el robot debe pasar antes por el PC, por lo que es necesaria la ejecución de un programa cliente en el PC que lea los datos del Wiimote, los procese y mande al robot las órdenes pertinentes. Este programa ha sido realizado en Linux utilizando las librerías libcwiimote (para leer la información del Wiimote) y Stargate (necesaria para pasar fácilmente los datos a través del puerto serie hacia el robot). Para poder compilar y ejecutar los programas será necesario, por tanto, tener ambas librerías instaladas en la máquina en la que se vaya a ejecutar el programa. Además será necesario que el sistema contenga en las carpetas de código de usuario los fuentes de ambas librerías para poder compilar los programas.
El manejo del robot mediante el Wiimote es muy simple. Para poder usarlo correctamente hay que sujetar el Wiimote en posición horizontal, de forma que los botones apunten hacia arriba y la cruceta digital se encuentre a la izquierda. Partiendo de esa posición, una inclinación mayor o igual a 30 grados hacia delante o hacia atrás hará que el robot avance o retroceda respectivamente. Si la inclinación es hacia la izquierda o hacia la derecha, el robot rotará en el sentido que corresponda. Combinando inclinaciones en los dos ejes se conseguirán los giros con avance en las direcciones en que se haya inclinado el mando. Además, pulsando el botón A el mando vibrará (botón de confirmación para funcionalidades pendientes) y pulsando el botón B del mando se activa el freno de emergencia, que para el robot en cualquier momento.
Por falta de tiempo y debido a que ha sido necesario compaginar el proyecto con prácticas de otras asignaturas ha sido necesario dejar algunas cosas en el tintero. Las funcionalidades que se citan a continuación han quedado pendientes:
Modo de control mediante la cruceta digital del mando: Esta funcionalidad se implementó en un principio, pero por algunos problemas a la hora de manejar el robot se tuvo que eliminar. No obstante, sería bastante sencillo volver a incorporarlas.
Modo de control puntería: También quedó pendiente añadir un segundo modo de control con el mando en posición de apuntado. Tampoco sería demasiado complicado, ya que solo habría que cambiar los ejes y los ángulos que codifican cada movimiento.
Modo de control Katamari: Consistiría en utilizar dos Wiimotes para el control del robot. Con la inclinación de cada mando se controlaría de forma independiente cada una de las ruedas.
Sonidos de saludo y despedida: Ya que el Wiimote dispone de un altavoz, sería bastante fácil reproducir una pequeña secuencia de sonidos al conectar y desconectar el Wiimote al PC. Durante el desarrollo de la versión 1.0 se han realizado algunos test de sonido con el mando, aunque no han sido demasiado satisfactorios.
Control analógico: Una buena ampliación de funcionalidad sería incluir distintos niveles de velocidad en el robot, que corresponderían con distintos niveles de inclinación en el Wiimote. Para ello sería necesario poner en funcionamiento los encoders del robot (ya incluidos) y configurar los temporizadores del micro.
Funciones preprogramadas en el robot: Una vez que se pongan en marcha los encoders será posible que el robot realice movimientos mas complejos en respuesta a las pulsaciones de botones del Wiimote (o del Nunchuck de Nintendo). Por ejemplo, se podrían incluir ordenes para que el robot dé media vuelta o se mueva durante un determinado periodo de tiempo.
Feedback desde el servidor al cliente: Un paso interesante sería que el robot devolviera al PC datos sobre los movimientos que ha realizado (utilizando los encoders) de forma que podamos saber el camino que se va siguiendo. Esto nos permitiría, con un poco mas de trabajo, pintar los caminos por pantalla.
Control inalámbrico real del robot: A largo plazo se podría intentar desarrollar un módulo de comunicaciones inalámbricas entre el PC y el robot, para poder eliminar el cable serie, dando mas autonomía al robot.
Como se puede ver, son muchas las cosillas que se podrían añadir al proyecto en futuras versiones.
A continuación se muestra un video de ejemplo del manejo del Wiimote:
El código del proyecto se encuentra en el siguiente enlace:
hiro-bot_v1.0.zip (Pendiente de subir correctamente)
Este proyecto no habría sido posible sin la ayuda y el apoyo del profesor Andrés Prieto-Moreno Torres. Le doy las gracias por animarme a seguir cuando pensaba que todo el proyecto era inabarcable.
La web Wiili.org me ha proporcionado la gran mayoría de los datos técnicos sobre el Wiimote que me han ido haciendo falta.
A los autores de las librerías libwiimote por hacer tan simple la lectura de los datos del Wiimote.
A Juan González Gómez por el desarrollo de las librerías Stargate y por conseguir que me pusiera las pilas con el proyecto al colgar el video de su proyecto.
De nuevo a Andrés y Juan por el diseño de la página, que he copiado descaradamente de los proyectos de www.iearobotics.com :p
Este proyecto ha sido realizado por Miguel Olmos Carrascosa, estudiante de cuarto curso de Ingeniería Informática en la Universidad Autónoma de Madrid.
Si alguien quiere ponerse en contacto conmigo, hacedlo desde aquí.
Última actualización: 17/Mayo/2007 00:32