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.

Advertisement

Respuestas

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

  2. Flaco, estyoy comenzando con lode realidad aumentada y quiero implementar en mi aplicasion que no se detecten patrones predefinidos a blanco y negro si no que detecte partes fisicas, es eso posible.

  3. Si que es posible, pero es bastante dificil. Me explico:

    La detección de unos patrones predefinidos no es tarea fácil, pero tampoco es muy dificil. Si tu aplicación sabe el patrón a buscar, será relativamente fácil entcontrar dicha figura. Además, como conoces la geometria a priori del patrón, una vez lo detectes, y veas su deformación, podrás conocer en qué posición está la cámara con respecto a él.

    El caso de la realidad aumentada sin patrones es mucho más dificil. La aplicación no sabe exactamente qué buscar, y por tanto deberá analizar toda la imagen y extraer sus conclusiones.

    Para empezar a entender lo que necesitas te recomiendo que leas algún paper. Por ejemplo este trata sobre realizar un tracking en tiempo real de objetos, sin usar marcadores:

    http://hal.inria.fr/docs/00/35/02/85/PDF/2006_ieee_tvcg_comport.pdf

    ¡Espero que vuelvas por aquí y me cuentes que tal ha salido la aplicación!

  4. Hola Sergio estoy empezando com mi proyecto final de carrera y elegi el tema de realidad aumentada, necesitaria saber si es posible realizar una aplicación utilizando la libreria Artoolkit, que al enfocar un determinado patron muestre informacion relativa al objeto en donde está ubicado el patron (supongo que esa informaciòn estará almacenada en una base de datos), similar a lo que se muestra aqui http://enlacesdeldia.hagoclic.com/2009/11/16/los-moviles-se-apuntan-a-la-realidad-aumentada/ pero NO aplicado a celulares (que se que si es posible), si puedes pasarme sitios de donde encontrar esa información.Desde ya agredezco tu respuesta.

    • Por supuesto que se puede crear una aplicación con ARToolkit. En su página web (http://www.hitl.washington.edu/artoolkit/) tienes alguna explicación, y además cuando te lo descargas, hay código de ejemplo.

      Un saludo

  5. Hola Sergio, te comento que estoy trabajando con la libreria Artoolkit.
    Ya logre trabajar con imagenes, pero ahora me surgio una duda y espero me la puedas aclarar.
    Lo que quiero hacer es por ejemplo,que en un zoologico enfoque con la camara un determinado animal cuyo patron del mismo ya tengo cargado y lo que quiero que me muestre es informacion por ej de su peso, edad, altura, pelaje,etc.,que no se si tiene que estar cargada en alguna base de datos o algo similar.
    Vi ejemplos similares con artoolkit plus, pero como a mi me interesa trabajar solo con artoolkit, quisiera saber si es posible hacerlo.
    Desde ya muchas gracias si puedes darme una manito.

    • Hola, si que es posible hacerlo con ARToolkit, pero como comentas, necesitarás una base de datos con toda la información de los animales. Lo de ARToolkit no es más que ARToolkit pero mejorado, asi que ahi también utilizan una base de datos.

      Saludos.

  6. gracias Sergio, me diste una ayuda bastante grande, ya que era una duda que me impedia seguir realizando mi trabajo.
    Por favor si conoces algun tipo de base de datos que artoolkit me permita importar para trabajar con ella, te agradeceria que me pases el nombre.
    Yo estoy buscando algunas bases de datos, pero no se si son compatibles con artoolkit o que tipo de base de datos soporta artoolkit.
    Otra vez MUCHISIMAS GRACIAS POR RESPONDER TAN RAPIDAMENTE Y CON TANTA SEGURIDAD

    • Lo que necesitas no es una base de datos que sea compatible con ARToolkit. ARToolkit es un “toolkit” que lo usas para programar tu aplicación. Por otra parte necesitas una base de datos, para usarlo en tu programa. Así que no necesitas ninguna compatibilidad entre ellas (porque son dos herramientas que vas a usar).

      ¡Gracias a ti por haber leido el blog!

  7. SERGIO otra vez muchisimas Gracias por tu ayuda, ahora pondre en practica tus consejos y desde ya deseo que te vaya muy bien en tu blog ya que esta bastante interesante.
    SUERTE y FELICITACIONES!!

  8. [...] 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 [...]

  9. Buenas Tardes. Mira que estoy realizando mi tesis acerca de Realidad Aumentada con dispositivos móviles, para tal caso estuve investigando acerca de la libreria Studierstube ES pero no es posible descargarla, entonces decidí trabajar con NyARToolkit, además adquirí un teléfono HTC con Windows Mobile 6.
    Quiero empezar haciendo una aplicación muy sencilla pero no he entendido de todo esta librería. No se si sepas de algún tutorial para ayudar a hacer mi trabajo. Muchas Gracias Alejandra

    • Hola Alejandra. Lo primero de todo, gracias por leer el blog. Lo segundo, siento no poder ayudarte, ya que nunca he trabajado directamente con NyARToolkit. De todas formas, seguramente en internet podrás encontrar algún recurso de utilidad. Saludos

      • Hola Sergio como estas? Gracias por responderme, oye ya he entendido un poco más esta librería pero ahora necesito es ponder cargar un archivo .x.
        y no se como hacerlo en C# me podrias colaborar con eso, si tu sepas de algún tutorial es que he buscado en internet pero no encuentro nada.
        Gracias!

      • Uf… pues los archivos “.x” no sé ni de qué son. Lo único que se me ocurre es que habras un StreamReader y (sabiendo el formato de los ficheros “.x”) vayas leyendo byte a byte y recomponiendo la información.

        Saludos

  10. Hola Sergio, un saludo,

    Sigo trabajando sobre un proyecto universitario de Realidad aumentada sobre J2ME, y aun no consigo pintar objetos o imagenes sobre el video mostrado en la camara del movil, he intentado a traves del API JSR 234 creando un objeto overlay e ingresando:
    overlay.insertImage(imagenAInsertar, posicion_x, posicion_y,0), tambien intentamos a traves del draw en el canvas y aun sin exito.

    Vi que desarrollaste una libreria sobre esta plataforma, te agadeceria si pudieras guiarnos a traves de un segmento de codigo como realizar este procedimiento nos seria de mucha utilidad.

    agradezco la ayuda que nos puedas brindar y de antemano os felicito por tu trabajo

    • Hola,

      Hace mucho tiempo que desarrollé esta librería, pero creo recordar que lo hice con el API de 3D (JSR 184) para J2ME. La idea es dibujar un objeto 3D sobre un Background, el cual es una fotografía del mundo real.

      Para empezar igual te sirve esta web: http://developers.sun.com/mobility/apis/articles/3dgraphics/

      Saludos

      • disculpa, te refieres a que el background es una sola imagen? es decir no es el video en vivo tomado de la camara?

        gracias por tu respuesta!

      • En efecto, el background que yo usaba era una única imagen (con el retardo que ello introducía).

        Suerte con tu trabajo

  11. una ultima duda, donde quedaría la vista de la cámara? supuse que en realidad aumentada se buscaba pintar sobre los frames q entrega la camara en tiempo real.

    de antemano agradezco tus oportunas respuestas estaré investigando sobre el tema.


Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Categorías

Seguir

Get every new post delivered to your Inbox.