Translate

jueves, 11 de julio de 2013


Robot controlado por teléfono Android.


Después de más de un año, el proyecto de Robot Personal va tomando forma y estos son los avances.

El objetivo del proyecto era desarrollar un pequeño robot controlado por un teléfono Android como base para probar tecnología de visión e IA. No debería ser solo un juguete controlado como un mando a distancia, sino que debería ser autónomo, pudiendo circular, recibir órdenes habladas y responder hablando, como debería hacer un robot. Para este objetivo, pensé en reutilizar el software que existe disponible en la red de manera gratuita, y sobre este desarrollar las funcionalidades deseadas.
Los móviles actuales aportan cualidades únicas para hacer de pequeños controladores de robot. Son ligeros, integran multitud de sensores incluyendo la cámara, tienen una enorme potencia de cálculo y conectividad. En concreto en este proyecto he utilizado un teléfono Android Nexus 4 como cerebro del robot.
El hardware por supuesto podría ser desarrollado más profesionalmente y ser comercializado después para tener robots autónomos por la casa. Estos robots podrían usarse para jugar, para vigilar o  transportar cosas, con solo acoplar un teléfono de los que tengamos al hardware,
Voy a resumiros el trabajo realizado hasta ahora. Si alguien está interesado, quiere colaborar o incluso piensa que podemos comercializar un hardware basado en estos desarrollos, puede contactar conmigo. 

 

El Hardware


Estos son los componentes actuales:
Tarjeta IOIO. Es el elemento a través del cual el teléfono se comunicaría con los motores y los sensores. La tarjeta IOIO se puede conectar con el teléfono por medio de un conector USB o por medio de una bluetooth añadiendo a la tarjeta un “dongle”. Este es el método de conexión usado actualmente.
Control de motores a cargo  del controlador de doble puente H - L298.  Por medio de la señal  PWM se regula la corriente que llega a los  motores del chasis y también se utiliza su salida +5V para alimentar a los servos analógicos de la “cabeza”.
Dos sensores ultrasónicos para evitar obstáculos no detectados por el sistema de visión y para dar marcha atrás. Últimamente he integrado un sensor de infrarrojos de distancia que da mejor resultados que los ultrasónicos.
Un kit pan/tilt para dar movilidad a la “cabeza” del robot. Dos servos analógicos controlan el kit.
Un chip brújula GY-26-USART para conocer la orientación. Se podría haber utilizado la brújula del teléfono pero está sujeta a magnetizarse por la presencia de elementos metálicos cercanos. Esta brújula está montada actualmente en una torre para aislarse lo más posible de elementos con hierro del propio robot y del suelo de la casa, como vigas.
La alimentación es con dos baterías lipo de 7.4V, una para la tarjeta IOIO y otra para el L298. La alimentación independiente me evita los reset de la tarjeta IOIO cuando los motores empiezan aconsumir


Esquema:




El software.


Para un robot autónomo que pretenda poder hacer diversas tareas, el software es la parte que se llevará más horas de trabajo. Para incorporar capacidades al robot he partido de un enfoque “de abajo a arriba”, donde las funcionalidades de bajo nivel dan pie a la incorporación de funcionalidades de mayor nivel. Todas las pruebas son en un entorno normal de una casa, no en zonas o secciones preparadas o pintadas especialmente para el robot.
Software base “Open Source” incorporado:
OpenCV. Para proceso de imágenes. Existen versiones para Andorid e iOs. Es una de las liberías de proceso de imágenes más importantes que existen
Chatter. Es un “bot de conversación” similar al que se puede encontrar en algunos asistentes que parecen conversar con nosotros, pero modificado para que pueda reconocer órdenes y enviarlas al planificador de acciones.
Y los módulos principales que incorpora actualmente, desarrollados por mí .
Cámara. Capacidad básica de ver obstáculos. Para distinguir los obstáculos del suelo se calculan los bordes alrededor de los objetos y se determina la zona más libre de obstáculos.
Proceso de imagen. Algunas de las capacidades actuales son:
-Localizar  un color predeterminado o uno elegido de lo que se está viendo.
-Reconocer la habitación donde está ahora por comparación con fotografías almacenadas.
-Reconocer  una persona (con la ayuda de las librerías  OpenCV.)
Movimientos básicos: Adelante, atrás, girar, girar sobre si mismo hacia un ángulo…
Patrones de movimiento: Son capacidades básicas de movimiento  de más nivel que el simple movimiento, y construidas sobre los movimientos básicos. Algunos ejemplos de patrones ya implementados:
-Deambular sorteando obstáculos,
- Avanzar evitando obstáculos en una dirección de la brújula
-Buscar un sitio libre al que moverse después de encontrar un obstáculo que no se ha podido evitar.
- Seguir  un color determinado
- Seguir el color que esté viendo.
Planes  Usando los patrones de movimientos básicos, se puede planear el recorrido para ir de una habitación a  otra. Para eso es necesario que se defina al robot una forma de ir de un sitio a otro para que pueda hacer planes. Esto se consigue con un fichero XML en el que se especifica como ir de cada habitación a las habitaciones contiguas. Con estos datos, el planificador puede el plan completo para ir de una habitación a cualquier otra.
Por ejemplo, el siguiente  trozo de XML le dice que para pasar de la entrada al comedor debe encontrar una señal de color verde. Cuando esté cerca de ella, debe orientarse a 90º y mover se  en esa dirección 6 segundos. 

 <nodo destino="comedor"
            origen="entrada" >
            <accion>
                <buscar color="verde" tiempo="20" />
                <mover angulo="90"  tiempo="6" />
           </accion>
   </nodo>

Posicionamiento

Para que el robot pueda planear como ir de un sitio a otro lo primero que tiene que saber es donde está.  Este es uno de los mayores problemas los que se enfrenta un robot en un espacio cerrado, y se han estudiado muy diversas soluciones hasta ahora.
Actualmente el sistema para determinar en que habitación en la comparación de lo que la cámara ve con una serie de imágenes almacenadas, clasificadas por habitación. La comparación se hace en base al histograma de distintas secciones de las imágenes. Pero como plataforma de pruebas que es, se seguirán probando nuevos sistemas de localización.

Conclusión.


Con este proyecto tenemos un sistema de bajo coste con gran capacidad de procesamiento en el que experimentar y desarrollar los elementos que un robot autónomo tendrá que tener para vivir en nuestros hogares, desde la capacidad básica de ir y venir, reconocer su entorno, comunicarse y jugar o hacer alguna que otra función útil, como transporte y limpieza. La adaptación de algoritmos como SLAM, e inclusos el paso al sistema operativo para robot ROS son otras de las posibilidades para mejorar la plataforma.








Canal de Youtube:

domingo, 8 de julio de 2012

Quiero tener un robot personal




Hace muchos muchos años, allá por los años 80, existió una revista de informáticas llamada “el ordenador personal”, una de las primeras de las muchas que vendrían después.


Pues bien, después de tanto tiempo desde luego que tenemos ordenadores personales, y tablets y teléfonos personales, pero seguimos sin apenas robots personales. Lo que nos falta aún es un robot que nos acompañe en nuestra casa, que se mueva e interaccione con su entorno y con nosotros. Bien, si ya están vendiendo algunos que hacen algo útil como los robots aspiradora, pero no puedes hablar con ellos ni te conocen ni evolucionan,  es como tener un reptil en casa.


Abro este blog para hablar y recopilar informaciones de robots personales así como para seguir el desarrollo del mío propio que voy a ir construyendo en n esfuerzo personal de reunir e integrar la tecnología disponible de una forma también barata y asequible.




Robots con teléfonos Android





Mi primera decisión es utilizar móviles y tabletas Android como cerebro del robot. El  primer motivo es que en un móvil tenemos concentrado: una cpu potente, brújula,  GPS,  acelerómetro,  cámaras, usb,  wifi, reconocimiento y síntesis de voz. ¿Cuánto hubiera costado hace unos años reunir todo este hardware para empezar a construir un robot casero? . Y ahora lo tenemos igual que antes teníamos un ladrillo Nokia. El segundo es que es más ligero de transportar por un pequeño robot que un PC, y el tercero es la facilidad para hacer programas para Android.




Mi primer robot controlado por un móvil.



Para construirlo, estos son los materiales que reuní:


1   -    Un teléfono Android.
2   -    Un coche de juguete viejo pero que funciona. Tiene dos motores que se mueven sin servos, uno para la dirección y otro para avanzar.
     -   Una tarjeta IOIO. La venden en entre otros sitios en http://www.bricogeek.com
Esta tarjeta puede conectarse al teléfono Android por USB o por Blutooth. Lo que se consigue con ella es poder disponer de un montón de puertos digitáles y análogicos de entrada y salida y PWM controlados desde android
4   -  Para dar corriente a los motores procedentes de las pilas, y después de de haber cortado los cables originales del coche, una tarjeta controladora de motores doble puente H - L298.


     Bien, no tengo mucha idea de electrónica, lo mío es el software, pero no hace falta saber mucho para unir todo y tener el coche de juguete bajo el control de Android.


     En este punto podría haber hecho un coche controlado por el móvil, pero de esos ya hay varios ejemplos. Lo que hice fue implementar un algoritmo basado en la visión de la cámara del teléfono para dirigir el coche autónomamente. El resultado se puede ver en este vídeo:






                                      


Sería posible pasar años perfeccionando el algoritmo de visión, y creo que cualquier aspecto de la robótica requiere inmensas cantidades de tiempo, y aunque he pasado bastante con este problema, quiero llegar a tener un robot personal a base de integrar  tecnologías ya desarrolladas.


Más cosas desarrolladas:



    1 - Órdenes por voz, ya las tengo implementadas.


    2- Respuestas por voz. También puede ir contando lo que le va pasando, es fácil para un teléfono Android, pero encuentro un poco molesto que te vaya contando lo que hace delante de gente(familia) que no sabe lo que estás haciendo.


    3- Reconocimiento de patrones. Esto es lo próximo, dejar al coche-androide deambular por casa buscando una forma concreta.


Recursos.



Aquí os comento algunos recursos interesantes que voy encontrado:


OpenCV. Librería Open Source de visión artificial que tiene versión para Android http://opencv.org/platforms/android.html

Robots para construir o comprar. http://www.amazon.es/LEGO-8547-Mindstorms-NXT-2-0/dp/B001V7RF9U/ref=sr_1_1?ie=UTF8&qid=1341782195&sr=8-1


Un Framework para programación de robots.


http://www.ros.org