lunes, 4 de junio de 2007

Fonera Robot

Este proyecto consistió en hacer un robot con Linux embebido a muy bajo costo, pensándolo bien, creo que me ha salido 0 (cero) euros :-) , no tengo ningún cargo de conciencia con respecto al haber utilizado una fonera para algo que no era para lo que la regalaban los de FON, en primer lugar si te regalan algo puedes hacer lo que te plazca, segundo, indirectamente le hecho publicidad , al menos gente que no conocia la empresa ahora la conoce.
Bueno no me extenderé sobre si Fon violo o no la GPL al distribuir el software capado y que no se podía compilar e instalar el software de manera independiente. Lo que si contare rapidamente es que Fon existe gracias a los hacker de Seattle wireless y su lucha contra Cisco , para que liberaran el software del Linksys wrt54 (descubrieron tenia Linux internamente), gracias a eso se inicio el proyecto OpenWrt , con que funciona el software de Fon.

Bien centrándome en el FonBot, comentar que funciona con 2 motores paso a paso, que si bien no tienen velocidad , si precisión, que era para lo que originalmente habia creado la base movil, ya que lleva un sistema para subir y bajar un marcador, de manera que pueda dibujar lineas en el suelo. Una replicación de los trabajos pioneros del MIT en robótica movil y educativa de los años 60, con su tortuga logo.
Puede ser controlado manualmente desde su pagina web o programar movimientos autónomos con scripts desde una consola SSH.

Los comandos de movimiento del FonBot son:

Girar derecha GD [grados]
Girar izquierda GI [grados]
Avanzar AV [cm]
Atras AT [cm]
Subir marcador LAPIZ 1
Bajar Marcador LAPIZ 0

He querido respetar la esencia del lenguaje LOGO [1]. Deje la tarea inconclusa de portar el LOGO original al procesador MIPS de la fonera, y directamente implemente algo básico sólo el proceso de movimientos y un sistema de odometria , para que el bicho sepa donde se encuentra.

Estos movimientos son pasados como parámetros a una aplicación que procesa estos (uso como compilador el GCC con el IDE Anjuta desde Ubuntu, y luego compilo para la fonera por linea de comando, así me ahorra tiempo y dolores de cabeza ), la he llamado MOVER (ya se, muy original), así escribiendo desde la consola ./MOVER - GD 20 , por ejemplo gira a la derecha 20 grados. También se pude pasar como parámetro un archivo de recorrido, el cual consiste en una lista de comandos los cuales van siendo leídos uno a uno de manera secuencial.

Otra manera de mover el robot de manera autónoma es utilizando la aplicación BUSCAR donde utilizo algoritmos de IA para búsqueda de caminos, basando sus decisiones en un mapa del espacio 2D , el cual es una matriz en un archivo formada por símbolos " " y "*", según sea una posición ocupable o no por el robot, la posición inicial y final sera marcada en el archivo como una "f" . La idea es luego con una cámara IP tomar imagenes zenitales y con la misma fonera leer la imagen e identificar donde esta, su ángulo, y generar el archivo de mapa según se detecten objetos en el suelo.

En cuanto al sistema de control es por el puerto serie con la configuración original de la fonera , 9600 baudios y sin desactivar el acceso a la consola por el puerto serie. He utilizado un 16f628,un uln2008 para los motores, y un TIP 29 para el solenoide del marcador. El Pic esta programado en CCS , y aquí es donde viene lo original y que para nada es el método que debería utilizarse, y que haría que en la facultad te pongan una mala nota :-), pero quería experimentar algo distinto, al esquema clasico en comunicación serie, donde un lado es el CPU y el otro un dispositivo de E/S, lo que he hecho es que el microcontrolador escribe comandos directamente a la fonera, osea el PIC escribe comandos Linux !!! para por ejemplo informarle que el movimiento de los motores ha concluido, y para pasar el estado de variables del PIC ( interesante para leer los ADC ) y luego "montarlo" como un archivo en el sistema de ficheros, asi se puede acceder desde el OpenWrt de manera transparente a estos datos y sin tener que escribir una linea de codigo en la fonera.

Continuara...