Posteado por: Sergio Rodriguez Vaamonde | Enero 4, 2010

Desarrollar Realida Aumentada: cómo empezar

Hace ya más de 1 año que escribí una entrada en este blog hablando sobre realidad aumentada en dispositivos móviles, y cómo desarrollé mi proyecto de fin de carrera. Desde entonces son muchos los que me han preguntado cómo podían comenzar a hacer desarrollos de este tipo (bien académicamente o profesionalmente). En la mayoría de los casos he intentado responderles, pero en otros casos la respuesta se ha demorado demasiado.

Realidad aumentada en moviles del futuro

Como supongo que hay mucha gente interesada en entrar en el mundo de la realidad aumentada (para escritorio o móvil), a continuación os comentaré algunos pasos básicos que neceistaréis dar para poder ser fructíferos en este mundo.

Lo primero de todo es saber que lo que es la realidad aumentada. Últimamente se ha visto en muchas revistas y videojuegos esta palabra, pero si querei desarrollarla, necesitais comoprender bien su significado (mucha gente me ha consultado si era posible hacer cosas que no eran “realidad aumentada”). Como siempre, la wikipedia puede serviros de punto de partida con este artículo.

Una vez ya conocéis el término pensaréis: ¿y por dónde empiezo? Lo primero es saber programar en C o C++ (fundamental, aunque existen aplicaciones que permiten hacer pequeños desarrollos sin necesidad de programar, pero la potencia es relativamente menor). En cuanto al punto de partida, la respuesta más fácil que yo daría es comenzar por ARToolkit. Son un conjunto de librerías que te permiten desarrollar aplicaciones de realidad aumentada en C++ para un PC. Como antes, os recomiendo que primero aprendais qué es ARToolkit , y luego comencéis con un simple tutorial (en esta web teneis todo lo necesario).

Ahora bien: ¿cuál es el siguiente paso que puedo dar? En este caso, la respuesta es bien sencilla: ¡cualquier paso es bueno! Ahora ya sabes cómo funciona la realidad aumentada, y sabes una forma de hacerla con ARToolkit. Asi que si lo que necesitas es crear una aplicación de escritorio, ya tienes la herramienta. Si necesitas otro tipo de aplicaciones, sólo tienes que buscar en internet y muy probablemente encuentres lo que quieres. A continuación pongo algunas herramientas que pueden serviros de ayuda para el caso de realidad aumentada en dispositivos móviles.

Realidad aumentada en dispositivos móviles

Este es uno de los ámbitos de investigación más efervescentes en los últimosRealidad aumentada en el iphone mediante vision artificial años. Una de las primeras librerías que lo permitían era ARToolkitPlus. Se trata de una mejora (no un port) de ARToolkit, que no está relacionado con los creadores de ARToolkit. Esta librería es muy “cruda” y está orientada a desarrolladores con muchos conocimientos de C++; y lo bueno que tiene es que es gratuita.

Los desarrolladores de ARToolkitPlus han mejorado su librería para móviles y han creado una versión más amigable, más completa y más rápida: Studierstube Tracker.

Las dos librerías mencionadas anteriormente están orientadas a dispositivos basados en Windows Mobile, Windows CE o Linux. Pero en la actualidad los móviles se basan en otras plataformas. Para este caso, existe otra nueva librería cuyo nombre es NyARToolkit. Desarrollada en Japón, es un port de ARToolkit para poder ejecutarla en varias plataformas (móviles y no móviles). Por ejemplo, para sistemas móviles existe la versión para Adroid (Java) y la versión para .NET Compact Framework (C#).

Para finalizar con este post, y a modo de Easter egg no oculto, os comento que NyARToolkit también puede ser utilizado en Java (para aplicaciones de escritorio) y Action Script (para aplicaciones Flash bajo el nombre de FLARToolKit ). Si quereis para iPhone, sólo tenéis que buscar en internet y encontraréis ;-)

Posteado por: Sergio Rodriguez Vaamonde | Diciembre 11, 2008

Realidad aumentada en dispositivos móviles

Ahora que me encuentro en Lisboa, descansando de la conferencia CIAWI 2008 es hora de escribir sobre el proyecto de fin de carrera que he realizado durante el último año. Este trata sobre realidad aumentada (Augmented Reality – AR) y más exáctamente centrada en los dispositivos móviles (teléfonos/celulares móviles, PDA, Smartphone, iPhone, …) en los que previamente existe una pantalla y una cámara (sin necesidad de usar sistemas como HMD).

Primeros pasos

La idea del proyecto es permitir que cualquiera de estos dispositivos pueda ejecutar software de realidad aumentada. Para ello la primera premisa es que el proyecto esté desarrollado en Java (J2ME) de tal forma que llegue a la mayor cantidad de dispositivos posibles. Esto supone un gran inconveniente: en la actualidad no existe ningún sistema de realidad aumentada en J2ME. Así que por ahí es por donde empecé.

El primer paso que dí fué analizar los diferentes sistemas de AR existentes en la actualidad y mi primera intención fué portar el famoso ARToolkit a J2ME. Tras realizar una gran análisis y portar parte de los algoritmos de visión artificial, me di cuenta que existía una parte (relacionada con el posicionamiento del marcador) que requería del uso de matrices. Esto suponía un gasto computacional muy grande para el microprocesador de los teléfonos móviles. así que decidí crear un nuevo algoritmo de posicionamiento, manteniendo la parte de visión artificial que había portado de ARToolkit.

Y así nació el proyecto que desarrollé, que básicamente es una librería en J2ME para el posicionamiento de marcadores circulares.

El proyecto

Como ya sabeis un sistema de realidad aumentada se compone de 3 partes:

  • Algoritmos de preprocesamiento de imagen y extracción del marcador en 2D
  • Algoritmos de posicionamiento de la cámara con respecto del marcador
  • Sistema de renderizado 3D

Como ya he dicho anteriormente, este proyecto es una librería que engloba las dos primeras partes, mientras que la tercera nos la proporciona el API M3G (Mobile 3D Graphics). Aqui no voy a explicar el algoritmo utilizado (ya que tardaría mucho tiempo) pero si alguien está interesado en la explicación matemática del sistema que he utilizado o en el código que he creado, no dudeis en contactar conmigo en sergio.rodriguez.vaamonde/\@/\gmail.com (ya sabeis, sin las barras /\ ;-) ), y en cuanto tenga tiempo os puedo comentar alguna cosa.

También es cierto que la librería creada funciona sin ningún problema en J2SE, ya que se usan tipos de datos primitivos y algoritmos poco específicos de J2ME. Realmente lo más específico es la captura de imágenes (con MMAPI) y la generación de los elementos 3D (con M3G), pero para ello existen soluciones java de escritorio (J2SE), como son Java Media Framework (JMF) y Java 3D. Como prueba de concepto también he utilizado ambos junto a mis librerías para desarrollar una aplicación de realidad aumentada para el escritorio y ha funcionado de forma excelente.

Conclusiones

Tras la realización del proyecto he comprobado que las máquinas virtuales de Java para los dispositivos móviles no son lentas, y el algoritmo de posicionamiento creado es lo suficientemente rápido como para usarlo en tiempo real. Si bien existe un problema: la captura de las imágenes. Ésta se hace mediante el MMAPI que proporcionan los fabricantes, y es EXTREMADAMENTE lento (suele tardar 1 segundo en realizar una captura). Esto hace que la solución más fácil (y futuros proyectos) sea portar todo el código de Java a C/C++ para que funcione sobre Symbian o Windows Mobile (de tal forma que las imágenes se capturen mucho más rápido).

Editado: Ya teneis más información sobre cómo empezar a desarrollar realidad aumentada en este otro post.

Posteado por: Sergio Rodriguez Vaamonde | Septiembre 9, 2008

Redes neuronales: ¿El Perceptron aleatorio?

Todos conocemos el famoso Perceptron: esa red neuronal tan básica que no da solución al problema de la XOR. En principio esto es una característica muy importante y es en la que la gente se para a pensar. Pero existe otra igual de importante y es la que he estado explotando hace algunas semanas.

Si la red neuronal es enseñada adecuadamente, para un espacio de 2 dimensiones, el Perceptron es capaz de diferenciar entre 2 clases de elementos separadas por una línea recta. Un caso práctico es enseñar a la red a diferenciar números positivos de números negativos. Esta prueba ha sido la que he realizado y tras varias iteraciones y enseñando números binarios de 8 bits (donde el primero de ellos era el signo), he conseguido que con sólo aprender 4 números positivos y 4 números negativos, la red sea capaz de diferenciar correctamente los 256 números que le han sido mostrados.

Esto demuestra que una red simple puede acertar siempre, pero a mi me interesa el caso contrario: cuando falla y cuando la propia red “no sabe lo que hace”. Con esta expresión me refiero a que en una de las múltiples pruebas realizadas estuve analizando el porcentaje de fallos cometidos por el Perceptrón. La sorpresa llegó cuando de los 256 números sólo había acertado el 50% de ellos. Esto quería decir que el otro 50% lo había fallado, pero lo más interesante del asunto es que al ser justo la mitad, se podía decir que la red neuronal había “echado a cara o cruz” el tipo de número que se le presentaba.

Una moneda tiene un 50% de posibilidades de salir cara y otro 50% de salir cruz, y la red neuronal había generado ese mismo resultado: 50% acierto y 50% fallo. La pregunta que me surgió fue: ¿se pueden generar resultados aleatorios con algo tan determinista como una red neuronal? El resultado fue claro: NO. La cuestión de la aleatoriedad venía impuesta por el número indicado a la entrada de la red, y con ese número el Perceptrón realizaba operaciones deterministas que daban un resultado positivo o negativo. La cuestión de todo está en el propio número indicado. Si ese número es siempre el mismo, las operaciones y el resultado son el mismo y por ello no hay nada aleatorio.

Pero esta situación me plantea una investigación futura: si se consigue que los pesos de las conexiones del Perceptrón estén continuamente cambiando en función del número de entrada, y el propio número de entrada cambie en función de los pesos, podría ser posible generar un resultado aleatorio a la salida del perceptrón, ¿no?. Más específicamente, y haciendo una analogía con la electrónica, si se consigue una red neuronal inestable, y por ello con una realimentación positiva (tal y como sucede con los amplificadores operacionales), el resultado es realmente incierto aunque estemos en un sistema determinista.

Bueno, por si esto no sirve, también se puede usar un método que he encontrado por internet para generar números pseudoaleatorios:

1. Formas la semilla como un número decimal a partir del día y la hora, algo como s=0.ssmmhhddmmaaaaa (se pueden añadir valores de teclado)

2. random = parte decimal de (pi + s)^2

3. s = random

Posteado por: Sergio Rodriguez Vaamonde | Junio 8, 2008

Finalista beca AEA ING RenaultF1 Team

Tal y como indica el título soy finalista de la beca concedida por Altran Engineering Academy 2008 para trabajar en el equipo de Fórmula 1 ING RenaultF1 Team.

Renault F1

Altran Engineering Academy(AEA) es una iniciativa puesta en marcha en 2002 por parte de la consultoría tecnológica Altran, dentro de la colaboración con RenaultF1 Team como partner tecnológico. En ella, estudiantes de último curso o recién titulados compiten a nivel mundial por lograr la beca que ofrece AEA para trabajar 6 mese en la sede de I+D de RenaultF1 en Enstone (Inglaterra). El concurso mundial se divide en 9 regiones en las que todos los participantes deben presentar un proyecto innovador aplicable a la Fórmula 1. En cada región mundial se obtiene un ganador que participa en la final mundial.

Este año, al ser alumno de último curso, he tenido la posibilidad de participar en la región 3 (España) y el pasado 26 de Mayo me comunicaron que era uno de los 5 finalistas de toda la región. La final se desarrolló en la sede central de Altran en Madrid el pasado dia 3 de Junio, pero no pude ganar ya que los otros 4 proyectos presentados eran de un gran nivel tecnológico.

Dos de los proyectos trataban sobre aerodinámica (y como no, estaban desarrollados por dos Ingenieros Aeronáuticos con la carrera finalizada). Ambos eran muy interesantes, pues uno trataba de dar un mayor empuje al coche mediante una modificación en ele alerón trasero mientras que el otro eliminaba fricciones aerodinámicas mejorando el flujo hacia dicho alerón. Otro de los proyectos era, a mi modo de ver, muy interesante. Lo había realizado un estudiante de último curso de Ingeniería Industrial, y trataba sobre una mejora en el motor que aumentaba la potencia y disminuía el consumo. El último de los proyectos fue desarrollado por el Ingeniero Industrial Alejandro Ojeda Gonzalez-Posada que fue el ganador de la final española. El título de su proyecto era “Base bleed system using the engine’s exhaust gases“, y básicamente hacia “algo” con los gases del motor de tal forma que mejoraba el flujo aerodinámico del alerón trasero a la vez que mejoraba la potencia del motor.

Antes de la final estuve hablando bastante tiempo con Alejandro Ojeda y tengo que decir que es una persona muy agradable y que se merecía ganar la final. En el año 2007 le concedieron la beca Cajastur-Fernando Alonso para realizar los estudios de postgrado en las especialidades de “MSc Motorsports Engineering” y “MSc Racing Engine Design” en la prestigiosa Oxford Brookes University de Gran Bretaña. Por ello, estoy seguro de que el jurado tenía razón cuando dijeron: “Es la persona más completa y con más conocimiento sobre lo que nos interesa”. Supongo que también se referían al nivel de inglés (la defensa del proyecto eran 20 minutos en inglés y 10 minutos de preguntas) ya que si ha estado todo el año pasado en Inglaterra dominaría bastante el inglés técnico. De nuevo, tengo que decir que este joven canario de 26 años, se merecía el premio y espero que gane también en la final mundial que se celebrará el 30 de Junio de 2008.

En cuanto al proyecto que llevé a la final, no era más que un software. Se trataba de un sistema de visión artificial junto con un módulo de inteligencia artificial que ayudaban en las estrategias del equipo.

Finalmente, tengo que decir la final fue una experiencia única. Estar rodeado de gente con tanto conocimiento y con unos proyectos tan impresionantes me dejó anonadado. Permitidme poner las palabras que el ganador dijo y que están publicadas en la web de AEA:

The Spanish Final has been a real challenge. The ideas presented were outstanding and all the candidates showed an extremely high level of engineering knowledge.

El jurado también poseía unos conocimientos excepcionales. Ingenieros aeronáuticos, Ingenieros de Precisión,… y entre ellos estaba Isaac Prada ganador en 2005 de la final mundial de AEA y actualmente ingeniero del equipo RenaultF1 en el que ha participado en el desarrollo del R28.

Por todo ello debo decir de nuevo que ha sido una experiencia estupenda que me ha dejado muy buen sabor de boca; le mando muchos saludos a Alejandro y espero que gane la final mundial. Por cierto, para el que esté interesado aqui dejo los títulos de los otros proyectos que están en la final mundial de la Altran Enineering Academy 2008:

-Integrated heat exchanger in the rear wing

-Camber optimization

-An embedded acquisition system for remote monitoring

-Preventive maintenance from a vibratory method

Modificado:

A continuación muestro 3 fotos significativas de la final:

Sergio defendiendo su proyecto

Mi defensa del proyecto frente al jurado

Los 5 finalistas escuchando la decisión del jurado

Los 5 finalistas escuchando la decisión del jurado

Entrega de diplomas y obsequios de la mano del Director General

Entrega de diplomas y obsequios de la mano del Director General

Posteado por: Sergio Rodriguez Vaamonde | Abril 22, 2008

Multimedia Home Platform ( Capítulo 1)

En unos pocos capítulos voy a intentar dar una visión general de la tecnología MHP. En este primer post me voy a centrar en introducir la tecnología sin meterme mucho en las tripas del estándar.

MHP es un sistema de televisión interactiva estandarizado por el Digital Video Broadcasting Group (DVB). Con televisión interactiva me refiero a un sistema mediante el cuál el telespectador puede interactuar tanto con el televisor como con el programa de televisión que se está viendo. Por ejemplo, si estamos viendo un concurso de preguntas, los telespectadores pueden responder dichas preguntas desde su casa utilizando el mando a distancia.

¿Y cómo funciona este sistema? Muy simple. En cada hogar se debe disponer de un Set-Top Box (STB) que soporte MHP (tendrá una pegatina en la parte frontal indicándolo). ¿Y qué es eso del STB? Un STB es el ya famoso decodificador de televisión digital. Puede ser tanto de televisión digital terrestre (TDT / DVB-T), de televisión digital por cable (DVB-C) como por satélite (DVB-S). Incluso en la actualidad se está hablando de soportar esta tecnología en el nuevo estándar de televisión digital para dispositivos móviles (DVB-H).

Mediante el uso de la tecnología especificada en MHP este decodificador es capaz de descargarse software y ejecutarlo. Dicho software puede ser descargado vía el canal de difusión (es decir, junto con las imágenes de televisión) o mediante un canal de retorno (es decir, utilizando una conexión a internet). Como se puede vislumbrar el canal de retorno no tiene porque existir en todas las casas (una gran parte de la población tiene conexión a internet, pero otra gran parte no). Por ello sigue siendo posible la obtención del software mediante el canal de difusión.

Una vez el software ha sido descargado, es ejecutado en el decodificador y el usuario puede interactuar con el: puede ver videos, noticias, imágenes, música, … Como elemento añadido, dicho software puede hacer uso de la conexión a internet (si existe) para obtener muchos más recursos, asi como para extraer hacia el exterior (por ejemplo a un servidor) información que haya introducido el usuario. De esta forma se consigue que el usuario pueda interactuar con el mundo desde su propia televisión. Esto es la televisión interactiva (Interactive TV – iTV) y esto es MHP.

Como se ha visto, la interactividad abre muchas posibilidades, permitiendo aplicaciones del tipo “banca a distancia”, “administración a distancia”, … En sucesivos post explicaré de forma más profunda cómo funciona la tecnología MHP. Como adelanto, se verán que el software definido por MHP se programa en Java (DVB-J), se verá cómo se usan las tramas MPEG-2 para la transmisión del software a través del canal de difusión, …

También se hablará de la relación de MHP con otra nueva tecnología: Blu-Ray. Los discos BD son capaces de tener software embebido, de tal forma que los lectores de BD (como por ejemplo la PlayStation 3 – PS3), podrán ejecutarlo en cualquier punto del video (creando asi una plataforma idónea para la publicidad interactiva). La tecnología que permite esto es GEM (Globally Executable MHP), que como se puede deducir es igual que MHP (pero con algunas limitaciones que ya se verán).

Si necesitais más información antes de que publique los siguientes capítulos, aqui teneis algunos links interesantes:

Pagina principal de MHP: http://www.mhp.org/

MHP en la wikipedia: http://en.wikipedia.org/wiki/Multimedia_Home_Platform

Todo referente a la televisińo digital (página muy antigua, pero sirve): http://www.interactivetvweb.org/

Posteado por: Sergio Rodriguez Vaamonde | Marzo 18, 2008

Proyectos que me gustaria que me tuviesen ocupado

A diferencia del último post, en este hablaré un poco sobre algunas ideas que me gustaría llevar a cabo en cuanto tenga tiempo.

Una de ellas son las Redes Neuronales Artificiales. La inteligencia artificial es un campo en el que siempre me ha interesado meterme, pero por falta de tiempo y conocimientos no he podido hacer nada. Ahora que ya sé algo más sobre las redes neuronales me gustaría crer una aplicación que aprendiese algo. Una idea que se me ha ocurrido (y relacionada con otro tema muy interesante, que es la realidad aumentada) sería la creación de una red neuronal que aprenda cómo es una marcador desde diferentes puntos de vista, y saque alguna conclusión. Con estas conclusiones que se obtengan, las podría implementar en una aplicación de realidad aumentada de tal forma que dependiendo del tipo de marcador que estemos detectando, genere un elemento virtual y otro. Este sistema es totalmente diferente al que usan otras aplicaciones (como por ejemplo ARToolkit) en las cuales se introducen unos parámetros del marcador. Yo lo que me refiero es que el propio programa aprenda a diferenciarlos sin que yo le diga cómo son.

Otro campo interesante es el reconocimiento facial. Buscando algoritmos de procesado de imágenes para móviles, encontré la librería jjil, que además de estos algoritmos posee otro para el reconocimiento facial. Aún tengo que probarlo, pero según su autor con una aplicación de móvil podré reconocer a la gente. Una aplicación diferente que se me ha ocurrido para mi proyecto de fin de carrera (que trata sobre realidad aumentada en entornos móviles) es la utilización de algoritmos de reconocimeinto facial, para el reconocimiento de marcadores. La finalidad es la misma que con una red neuronal: tener diferentes marcadores y generar diferentes objetos virtuales. Pero esta vez la forma de detectar los marcadores es diferente.

Y finalmente, como no, un aspecto relacionado con todo ello es la visión artifical. Este aspecto tiene muchos campo de aplicación: biomedicina, industria, … y por supuesto está intimamente ligado al procesamiento de las imágenes.  Pero lo más interesante es la creación de algoritmos simples y rápidos que permitan a un pequeño procesador (como por ejemplo el de un telefono móvil) trbajar con ellos. Aqui se ve la filosofía que siempre sigo: “Keep it simple”

Posteado por: Sergio Rodriguez Vaamonde | Marzo 18, 2008

Proyectos que me tienen ocupado

Actualmente estoy muy ocupado con el desarrollo de aplicaciones Java que se puedan ejecutar en sintonizadores de televisión digital (Set-top box) dentro del Grupo de Investigación Multimedia del Departamento de Electrónica y Telecomunicaciones de la Universidad del Pais Vasco (UPV-EHU). Para ello he aprendiendo a utilizar el estándar Multimedia Home Platform (MHP) creado por el organismo internacional DVB. En este sistema trabajo con JavaTV asi como con Java Media Framework (que recordemos que es la parte de Java que nos permite trabajar con contenidos multimedia), asi como con otras APIs creadas para MHP.

Por otra parte también estoy elaborando el proyecto de fin de carrera. Éste tratará sobre un sistema de Realidad Aumentada en entornos móviles, principalmente enfocado a teléfonos móviles con Java (J2ME). Para ello he creado un algoritmo de detección de la posición del teléfono móvil con respecto de un marcador. Éste algoritmo (del que hablaré en futuros posts) es muy ligero en comparación con otros utilizados en realidad aumentada (como por ejemplo el famoso ARToolkit), ya que los dispositivos móviles están muy limitados en cuanto a prestaciones. Actualmente trabajo en el estudio y optimización de un algoritmo de procesado de imágenes, de tal forma que sea mucho más rápido que el que poseo actualmente. De esta forma estoy intentando crear una realidad aumentada en tiempo real, que nos permita ver en todo momento la realidad y los elementos virtuales. Además de esto también voy a comenzar con un curso de Java3D para teléfonos móviles ( Mobile 3D Graphics API – M3G ) para que los elementos virtuales que se creen en la aplicación sean objetos 3D.

El último de los grandes proyectos en el que estoy involucrado es la Formula Student. Esto es una competición a nivel mundial en la que diferentes equipos de estudiantes universitarios crean un vehículo de competición y compiten entre ellos. Éste año es el primero en el que la Universidad del Pais Vasco (más exactamente competimos la Escuela Superior de Ingeniería de Bilbao, con el equipo Formula Student Bilbao compite (a nivel estatal sólamente compite la Politécnica de Madrid y la Politécnica de Catalunya) y yo pertenezco al Grupo de Electrónica y Telecomunicaciones. En él hemos proyectado un sistema de sensores que den información de todo lo que sucede en el vehículo, unidos mediante un bus con una centralita que será la encargada de preparar la información y enviarla via radio hasta el box. En él dispondremos de un ordenador con un programa de visualización de la telemetría que llega desde el formula. El problema que tenemos es el de siempre: DINERO. Como el equipo no tiene suficiente dinero, se han priorizado las cosas y todo el sistema de telemetría como no es imprescindible (ya que el coche puede funcionar sin él), no tiene presupuesto para su realización. De todas formas como yo soy el encargado de crear el software de telemetría lo construiré para que en cuanto tengamos presupuesto nos pongamos a diseñar todo el sistema de sensores y programación de los microcontroladores que utilicemos.

Estos son básicamente los 3 proyectos que consumen todo mi tiempo. Poco a poco iré desgranando algo más sobre cada uno de ellos.

Actualizado: Ya está disponible la información sobre el proyecto de fin de carrera en el post de Realidad Aumentada en Dispositivos Móviles

Posteado por: Sergio Rodriguez Vaamonde | Marzo 18, 2008

Bienvenidos

Este blog ha sido creado para mostrar en qué proyectos trabajo, asi como para promover ideas que se conviertan algún día en verdaderos proyectos de ingeniería.

Poco a poco iré hablando sobre los proyectos en los que estoy involucrado, asi como también subiré mi curriculum vitae.

Categorías