martes, 10 de julio de 2012

Realidad Aumentada


Proyecto de realidad aumentada


En la actualidad, dentro de las tecnologías emergentes, se comienza gestar un campo muy interesante y con muchas posibilidades, se trata justamente de la “realidad aumentada” la cual transforma la realidad modificándola atreves de elementos virtuales para crear una realidad mixta en tiempo real.

Una de las formas mas habituales para crear la realidad aumentada, es por medio de una cámara Web donde tomamos las imágenes del entorno real, el computador procesara estas imágenes buscando ciertos patrones y superponiendo en ellos formas tridimensionales, trazos o figuras, con esto la computadora devolverá al usuario la imagen procesada como si fuera un espejo, pero incluirá los nuevos objetos generados por medio de la realidad aumentada.

Para generar esta realidad aumentada, será necesario contar con, un diseño de patrón el cual nos ayudara a posicionar nuestros objetos virtuales, librerías y software existentes para poder procesar la información.

Introducción

La realidad aumentada se esta volviendo de gran interés para distintos medios, ya que se esta comenzando a ampliar el conocimiento sobre la misma, con ello se generan muchos proyectos en desarrollo y otros que ya están en el sistema, esto la vuelve una tecnología relativamente nueva,            hay que tener en cuenta que existe una diferencia entre realidad aumentada y realidad virtual, entendiendo como realidad aumentada la que mezcla la realidad y a esta le añade lo virtual, a diferencia de la realidad virtual que se aísla completamente de la realidad y llevando al usuario a un espacio puramente virtual.

Entonces se puede definir a la realidad aumentada como el entorno real mezclado con lo virtual. La realidad aumentada puede ser usada en diferentes dispositivos, desde computadoras hasta dispositivos móviles o de entretenimiento buscando cada una distintos fines.

Hoy en dia la realidad aumentada (AR – Augmented Reality), esta siendo perfeccionada por diversos grupos de investigación alrededor del mundo, conectándola con nuevas tecnologías como el seguimiento de la posición del usuario, visualización de información en tiempo real, generación de imágenes y reenderezado de gráficos, entre otros, con todo esto se busca llevar al usuario a una mayor experiencia de la realidad aumentada.


Componentes de la realidad aumentada

Monitor: ya sea de computador, o del dispositivo que procese la información, este sera indispensable para poder reflejar la información que llevara consigo la realidad mezclada con la información virtual que deseemos.

Cámara Web: este dispositivo será el que nos entregara la información en tiempo real de lo que ocurre en el espacio que se encuentra el usuario, con ello podremos entregar esta información al software que procesara la realidad aumentada.
Para poder ver la imagen de la cámara en el software, que en este caso será processing, necesitaremos un programa adicional, este es “WinVDIG” que nos dará la posibilidad de trabajar con el video de la cámara Web.


Software: programa que se encargara de procesar todos los datos de entrada, que en este caso vienen de la cámara Web, para poder llevarlos al dispositivo de salida que será nuestro monitor. Nosotros en este caso utilizaremos el programa “processing” junto a las librerías “Nyartoolkit” y “MRI3DS”

Processing: es un software que trabaja sobre el lenguaje de programación java y esta pensado para el desarrollo de programas y proyectos multimediales interactivos.




Nyartoolkit: es una librería preparada para processing y que esta pensada para el desarrollo de proyectos con realidad aumentada, al ser una librería, esta se tendrá que copiar en la carpeta “libraries” de processing como toda librería externa. 




MRI3DS: es una librería para processing la cual nos permite exportar los diseños 3D creados 3DsMax directamente a processing.





Patrones: los patrones son símbolos que serán interpretados por nuestro software para poder detectar la posición actual en el mundo real y así poder colocar los objetos virtuales en ese mismo lugar. Los patrones estarán digitalizados, cargados en la carpeta “data” del proyecto de processing que estemos usando.

Para poder hacer un patrón propio podemos usar una versión online que nos entregara el archivo necesario para usar el diseño como patrón.




después de obtener el patrón .patt, este lo copiamos y lo pegamos en la carpeta del proyecto de prueba “data”, para no tener conflictos con el código de prueba modificamos el nombre a “patt.hiro” este lo remplazamos para que nos detecte el patrón nuevo.



Aplicación y pruebas


Para comenzar a hacer uso de la realidad aumentada comenzaremos con el archivo “test” que esta en la carpeta de la librería “Nyartoolkit” para processing.
Dentro de esa carpeta iremos a “SingleARTKMarkerTest” que se encuentra el sketch de processing, si al ejecutar el programa nos detecta la cámara ya podemos continuar.

Para hacer una prueba directamente con processing y utilizarlo como guía usaremos el siguiente código como base para futuras pruebas.

Copiaremos es sketch de la carpeta “SingleARTKMarkerTest” y modificaremos su sketch, colocando:


import processing.video.*;

import jp.nyatla.nyar4psg.*;

import processing.opengl.*;

import javax.media.opengl.*;

Capture cam;

NyARBoard mark1;

/************************************************************/

void setup() {

size(640,480,OPENGL);

colorMode(RGB, 100);

cam=new Capture(this,width,height);

mark1=new NyARBoard(this,width,height, "camera_para.dat", "patt.hiro", 80);

mark1.gsThreshold=120;

mark1.cfThreshold=0.4;
}

/********************************************************************************************/

void draw() {

if (cam.available() !=true) {

return;

}

cam.read();

hint(DISABLE_DEPTH_TEST);

image(cam,0,0);

hint(ENABLE_DEPTH_TEST);

if(mark1.detect(cam)){

PGraphicsOpenGL pgl = (PGraphicsOpenGL) g;

mark1.beginTransform(pgl);

//TRABAJAR AQUI//

fill(250,0,0);
rect(-25,-25,50,50);


mark1.endTransform();

}

}




Con este código se puede comenzar a utilizar la realidad aumentada para poder ver imágenes 2D o para ver figuras 3D hechas en processing, todo lo que se coloque entre los códigos “mark1.beginTransform(pgl);” y “mark1.endTransform();” será lo que se superpondrá sobre el patrón y tendrá la posición, ángulo y rotación del mismo.

Ahora bien para poder integrar diseños 3D hechos con 3dsMax es necesario el uso de la librería “MRI3DS” para poder exportar los archivos con extensión .3ds a processing y poder mostrarlos donde iría el patrón.

Para empezar exportamos desde 3dsMax un objeto con extensión .3ds, luego este archivo lo copiamos y lo pegamos en la carpeta “data” del sketch de prueba, si el objeto contiene texturas también debemos pegarlas en la misma carpeta, así en processing podremos cargar las texturas del objeto.


El codigo base que usaremos para cargar el objeto 3ds sera:

//libreria para 3d
import mri.*;
import processing.video.*;
import jp.nyatla.nyar4psg.*;
import processing.opengl.*;
import javax.media.opengl.*;


Capture cam;
V3dsScene vscene;
NyARBoard mark1;

/************************************************************/

void setup() {

size(640,480,OPENGL);

colorMode(RGB, 100);

cam=new Capture(this,width,height);

mark1=new NyARBoard(this,width,height, "camera_para.dat", "patt.hiro", 80);

mark1.gsThreshold=120;

mark1.cfThreshold=0.4;

//libreria de 3d
try
{
vscene = new V3dsScene(this,"piezaAjedrez.3ds");//carga el archivo 3ds
vscene.useMaterial( true );//habilita las texturas

} catch( Exception e )
{
println( e );
System.exit( 0 );
}
//fin de libreria 3d

}

/********************************************************************************************/

void draw() {

if (cam.available() !=true) {
  return;
}
cam.read();


hint(DISABLE_DEPTH_TEST);
image(cam,0,0);
hint(ENABLE_DEPTH_TEST);


  if(mark1.detect(cam)){
 
    PGraphicsOpenGL pgl = (PGraphicsOpenGL) g;
    mark1.beginTransform(pgl);
   
    //TRABAJAR AQUI//
    
    /*
    //imagen plana 
    fill(250,0,0);
    rect(-25,-25,50,50);*/
   
    /*
    //cubo 3d procesing
    translate(0,0,30); // trasladar(X,Y,Z)
    rotateY(0);
    box(40);//box(width/ancho, height/alto, depth/profundidad) o box(size/tamaño)
    */   
   
   
   //objeto 3d exportado
    scale(2);
    rotateX(-1.5);//posiciona el objeto en vertical
    rotateY(0);
    rotateZ(-0);  
    vscene.draw();
  
  
    mark1.endTransform();
 
  }

}


En este código tenemos 3 opciones de cargar imágenes para superponerlos en la posición del patrón, el primero es una figura 2D hecha desde processing, el segundo es una figura 3D hecha desde processing y por ultimo esta la figura 3D hecha en 3DsMax y exportada por medio de la librería “MRI3DS”, en los 2 últimos agregamos “rotateX”, “rotateY” y “rotateZ” para poder ajustar nuestro 3d al patrón.




Por medio de estos 2 codigos ya podemos comenzar a hacer pruebas para realizar proyectos que utilicen la realidad aumentada como medio.


Aplicaciones actuales


Publicidad: la realidad aumentada tiene un gran potencial para hacer publicidad ya que se integra directamente en la vida real del usuario, así podemos llegar a crear tarjetas de presentación con videos incorporados que los pueden ver a través de un sitio Web, o hacer aplicaciones que permitan probar productos que estén digitalizados en 3d y por medio de la realidad aumentada el usuario puede hacer uso de estos objetos.

Apoyo en tareas complejas: Las tareas complejas como montaje, mantenimiento y la cirugía puede ser simplificado mediante la inserción de información adicional en el campo de visión. Por ejemplo, las etiquetas se pueden mostrar en las partes de un sistema para aclarar las instrucciones de funcionamiento de un mecánico que está realizando el mantenimiento de un sistema.

Dispositivos de navegación: se puede aumentar la eficacia de los dispositivos de navegación por medio de la realidad aumentada, entregando información adicional al usuario en tiempo y espacio que lo rodea.

Militares y servicios de emergencia: la realidad aumentada se puede aplicar a servicios de emergencia y militares apoyados en dispositivos portatiles los cuales entregarian al usuario información, como instrucciones, mapas, lugares especificos resaltados en tiempo real, etc.

Arte: la realidad aumentada se puede utilizar en aplicaciones artisticas, que permitan a los artistas crear en tiempo real arte sobre la realidad, como ser, pinturas, dibujos, modelados, espacios nuevos, sensaciones adaptadas según el espacio que se encuentre el usuario, etc.

Arquitectura: la realidad aumentada puede ser usada para simular proyectos de construcción y poder ser presentados en un espacio real con una maqueta virtual.






Conclusión


Luego de investigar el funcionamiento y el uso que se le puede dar a la realidad aumentada, podemos ver que esta tecnología nos da una combinación muy efectiva entre la realidad y lo virtual,  con ella podemos generar múltiples medios de comunicación y acceso a la información de una manera mas eficaz y en tiempo real, según como avanza la tecnología se vuelve cada vez mas accesible esta forma de interacción con el usuario, pudiendo integrar la información externa a nuestro mundo real, simplificando y mejorando el estado de vida.