Butiá Android 2012
Contenido
Objetivo
El objetivo de este proyecto es realizar una aplicación Android para poder controlar al robot Butiá. Las funcionalidades que deberá tener la aplicación son las siguientes:
- Moverse hacia adelante y atrás.
- Moverse hacia los costados.
- Obtener los valores de los sensores instalados (distancia, grises, etc).
- Utilización del acelerómetro para mover el butiá.
- Streaming en el dispositivo móvil capturado por la XO.
Tutor
- Federico Andrade
Integrantes
- Estrella Simoes
- Rodrigo Stecanella
- Diego Martínez
Resumen del trabajo
El trabajo constó en investigación y desarrollo tanto de la tecnología sobre Android como de funcionalidades, por ejemplo, streaming de video, reconocimiento de voz y uso del acelerómetro del dispositivo móvil. Se desarrolló una aplicación Android utilizando Eclipse como IDE.
Descripción del problema
El objetivo del proyecto es poder teleoperar el robot butiá utilizando una aplicación para la plataforma Android que haga uso de los acelerómetros para controlar el movimiento del robot y despliegue en la pantalla los sensores presentes y sus valores. También se puso como objetivo a alcanzar, que se pueda utilizar la cámara web de la computadora del plan ceibal para poder hacer streaming de video al celular.
Funcionalidades
Interconexión entre la ceibalita y la aplicación:
Se necesita realizar una conexión TCP/IP entre la aplicación y el bobot-server para poder controlar el robot butiá.
Control del movimiento del robot:
A través de la conexión TCP/IP se tienen que poder pasar los mensajes correspondientes con las órdenes para mover al robot. Para esto sería positivo utilizar el acelerómetro presente en la mayoría de los celulares son sistema operativo Android.
Despliegue de sensores:
Debe existir alguna forma de acceder a la información de los sensores del robot (escala de grises, etc.).
Streaming de video:
Se debe poder hacer streaming del video de la cámara web de la ceibalita a la aplicación en el celular.
Interfaz gráfica de la aplicación:
Se debe proveer una interfaz gráfica sencilla, orientada a la utilización de la aplicación por parte tanto de niños como adultos.
Reconocimiento de Voz:
Se debe proporcionar un mecanismo para poder controlar el robot mediante órdenes de voz y poder consultar los valores de los sensores.
Descripción de la solución de las funcionalidades
A modo general, la aplicación fue desarrollada en java, utilizando las librerías provistas por Google para desarrollar las aplicaciones en Android.
Interconexión entre la ceibalita y la aplicación:
La interconexión se realizó a través del protocolo TCP/IP, utilizando el puerto que abre el bobot-server para poder enviarle los mensaje correspondientes como se detalla en su API. La conexión se realizó mediante la clase Socket de Java.
Control del movimiento del robot:
Para controlar los movimientos que realiza el robot se implementaron dos formas distintas: mediante el acelerómetro y mediante un joystick. Si se elige utilizar el acelerómetro, los movimientos del robot se realizan por la inclinación en el espacio que tenga el dispositivo móvil. Por ejemplo si se inclina el dispositivo hacia la derecha, el robot girará sobre sí mismo, y dependiendo de qué tan pronunciada sea dicha inclinación es la velocidad con la que se desplazará el robot. Para implementar en Android la funcionaldiad del acelerómetro se tuvo que implementar la interfaz SensorEventListener. Si se elige controlar los movimientos mediante el joystick, se dispone de una flechas con las cuales se indica el sentido en el cual se quiere mover al robot (adelante, atrás, izquierda, derecha). También se dispone de una barra con la cual se elige la velocidad a la que se desea desplazar al butiá.
Despliegue de sensores:
Si se quiere ver el valor de los sensores conectados actualmente al robot, se tienen dos opciones, utilizar las órdenes de voz o acceder a una pantalla especialmente hecha para esto. Si se elige utilizar las órdenes de voz, se debe presionar el botón “Orden de voz” y pronunciar el nombre del sensor al cual se desea acceder (“gris”, “luz”, “distancia” o “botón”). Para acceder a la pantalla donde se despliegan los valores de todos los sensores se debe presionar sobre el botón “Sensores”.
Streaming de video:
La generación del streaming de video se realiza con librerias de gstreamer: gstreamer-0.10, gst-rtsp-server-0.10 y gstreamer-ffmpeg-0.10.
Utilizamos una XO con fedora 17 con permisos de root, la cual ya provee gstreamer. Se instalaron los repositorios de rpm de rpmfusion-free y rpmfusion-nonfree [7] y con yum se agregaron las librerías faltantes y sus dependencias: - gstreamer-rtsp de los repositorios de fedora - gstreamer-ffmpeg de los repositorios de rpmfusion
Para emitir usamos un ejecutable generado a partir de test-launch.c [6] de la siguiente manera: - modificamos este archivo para que brinde el streaming de video en rtsp://127.0.0.1:8554/test.mp4. - lo renombramos como test-mp4.c y lo compilamos en una máquina virtual de Fedora-17-i686-Live-SoaS que tiene instaladas todos los paquetes de desarrollo de gstreamer y gstreamer-rtsp.
gcc -o test-launch $(pkg-config --cflags --libs gstreamer-0.10 gst-rtsp-server-0.10) test-launch.c
- transferimos el ejecutable a la xo y generamos el streaming de video con la siguiente cadena:
./test-mp4 “( v4l2src ! ffenc_h263 ! rtph263ppay name=pay0 pt=96 )”
- la url de emisión es: rtsp://[ip de la XO]:8554/test.mp4
Interfaz gráfica de la aplicación:
La interfaz propuesta se compone de 4 pantallas distintas desde las cuales se puede acceder a todas las funcionalidades provistas por la aplicación. A continuación se detalla cada una:
Pantalla inicial: Aquí se debe ingresar la IP de la ceibalita en la red para poder realizar la conexión (Ej: 192.168.5.42), el puerto donde se está publicando el video de la camara web (Ej: 8554) y la ruta del video (Ej: video.mp4). Esta pantalla es la primera que aparece cuando se inicia la aplicación y se muestra una sola vez. Una vez que se da aceptar, se accede a la pantalla principal
Pantalla principal: En esta pantalla se puede elegir controlar los movimientos del robot mediante una especie de joystick o mediante el acelerómetro del celular. También se puede acceder a la funcionalidad de emitir órdenes de voz y acceder a las pantallas de Muestra de Sensores y de Streaming de Video.
Muestra de Sensores: En esta pantalla se muestran los valores de los sensores que están conectados actualmente al robot, si no están conectados, se muestra un mensaje acorde.
Streaming de Video: Desde aquí se puede ver el streaming que se está realizando desde la cámara web de la ceibalita (si es que se hizo la configuración correspondiente) y opcionalmente también se puede activar el acelerómetro para poder manejar los movimientos del robot mientras se mira la video.
Reconocimiento de Voz:
Para realizar el reconocimiento de voz en la aplicación se utilizó la aplicación de reconocimiento de voz estándar de Android (SpeechRecognizer), la cual debe estar instalada en el celular. Pronunciando las palabras “adelante”, “atras”, “izquierda” y “derecha” se mueve al robot en los respectivos sentidos y pronunciando “gris”, “luz”, “distancia” y “boton” se muestran los valores de los respectivos sensores en pantalla. 4.1. Diseño y arquitectura del software
La aplicación que corre en el sistema operativo Android se implementó en 2 clases: Robot y ButiaActivity. Además también dispone del diseño de las interfaces de usuario, las cuales están descritas en archivos xml.
Diseño del Software:
La aplicación que corre en el sistema operativo Android se implementó en 2 clases: Robot y ButiaActivity. Además también dispone del diseño de las interfaces de usuario, las cuales están descritas en archivos xml.
Robot:
Conceptualmente es la interfaz mediante la cual la aplicación se comunica con el bobot-server que corre en la ceibalita. Se encarga de realizar la conexión TCP/IP y de mandar los mensajes que sirven para dar las órdenes al butiá, como puede ser el movimiento que deben realizar los motores o las consultas acerca de los sensores que están conectados al robot.
ButiaActivity:
Se encarga de todo lo relacionado al manejo de la lógica de la aplicación. Desde el comportamiento que deben tener los botones de la interfaz, a manejar la utilización del acelerómetro y el reconocimiento de voz.
Entorno de desarrollo
- Eclipse Classic 4.2 (Juno) [1]
- Android SDK [2]
- SubVersion [3]
- Sistema operativo para correr bobot-server: Sugar [4]
- Código fuente: Google Code [5]