Robot móvil controlado a través de HTTP

Hace poco desarrollé un proyecto en el que utilicé la placa Atmel NGW100 para montar un pequeño robot móvil controlado de forma remota a través de HTTP (una web empotrada).

La potencia de esta placa le permite ejecutar entre otros un servidor HTTP con capacidad para ejecutar PHP-CGIs o C-CGIs. U aun así, aun tiene la capacidad y potencia para tener un sistema empotrado Linux con un dispositivo de almacenamiento por tarjeta SDIO de hasta 2Gb, lo amplia en mucho su capacidad de almacenamiento.

El proyecto en sí es de idea fácil: “Robot móvil controlado a distancia accediendo a través de una página Web”. Sin embargo, su realización entraña una serie de problemas.

Compilación cruzada.
Primero, montar el sistema NGW100 para disponer de HTTP + PHP supone compilar el buildroot de Atmel, un sistema en el cual se puede hacer una compilación cruzada y preparar el sistema Linux para la placa.

Comunicaciones.
Luego, hay que decidir cómo conectar la placa con el “mundo exterior”. La placa cuenta con dos interfaces Ethernet y dos conectores RJ45 de 10/100. Sin embargo, para un robot móvil lo más interesante es disponer de una conexión inalámbrica. Esta placa cuenta con capacidad para conectar dispositivos que le doten de capacidad inalámbrica WIFI, como el módulo XG-182 de Zcomax que utiliza el interfaz de comunicaciones SPI, tarjetas SDIO WIFI como las que posee Embwise Technologies, los módulos MatchPort b/g Pro que permiten dotar de WIFI a través de RS232 o optar por un adaptardor WIFI a través de unas de las conexiones Ethernet RJ45 (opción, que dada la crisis económica, hacía la más interesante para mí).

Programación.
Luego, queda la programación. Este sistema, aunque potente no puede compararse con un PC así que la programación debía ser sencilla. Opté por usar una “sencilla” programación en el servidor, que permitieran mover al robot haciendo de intermediario entre el usuario/Navegador y su control. Mientras, en el cliente, cargaba un poco más la programación haciendo uso de jQuery y AJAX, dado que seguramente el navegador tendrá mucha más potencia que la placa.

De esta forma, en el navegador reside la carga de programación visual hacia el usuario mientras que las peticiones PHP hacia la placa son sencillas y destinadas casi exclusivamente a control del robot.

Baterías.
Como todo robot o dispositivo móvil, las baterías son un “pequeño” problema, simplemente porque las “puñeteras” tienden a agotarse. Este problema se soluciona añadiendo más baterías o adquiriendo la mejor del mercado, pero ya sabemos… a más capacidad y menos tamaño más precio final… cuestión de economía para cada uno.

Resultado final.
Una vez solventados todos estos problemas, y muchos más que no voy a relatar, lo que si voy a poner continuación son unas imágenes de un pequeño robot hechos con esta placa (NGW100) y con programación en HTML, JavasScript/AJAX, PHP, C y Linux ShellScript.

El robot cuenta con:

  • Placa NGW100 (la protagonista)
  • Plataforma 4×4 ROVER 4WD1
  • Sensor de proximidad por ultrasonidos SRF02
  • Controlador de motores MD22
  • Baterías
  • Punto de acceso Linksys WRT54GC (la opción más barata que encontré para mi)
  • Algunos circuitos adicionales para conversión de niveles en señales I2C.

Esquema de conexiones de datos:

Resultado final:

La potencia de la placa NGW100 permite tener el servicio de webservices necesarios para trabajar con el navegador del usuario mientras que otros servicios internos de Linux permiten definir cualquier proceso para obtener información, grabar resultados, etc.

Un bonito “robotito” que echó a andar solo, nunca mejor dicho…


2 comments on “Robot móvil controlado a través de HTTP

  1. Hola Gerard, ¿qué vas a hacer y qué necesitas exactamente?. La programación sería en principio similar a la de cualquier aplicación Web excepto que en algunos casos, en vez de hacer lecturas y escrituras a la base de datos se harían lecturas y escrituras a los motores, sensores y demás dispositivos. Para ello, necesitas un servidor con acceso a estos elementos.

    Yo lo probé todo con PHP y el acceso a los sensores los realizaba a través de programas escritos en C y a través del bus I2C. Con esto, desde PHP accedía a los buses a través de los programas (drivers) escritos en C.

    Saludos.

Comments are closed.