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:
No hay comentarios:
Publicar un comentario