domingo, 9 de mayo de 2010

Últimos detalles

Después de un tiempo sin escribir nuevas entradas, queremos poneros al día sobre nuestro proyecto.
Bien, como dijimos en la anterior revisión, nuestro proyecto ya era completamente funcional, habiendo alcanzado los objetivos que nos propusimos inicialmente. Hasta ese punto habíamos conseguido:
  • Conectar GPS con software roombo! y procesar los datos que nos proporciona
  • Conectar la aspiradora Roomba con el software roombo! y enviar comandos simples desde éste
  • Lograr una comunicación iPhone-roombo! mediante sockets
  • Aplicación roombo! para el iPhone: interfaz gráfica sencilla con pestaña de configuración
  • Envío de comandos desde el iPhone hasta la Roomba
  • Implementar un método que nos pase de: Coordenadas pantalla iPhone -> Coordenadas reales->movimientos Roomba
En líneas generales, ese es todo el progreso hasta la pasada revisión, en la que demostramos que ya podíamos manejar la Roomba desde el iPhone de forma bastante eficiente.

Una vez pasado ese "cuello de botella", solo nos quedaba mejorar todo lo que hemos venido haciendo hasta ahora, desde el software roombo! que correrá en el ordenador, hasta la aplicación para el iPhone.
De esta forma, estos días hemos tenido dos líneas de actuación:
  1. Software roombo!: parte servidor (PC)
Nuestro objetivo aquí ha sido, principalmente, dividir el programa en varias "hebras" que se ejecutan simultáneamente. El motivo de esta decisión, es debido a que necesitamos mejorar nuestro método de desplazamiento de la aspiradora para que ésta pueda ir corrigiendo su trayectoria según se mueve. Esto lo haremos mediante un método iterativo, que irá recogiendo continuamente las coordenadas que proporcione el GPS y comparándolas con las del destino. Con esos datos, se recalculararán los parámetros de los movimientos a enviar a la aspiradora.
Por otra parte, también necesitamos que el programa se encuentre siempre a la espera de que le llegue algún otro parámetro del iPhone, ya que hasta ahora, al haber solo una hebra de ejecución, solo podiamos enviar órdenes desde el iPhone cuando la orden actual se hubiese terminado de ejecutar.
Así, tenemos varias hebras de ejecución a considerar:
>una encargada de obtener periódicamente datos del GPS.
>una hebra que se encuentre escuchando continuamente en el puerto al que el iPhone envía comandos
>otra hebra encargada de recalcular los parámetros y enviarselos a la aspiradora
2. Sofware roombo!: aplicación iPhone.
Como se pudo ver en la revisión, nuestra interfaz era bastante simple, sobre todo la parte que se corresponde al control sobre la pista de deporte, que únicamente mostraba una "View" en la que, al pinchar en algún lugar sobre esta, se enviaban las coordenadas de ese punto a la aspiradora.
Pues bien, no íbamos a dejarlo así y como teníamos previsto, hemos incluido un "MapView" en el que se nos muestra la pista de deporte con las imágenes que nos proporicona "Google Maps". En este mapa, además, podemos ver un pincho o chincheta. Éste nos indica la posición actual de la aspiradora y además, tenemos la posibilidad de arrastrarlo sobre la pista para indicar adónde queremos que se mueva nuestra Roomba.
En esta línea, hemos añadido también la posibilidad de visionar imágenes en tiempo real de la WebCam del ordenador que irá encima de la Roomba, sin nada más que tocar una pestañita que encontraremos en la "chincheta" y que nos mostrará una nueva vista con la imagen en cuestión.
Todo esto lo mostraremos en la próxima revisión.

Por otro lado, estamos trabajando en la implementación del control mediante el uso del accelerómetro. Hasta el momento, sabemos enviar comandos simples con él, pero tenemos que pulir bastante los métodos que utilizamos para ello.

Esto es todo por ahora. Sentimos no poder ofreceros capturas en este momento, ya que nuestro objetivo es poder mostrar todos los avances al mismo tiempo.

Un saludo!






jueves, 22 de abril de 2010

Actualización..

Bien, después de bastante tiempo, hemos conseguido mover la aspiradora de forma remota.
Como dijimos en la anterior entrada, hace poco logramos establecer una conexión entre el iPhone y el servidor de roombo!. Pues bien, tras integrar el servidor en nuestro código, empezamos a trastear con la aspiradora.

Todo movimiento que hace la aspiradora se basa en dos acciones: girar un ángulo "α" y moverse en línea recta y hacia delante una distancia "d". Este modo de funcionamiento será correcto siempre y cuando no haya ningún obstáculo de por medio, como es el caso.
La obtención del ángulo y la distancia es muy sencilla, puesto que nosotros establecemos las coordenadas del punto al que queremos mover la aspiradora, y conocemos la posición actual de ésta (por medio del GPS), con lo cual se trata simplemente de resolver un triángulo rectángulo, como puede verse a continuación:

Además, hemos de mencionar que para el cálculo de esos dos parámetros hemos considerado que la aspiradora, después de realizar cualquier movimiento, vuelve a su posición inicial (ángulo = 0º), la cual se tomará como referencia siempre que tenga que girar.

Siguiendo en la misma línea, queremos comentar que para realizar las pruebas, no hemos podido hacer uso del GPS, ya que dentro del laboratorio apenas coge señal, sino que hemos introducido nosotros unas coordenadas al programa y a través del cliente (que será el que se ejecute en el iPhone) le hemos enviado las coordenadas de destino a la aspiradora. Y voilà, nuestra Roomba comenzó a girar para más tarde avanzar hacia delante como esperábamos.

Sin embargo, el objetivo del proyecto es que la aspiradora pueda manejarse dentro de un entorno que vamos a definir nosotros. Éste será una de las pistas de deporte de nuestra escuela, de las que hemos tomado las coordenadas de sus cuatro esquinas para poder más tarde llevarlas a nuestra aplicación iPhone, en la que simularemos este campo.

Finalmente, en cuanto a la aplicación iPhone, ya tenemos terminada la vista de configuración, que mostramos en la anterior entrada. Hemos estado trabajando para que se puedan guardar los datos de configuración y así no tener que introducir la IP y puerto cada vez que querramos usar la aplicación. Así que en los próximos días comenzaremos a trabajar en la última parte de nuestro proyecto, que se basa en obtener las coordenadas de el punto en el que se ha tocado la pantalla y enviarlas al servidor de roombo!.

A partir de ese momento nos dedicaremos a ir puliendo pequeños detalles que nos gustaría perfeccionar.

Por ahora eso es todo. Para la revisión de la semana que viene esperamos poder llevar un video que muestre todos nuestros avances hasta ahora.
Un saludo!!!



domingo, 18 de abril de 2010

Otro avance¡


Bien, como dijimos en la anterior entrada, hemos realizado avances en la parte correspondiente al iPhone.
En este sentido, nuestro primer objetivo era lograr una conexión iPhone-Servidor Web, lo cual hemos conseguido utilizando sockets.
En nuestro caso, la aplicación cliente será la que corra sobre el iPhone, mientras que ejecutaremos el servidor en el NetBook que irá conectado a la aspiradora.
Tenemos que mencionar que para que el iPhone pueda establecer una conexión con el ordenador, éste último necesita disponer de una conexión a internet o en su defecto una conexión Ad-Hoc a través de WiFi, lo cual aun no hemos probado, pero que tenemos pensado hacer.

Una vez conseguido eso, era momento de empezar a diseñar la interfaz gráfica de nuestra aplicación. Para ello, hemos escogido una plantilla para apliaciones tipo "Flip-side view".
Este tipo de aplicaciones disponen únicamente de dos vistas: una principal, que será la que veamos cuando la aplicación comience y otra secundaria, a la que accedemos mediante un pequeño icono en la vista principal. Al pulsar sobre ese icono, la primera vista da un giro de 180º sobre sí misma y nos muestra la segunda (Es como si vieramos la parte de atrás de la vista principal).
El contenido de la vista principal será "el arena" donde se moverá nuestra aspiradora, y en ella podremos elegir que ésta se mueva a una posición simplemente tocando sobre un determinado punto la pantalla.

Sin embargo, nuestro primer objetivo en lo que se refiere al diseño de la interfaz ha sido la vista secundaria, la cual es más sencilla y se compone de varios UILabel, UITextField...
En la siguiente imagen podeis ver una captura de ésta y comprobareis que esta vista será la que utilicemos para configurar los parámetros de conexión.



jueves, 1 de abril de 2010

Avances

Nuestro proyecto va tomando el "roombo"...

Después de mucho tiempo sin volver a actualizar el blog, aquí está nuestra segunda entrada, en la que os vamos a mostrar el progreso del proyecto hasta hoy.
Bien, tras atravesar varias dificultades, hemos conseguido cerrar completamente nuestro primer objetivo, el cual os recordamos que consistía en:
  • Establecer una comunicación con la Roomba
  • Establecer una comunicación con el módulo GPS
  • Parchear datos obtenidos del GPS
  • Integrar todo lo anterior en una misma aplicación
Para establecer comunicación con la aspiradora, nos resultó esencial el código proporcionado por Jorge Cancela. Este código hacía uso de un módulo Bluetooth para la aspiradora (Rootooth) para comunicarse con ella. Además, en ese código vienen definidos ya diferentes movimientos, lo cual, a pesar de no ser muy complicado, nos quita una carga de encima.

Otro punto que ya hemos cubierto es la comunicación y parcheado de datos del GPS. Este ha sido uno de los puntos màs complicados que hemos abordado hasta el momento, puesto que hemos tenideo que documentarnos mucho sobre el manejo de puertos serie, así como el funcionamiento de dispositivos GPS y el tipo de datos que estos proporcionan.
Así, hemos conseguido escribir un programa que es capaz de establecer una conexión con el GPS, leer los datos que éste nos envía y parchearlos adecuadamente, para conseguir nuestras coordenadas en el formato ECEF (Earth-Centered, Earth-Fixed). ECEF es un sistema cartesiano de coordenadas cuyo centro está en el centro de masa terrestre.
Más abajo puede verse una captura con un ejemplo de los datos parcheados una vez obtenida la cabecera "GPGGA" recibida del GPS.
Pues bien, esto NO es todo por el momento. Hemos realizado avances importantes en la parte que corresponde al iPhone, los cuales mostraremos en la siguiente entrada, que publicaremos antes de que acabe la semana.



martes, 2 de marzo de 2010

Bienvenidos

Pero, ¿qué es esto?

Éste será el blog que utilizaremos como bitácora a lo largo del desarrollo de nuestro proyecto, al que, inicialmente, hemos llamado "roombo!" (¿roombo!?, ¿por qué roombo!?). Aquí iremos publicando entradas durante los próximos meses mostrando los avances que vamos obteniendo, así como cualquier tipo de problema que nos surja, referencias a documentos que utilicemos y alguna entrada que resulte un poco "didáctica".

¿Y vosotros quiénes sois?

Somos Eduardo González y Jesús Hernández, estudiantes de tercero en la ETSIT de la UPM y procedentes de Santa Cruz de Tenerife y Salamanca, respectivamente.
Entre nuestros intereses, podemos destacar el gusto por las nuevas tecnologías y todo lo relacionado con ello...lo cual no quita que nos encante salir y disfrutar de la "independencia" que nos ofrece vivir fuera de casa mientras seamos estudiantes.
Visto así parecemos las personas más simples del mundo, pero entendemos que no todo el mundo quiere leer una biografía de cada uno de nosotros en esta bitácora, con lo que por ahora lo dejamos así.

¿roombo!?

roombo! es el nombre de nuestro proyecto. Se trata de un simple juego de palabras, teniendo en cuenta que nuestro trabajo se va a centrar en el control de la aspiradora Roomba de la empresa i-Robot, mediante un dispositivo iPhone, con el cuál podremos definir el rumbo de ésta.

Vale, pero no me queda nada claro qué es lo que haréis exactamente...

Paciencia, aquí te lo explicaremos más profundamente.
Como hemos mencionado antes, nuestro proyecto se centra en el control a distancia de una aspiradora iRoomba utilizando un dispositivo iPhone.
Esta aspiradora despertó mucho interés cuando empezó a comercializarse ya que, por un precio no excesivamente alto, cualquiera podía disponer de un pequeño robot doméstico, con sus sensores, motores...Precisamente esto fue lo que hizo que pronto se empezase a indagar sobre la forma de controlar este robot, obtener información de los sensores...
Este interés hizo que la misma empresa que fabricó el robot, añadiese más tarde a éste un pequeño puerto serie por el cual se le podían mandar instrucciones a la aspiradora.
Esta SCI (Serial Command Interface) será la que utilicemos para comunicarnos con la aspiradora.

Junto con ese añadido, publicaron un documento en el cual se muestra el funcionamiento de esta interfaz, además de todos los comandos que podemos mandar a nuestra aspiradora.
Para mandar instrucciones a la aspiradora, nosotros utilizaremos un NetBook, el cual irá conectado a la aspiradora aprovechando el puerto serie que éste tiene.

Nuestro objetivo es que, mediante un programa en el ordenador, gestionemos las órdenes que nos llegan desde el iPhone vía WiFi y se las pasemos a la aspiradora.
Este programa además deberá tener en cuenta la posición actual de la aspiradora, lo cual pretendemos conseguir mediante un módulo GPS USB que conectaremos al NetBook. Con las coordenadas actuales de la aspiradora y las que se reciban del teléfono, nuestro programa deberá generar un determinado número de órdenes (mover X centímetros, girar Y grados) para que la aspiradora se mueva a la posición indicada en el iPhone.

Por tanto, nuestro proyecto consta esencialmente de dos partes:
  • La primera y más importante se centra en la creación de un programa que corra sobre Windows y sea capaz de mandar órdenes a la aspiradora Roomba a través del puerto serie del ordenador. Además este programa deberá gestionar el módulo GPS.
  • La segunda parte la constituye la aplicación para el iPhone. Ésta constará de una interfaz simple en la cual podremos ver la "arena" en el que la aspiradora se moverá. De esta forma, tocando sobre un determinado punto de la pantalla, estaremos indicando a la aspiradora que se mueva hasta esa posición.
El iPhone mandará la información sobre la posición al NetBook mediante WiFi.



¿Disponéis de todo el material?

Sí. Aquí os presentamos un listado de todo el hardware que utilizaremos:
  • NetBook proporcionado por el DIE
  • iMac para el desarrollo de la aplicación del iPhone.
  • módulo GPS USB proporcionado por el departamento
  • cable para la comunicación serie con la aspiradora
  • iPhone (será totalmente prescindible hasta el final del proyecto)
Y software:
  • entorno de programación para C (en principio hemos elegido Eclipse)
  • entorno de programación xCode (en el iMac)
En cuanto a recursos tales como libros de consulta, documentos, librerías... estamos utilizando los siguientes (esta lista se irá ampliando a lo largo de estos meses):
  • "Desarrollo de una interfaz multimodal para un robot domótico móvil. Control por voz y mando a distancia¨. P.F.C. de don Jorge Cancela González, Ingeniero de Telecomunicación por la ETSIT UPM. Proporcionado por el departamento.
  • "El lenguaje de programación C. Segunda Edición" . Brian W. Kernighan y Dennis M. Ritchie, Editorial Pearson.
  • http://roomba.pbworks.com/. Recurso web donde encontramos como realizar una interfaz serie para conectar nuestro ordenador con la aspiradora.
  • Roomba SCI Specification Manual. Hoja de especificaciones de la SCI de Roomba.
  • Hackingroomba.com. Sitio web donde encontramos una librería Java en la que están implementadas todas las órdenes que se pueden enviar a la aspiradora, además de facilitar la conexión con la Roomba a través de un puerto serie.
  • http://www.gpstk.org/. Proyecto Open Source que consiste en un conjunto de librerías y aplicaciones que podremos utilizar para controlar el módulo GPS.
Todo parece muy bonito, pero, ¿realmente es viable?

Es el primer proyecto de este tipo que realizamos, por lo tanto estamos un tanto "verdes" en cuanto a planificación y establecimiento de prioridades. Pero por otra parte nos encontramos muy motivados y con ganas de que esto siga adelante.
Para ello, necesitamos establecer ciertos objetivos primordiales, que serán los primeros que debemos alcanzar.
En este sentido, nos parece fundamental lograr nuestra primera comunicación con la aspiradora. Es decir, nuestro primer punto a cubrir será el control de la aspiradora desde el ordenador, mandando órdenes simples a ésta y observando si se mueve de acuerdo a ellas.
Tras ello, nos "meteremos" con el módulo GPS. En este punto nos interesa averiguar cómo funcionan este tipo de dispositivos, qué tipo de datos se obtiene de ellos y cómo podemos procesar esos datos. Una vez sepamos todo esto, pensaremos en alguna forma de "traducir" las coordenadas que nos proporcione el GPS a instrucciones que pueda interpretar la aspiradora.
Todo lo anterior lo integraremos en una sola aplicación y comprobaremos si el robot se mueve hacia donde especifiquen las coordenadas del GPS.
De ser así, pasaremos a la última parte: el diseño de la aplicación para el iPhone. Esta parte la describiremos más adelante, puesto que también hay que ir siguiendo diferentes pasos (obtener comunicación con un PC, interpretar coordenadas según dónde hayamos pulsado en la pantalla...)

Ésta será a grandes rasgos nuestra "hoja de ruta" a seguir durante estos meses.