10 enero 2013

Hacking Roomba! Reloaded


En todos los congresos y eventos a los que voy, siempre me preguntáis por la famosa Roomba, que si la he dejado limpiando en casa y que para cuando le voy a hacer alguna otra perrería.

La verdad es que con esto de que las garantías de los productos nuevos duran dos años en este país, no he querido "arriesgarme" en exceso (¿quién lo diría eh?) a hacer cosas que pudieran invalidar la garantía. Los que me vendieron mi mascota robotizada, supongo que como me tienen más que controlado por twitter y les salta una alerta cada vez que cojo un destornillador, tampoco me iban a dar mucha credibilidad si algo raro le pasaba. 

Así que como en estas navidades expiraba la garantía de mi Roomba, he osado a quitar todos los tornillos y centrarme en dos hacks que llevaba tiempo pendiente de ejecución, y que espero que sean útiles a aquellos lectores que los Reyes magos o Papá Noel les hayan traido un "atrapapolvo con batería".  


Hack 1: Las alfombras negras

Si de algo se queja la gente en Internet, de estos bichos, es el problema que tienen cuando pasan por una superficie oscura, quedándose paradas o evitando pasar por este tipo de superficies. Os explico qué sucede. Estos robots, por cumplir con la tercera ley de la robótica, llevan delante 4 sensores que detectan si existe peligro de caída o escalón, y dan marcha atrás o se detienen para mantener a salvo su integridad. Estos sensores, llamados "Cliff Sensors" constan de dos leds IR que van insertados en una pieza que los separa con un tabique de plástico. El led IR emisor manda una señal que, en el caso de un suelo normal, reflejará dicha señal y será captada por el led receptor, cerrando un circuito que indica que "todo va bien". En caso de encontrarse con un escalón, al haber una distancia mayor de la esperada, la onda emitida no es reflejada y, al no recibir señal el led receptor, la Roomba interpreta que se va a caer.

En el caso de suelos o alfombras oscuras, el resultado es el mismo, dando lugar a un falso positivo. Como solución, en algunos foros encontré que la gente ponía papel de plata (comúnmente conocido por papel Albal),  pegado con cinta adhesiva bajo los sensores para que se refleje siempre el haz enviado y el receptor no se queje. Sin embargo, y a partir de determinados modelos, en mi caso y a otros foreros, no funcionaba correctamente.

Así que me acordé de un truco con el que perdí en la Universidad un concurso de sumo de robots. Se trataba de diseñar un robot que competía contra otros en una superficie negra delimitada por un círculo de pintura blanca. Para saber si tu robot estaba tocando los límites de salirse del sector, disponías de unos sensores parecidos que detectaban el color blanco (o el negro, definible en una variable de programa). Total que los que me ganaron tuvieron la sencilla idea de blindar con folios en sentido horizontal, en los bajos, rodeando su robot. De esta manera, cuando el mío les iba a embestir detectaba blanco y se paraba, así, hasta que llegó un momento en que se quedó acorralado y el otro lo sacó del ruedo.

¿Solución para la roomba? Trozos de papel blanco bajo el sensor. Durante dos años he estado renovando estos folios con cinta adhesiva porque se rompían, se llenaban de polvo y directamente la roomba se paraba, etc,… Así que ahora, ya sin riesgo de quedarme sin garantía de un cacharro de 400 euros, con un juego de destornilladores como armas, forré de periódicos (sin darme cuenta que quedó como primera plana la sección de Contactos, cosa que alguno en Twitter si percibió :D) la mesa de la cocina de casa de mis padres y me propuse hacer un hack que ya ví documentado en zackyfiles.




Aquí tenéis los contenedores de los sensores IR



La idea es, por cada sensor, juntar ambos leds IR (emisor y receptor), derribando el tabique plástico que los separa, de manera que lo que uno emite, lo reciba el otro sin problemas, sin tener que reflejarlo el suelo. 



Después de esta foto, los junté con celo y los metí en cada uno de los compartimentos donde iban antes.

OJO: haciendo esto la Roomba queda totalmente desprotegida ante escalones, por lo que si tenéis escaleras o posibles caídas en casa, NO HAGÁIS ESTO!!!!! o seréis cómplices de suicidio de Roomba! 

Aquí tenéis las piezas que sobraron, después de operarle la miopía a mi roomba :D



Hack 2: La chimenea

Como sabéis, una de las cosas que hice desde los primeros días con mi Roomba fue conectarle un interfaz bluetooth al puerto minidin que trae. De esta forma, y después de muchos intentos, logro interactuar con el robot-aspiradora, de manera que pueda leer su estado (si está cargándose o andando), temperatura y carga de batería (porcentaje de vida), y puedo darle órdenes como ponerse a limpiar o mandarlo a su dock. Todo esto por línea de comandos, de manera que puede que lo mande yo de forma manual o skynet de forma automática.

Como el objetivo principal de la Roomba es limpiar, meterse por debajo de los muebles y dejar todo impecable, los ingenieros de iRobot colocan unos bumpers que permiten a la aspiradora detectar si chocan con un obstáculo. Obviamente, esos bumpers están a la misma altura que el resto de la Roomba, evitando que se quede atascada o que intente entrar en un sitio que no cabe. Sin embargo, al conectarle el minidin con el bluetooth de Sparkfun que compré, nuestra amiga tiene un implante, con el que su cerebro no cuenta. Si da la casualidad que tiene que pasar por debajo de un mueble con una altura, que normalmente cabría si fuese "de serie", pero NO cabe con el conector, tenemos un problema: el conector choca y se destroza. Para evitar esto, y por temas de garantía, tuve que montar hace tiempo un sistema de parachoques en mi amiga, cortados a la altura del conector minidin, de manera que si chocaba contra algún obstáculo a esa altura, protegiese el minidin. 

De esta guisa podéis ver cómo iba de protegida mi roomba




Igualmente, y con tiempo libre, me decidí en estas navidades a eliminar las "chimeneas", dejando la Roomba de serie, pero sin perder la funcionalidad bluetooth. La idea es conectar los cables que portan las señales del circuito BT al conector mini-din 8 pin. 

Para los que queráis hacerlo, os dejo los pasos necesarios.

Bajo estas líneas veréis el circuito que lleva el bluetooth y los 5 cables que necesitan enviar y recibir señales (los dedos los tenía sucios después de desmontar un cacharro cuya misión es aspirar el polvo del suelo...)



Según el manual del libro Hacking Roomba! el circuito sería tal que así:




A partir de aquí, y aunque podría haber seguido el manual, quise asegurarme con los colores, así que con ayuda de un tester, comprobé la conectividad entre los diferentes cables y su correspondencia de los pines en el mini-din macho.

Con eso, me hice un dibujo, con el código de colores de los cables, y al tener que conectarlos a un conector hembra, invertí de forma especular los cables, quedando los cables de colores a insertar, en el conector hembra de la placa base, como muestro bajo estas líneas:


Y aquí unas fotos de la posición correcta para que no os de problemas encajar el resto del circuito (va todo muy ajustado dentro y el mejor sitio que encontré para que las tapas cerrasen bien fue el que se ve bajo estas líneas)






Sé que lo mejor habría sido soldar los cables a las conexiones en el circuito impreso, en vez de insertarlos en cada uno de los orificios de los pines, y pegarlos con cinta aislante, pero para pasarlos para atrás era aún más complicado. Además en caso que deje de funcionar, o que alguien pase revista, se pueden quitar los cables y todo volverá a quedar "de fábrica" (si no se miran mucho los tornillos, claro está…). De hecho, aquí la tenéis hasta con su tapa incluída, como el primer día...




Hack 3: La cumparsita (de propina)

Aunque esto no lo hice en Navidades, ya que estamos, quiero compartir con vosotros un material inédito aún. Siempre me decís que a la Roomba, sólo me falta hacer que cante, puesto que todo lo demás, incluso que baile, ya lo hace.

Como los que nos seguís sabéis, fui speaker en la última edición del congreso de seguridad Ekoparty 2012, en Buenos Aires. No era plan de andar acarreando la roomba en la maleta en viajes transoceánicos, en los que te pueden poner mil problemas en las aduanas, así que quise transmitir, al público argentino asistente a ekoparty, el mensaje sorpresa que mi Roomba les enviaba.

Os dejo aquí el video que les puse:




Fueron unas cuantas horas de programación de la API de la Roomba para hacer que memorizase la canción completa (gracias @secanella) por tus conocimientos de notas musicales para poder hacer posible este video.

He de decir que la Roomba, hasta ahora ha tenido un comportamiento excelente, y tras las barbaridades que le he hecho, ahí ha seguido funcionando, y aspirando, que es para lo que le pago!

6 comments :

Angel Alvarez Nuñez dijo...

Buena la armaste, ahora mi señora me pide una igual pero que suene "taquito militar" jajajaja. Excelente post y Un abrazo Genio.

☠ akil3s ☠ dijo...

es increible Lorenzo!! gracias por compartir estas cosas ;-)

Ivan Iglesias Peña dijo...

Pues si que es buena, que a mi compañera también le ha gustado la idea me ayudavas un montón si me concretas la pieza de sparkfun que tuviste que comprar.


Gracias por adelantado

Lorenzo_Martinez dijo...

Pues en su día, yo lo compré en la propia web de Sparkfun, pero he visto que ya no lo venden, así que ahora mismo, no sabría dónde buscar. Quizá si me vuelve a tocar tener que implementar este sistema, intentaría fabricarlo con estas alegres manitas :)

Alfonso dijo...

Impresionante artículo Lorenzo.

No comentas el modelo Roomba en cuestión. He de decir que he probado varios de estos bichos gracias a mi blog http://www.robotroomba.net y los últimos que han sacado no tienen alguno de esos problemas que comentas. Hablo sobre todo de la Serie 600 y 700, y más concretamente del Roomba 790 por ejemplo. No sabría decir qué modelo es el de la foto, quizás el 581? En ese caso comentar que es un modelo de hace un par de años y la empresa iRobot ha mejorado algunas cosas.

Saludos y muchas gracias por la información que compartes

ugopa dijo...

La cumparsita es uruguaya!!!