« Una de libros y comicsMacBook Air »

Realidad Aumentada

16.01.2008 | por | Categorías: Software, Movilidad

La Realidad Aumentada (Augmented Reality) es la mezcla de entornos reales y entornos generados por ordenador a diferencia de una Realidad Virtual que está completamente generada por ordenador.

Un ejemplo: vamos por la calle y la cámara de nuestra PDA va mostrando en pantalla el entorno real. Pero al llegar a un punto concreto (localizado por GPS), sobre la imagen real se muestra una animación de un caballero del siglo XVIII explicándonos que ésa fue su casa y la historia de la misma.

Hay varios proyectos en internet que hablan de Realidad Aumentada. A mí me han resultado interesantes los que se pueden ver en la página de ARToolkit. Se trata de una serie de herramientas (en C bajo licencia GPL para Windows, Linux y MacOSX) que permiten ubicar la posición de la cámara en 3D gracias al reconocimiento de imágenes. Eso permite sobreimponer objetos 3D sobre la imagen real correctamente rotados y girados. Como todo esto queda un poco lioso, os pongo un vídeo:

En dicho vídeo, lo que vemos es lo que aparece en la pantalla del ordenador: sobre la imagen real (la mesa, la tarjeta redonda con el símbolo en blanco y negro), se superpone la imagen virtual del Fokker del Barón Rojo. Hay otros vídeos donde se muestran posibles aplicaciones como jugar a Magic The Gathering superponiendo monstruos en 3D sobre las cartas, visitas guiadas por museos, etc.

ARToolkit también tiene versión para PDAs: ARToolkit Plus, aunque ha dejado de ser mantenida. Y también hay algún ejemplo por ahí de utilización de esta última librería dentro del WPF de .NET 3.0 o incluso para usarlo dentro de XNA, las librerías de desarrollo de videojuegos de Microsoft para PC y XBOX360.

Como veis, es necesario un marcador para ubicar la imagen virtual en 3D, así que el siguiente paso es eliminar la necesidad de estos marcadores y utilizar reconocimiento de imagen, como en el siguiente vídeo:

En este caso, el coche es virtual y los edificios son reales.

Por otro lado, tenemos la Realidad Aumentada más lúdica (y sencilla). El ejemplo perfecto es MScape, de HP. Se trata de una comunidad que comparte MScapes: juegos desarollados con las herramientas gratuitas que se pueden descargar de la web y que permiten utilizar posicionamiento GPS para disparar eventos (audio, vídeo, etc) en localizaciones concretas. Así por ejemplo, puedes ir por el campo y cuando llegas a cierto punto escuchas "Tienes una bomba detrás de ti, te quedan 30 segundos para encontrarla" y tienes que llegar a las coordenadas de la bomba antes de que se te acabe el tiempo. De momento no es posible usar reconocimiento de imagen, pero esperamos que algún día podamos jugar como se muestra en este vídeo promocional:

Aunque este otro vídeo más realista muestra lo que se puede hacer a día de hoy usando mScape (es un poco largo, pero merece la pena verlo por compararlo con el vídeo anterior):

Por supuesto, los creadores de estos proyectos insisten en que se juegue en lugares despejados, ya que el estar mirando todo el rato la pantalla y estar atento al sonido de los auriculares puede hacer que no prestemos atención a lo que ocurre alrededor (y acabar atropellado no es nada divertido).

Se me ocurre que podríamos juntar todo esto con los QRCodes y lectores RFID para informar y ubicar al usuario (sin necesidad de GPS) y montar ya la gymkana completa. ¿Qué os parece?

 

7 comentarios

Comentario De: Kako [Visitante]  
Kako

Soy nuevo en esto y estoy intentando correr ARToolkit en ubuntu 9.04.

Cuando hago el make, me tira este error y no se que pueda ser :

sudo make
(cd lib/SRC; make -f Makefile)
make[1]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/lib/SRC’
(cd AR; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/lib/SRC/AR’
cc -c -O -I/usr/X11R6/include -g -I../../../include mAlloc.c
ar rs ../../libAR.a mAlloc.o
rm -f mAlloc.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mFree.c
ar rs ../../libAR.a mFree.o
rm -f mFree.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mAllocDup.c
ar rs ../../libAR.a mAllocDup.o
rm -f mAllocDup.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mDup.c
ar rs ../../libAR.a mDup.o
rm -f mDup.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mAllocTrans.c
ar rs ../../libAR.a mAllocTrans.o
rm -f mAllocTrans.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mTrans.c
ar rs ../../libAR.a mTrans.o
rm -f mTrans.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mAllocMul.c
ar rs ../../libAR.a mAllocMul.o
rm -f mAllocMul.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mMul.c
ar rs ../../libAR.a mMul.o
rm -f mMul.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mAllocInv.c
ar rs ../../libAR.a mAllocInv.o
rm -f mAllocInv.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mInv.c
ar rs ../../libAR.a mInv.o
rm -f mInv.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mSelfInv.c
ar rs ../../libAR.a mSelfInv.o
rm -f mSelfInv.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mAllocUnit.c
ar rs ../../libAR.a mAllocUnit.o
rm -f mAllocUnit.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mUnit.c
ar rs ../../libAR.a mUnit.o
rm -f mUnit.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mDisp.c
ar rs ../../libAR.a mDisp.o
rm -f mDisp.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mDet.c
ar rs ../../libAR.a mDet.o
rm -f mDet.o
cc -c -O -I/usr/X11R6/include -g -I../../../include mPCA.c
ar rs ../../libAR.a mPCA.o
rm -f mPCA.o
cc -c -O -I/usr/X11R6/include -g -I../../../include vAlloc.c
ar rs ../../libAR.a vAlloc.o
rm -f vAlloc.o
cc -c -O -I/usr/X11R6/include -g -I../../../include vDisp.c
ar rs ../../libAR.a vDisp.o
rm -f vDisp.o
cc -c -O -I/usr/X11R6/include -g -I../../../include vFree.c
ar rs ../../libAR.a vFree.o
rm -f vFree.o
cc -c -O -I/usr/X11R6/include -g -I../../../include vHouse.c
ar rs ../../libAR.a vHouse.o
rm -f vHouse.o
cc -c -O -I/usr/X11R6/include -g -I../../../include vInnerP.c
ar rs ../../libAR.a vInnerP.o
rm -f vInnerP.o
cc -c -O -I/usr/X11R6/include -g -I../../../include vTridiag.c
ar rs ../../libAR.a vTridiag.o
rm -f vTridiag.o
cc -c -O -I/usr/X11R6/include -g -I../../../include paramGet.c
ar rs ../../libAR.a paramGet.o
rm -f paramGet.o
cc -c -O -I/usr/X11R6/include -g -I../../../include paramDecomp.c
ar rs ../../libAR.a paramDecomp.o
rm -f paramDecomp.o
cc -c -O -I/usr/X11R6/include -g -I../../../include paramDistortion.c
ar rs ../../libAR.a paramDistortion.o
rm -f paramDistortion.o
cc -c -O -I/usr/X11R6/include -g -I../../../include paramChangeSize.c
ar rs ../../libAR.a paramChangeSize.o
rm -f paramChangeSize.o
cc -c -O -I/usr/X11R6/include -g -I../../../include paramFile.c
ar rs ../../libAR.a paramFile.o
rm -f paramFile.o
cc -c -O -I/usr/X11R6/include -g -I../../../include paramDisp.c
ar rs ../../libAR.a paramDisp.o
rm -f paramDisp.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arDetectMarker.c
ar rs ../../libAR.a arDetectMarker.o
rm -f arDetectMarker.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arGetTransMat.c
ar rs ../../libAR.a arGetTransMat.o
rm -f arGetTransMat.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arGetTransMat2.c
ar rs ../../libAR.a arGetTransMat2.o
rm -f arGetTransMat2.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arGetTransMat3.c
ar rs ../../libAR.a arGetTransMat3.o
rm -f arGetTransMat3.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arGetTransMatCont.c
ar rs ../../libAR.a arGetTransMatCont.o
rm -f arGetTransMatCont.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arLabeling.c
ar rs ../../libAR.a arLabeling.o
rm -f arLabeling.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arDetectMarker2.c
ar rs ../../libAR.a arDetectMarker2.o
rm -f arDetectMarker2.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arGetMarkerInfo.c
ar rs ../../libAR.a arGetMarkerInfo.o
rm -f arGetMarkerInfo.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arGetCode.c
ar rs ../../libAR.a arGetCode.o
rm -f arGetCode.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arUtil.c
arUtil.c: En la función arGetVersion:
arUtil.c:46: aviso: declaración implícita incompatible de la función interna exit
ar rs ../../libAR.a arUtil.o
rm -f arUtil.o
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/lib/SRC/AR’
(cd ARMulti; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/lib/SRC/ARMulti’
cc -c -O -I/usr/X11R6/include -g -I../../../include arMultiReadConfigFile.c
ar rs ../../libARMulti.a arMultiReadConfigFile.o
rm -f arMultiReadConfigFile.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arMultiGetTransMat.c
ar rs ../../libARMulti.a arMultiGetTransMat.o
rm -f arMultiGetTransMat.o
cc -c -O -I/usr/X11R6/include -g -I../../../include arMultiActivate.c
ar rs ../../libARMulti.a arMultiActivate.o
rm -f arMultiActivate.o
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/lib/SRC/ARMulti’
(cd Gl; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/lib/SRC/Gl’
cc -c -O -I/usr/X11R6/include -g -I../../../include gsub.c
ar rs ../../libARgsub.a gsub.o
rm -f gsub.o
cc -c -O -I/usr/X11R6/include -g -I../../../include gsubUtil.c
ar rs ../../libARgsubUtil.a gsubUtil.o
rm -f gsubUtil.o
cc -c -O -I/usr/X11R6/include -g -I../../../include gsub_lite.c
gsub_lite.c: En la función arglCameraFrustum:
gsub_lite.c:659: aviso: se pasa el argumento 1 de arParamDecompMat desde un tipo de puntero incompatible
gsub_lite.c: En la función arglCameraFrustumRH:
gsub_lite.c:718: aviso: se pasa el argumento 1 de arParamDecompMat desde un tipo de puntero incompatible
ar rs ../../libARgsub_lite.a gsub_lite.o
rm -f gsub_lite.o
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/lib/SRC/Gl’
(cd VideoLinuxV4L; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/lib/SRC/VideoLinuxV4L’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/lib/SRC/VideoLinuxV4L’
make[1]: se sale del directorio `/home/kako/Escritorio/ARToolKit/lib/SRC’
(cd util; make -f Makefile)
make[1]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/util’
(cd graphicsTest; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/util/graphicsTest’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/util/graphicsTest’
(cd videoTest; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/util/videoTest’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/util/videoTest’
(cd calib_distortion; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/util/calib_distortion’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/util/calib_distortion’
(cd calib_cparam; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/util/calib_cparam’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/util/calib_cparam’
(cd mk_patt; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/util/mk_patt’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/util/mk_patt’
(cd calib_camera2; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/util/calib_camera2′
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/util/calib_camera2′
make[1]: se sale del directorio `/home/kako/Escritorio/ARToolKit/util’
(cd examples; make -f Makefile)
make[1]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples’
(cd simple; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/simple’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/simple’
(cd simple2; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/simple2′
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/simple2′
(cd range; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/range’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/range’
(cd loadMultiple; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/loadMultiple’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/loadMultiple’
(cd relation; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/relation’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/relation’
(cd collide; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/collide’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/collide’
(cd multi; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/multi’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/multi’
(cd paddle; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/paddle’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/paddle’
(cd paddleInteraction; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/paddleInteraction’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/paddleInteraction’
(cd paddleDemo; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/paddleDemo’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/paddleDemo’
(cd simpleLite; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/simpleLite’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/simpleLite’
(cd twoView; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/twoView’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/twoView’
(cd optical; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/optical’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/optical’
(cd modeTest; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/modeTest’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/modeTest’
(cd exview; make -f Makefile)
make[2]: se ingresa al directorio `/home/kako/Escritorio/ARToolKit/examples/exview’
make[2]: No se hace nada para `all’.
make[2]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples/exview’
make[1]: se sale del directorio `/home/kako/Escritorio/ARToolKit/examples’
kako@kako-laptop:~/Escritorio/ARToolKit$

Favor una manita!!!

Gracias

19.05.2009 @ 04:18
Comentario De: Advl [Visitante]  
Advl

Lamentablemente, no he probado nunca a compilarlo en Ubuntu.
Prueba a mirar en este post:
http://ubuntuforums.org/showthread.php?t=343529
Quizá te ayude…

19.05.2009 @ 07:36
Comentario De: marielaP [Visitante]  
marielaP

ES POSIBLE TRABAJAR CON ARTOOLKIT Y MOSTRAR INFORMACIÓN(TEXTO) DE UNA BASE DE DATOS EN LUGAR DE MOSTRAR UNA IMAGEN

22.10.2009 @ 07:14
Comentario De: [Miembro]
admin

Pues la verdad es que no lo he probado, pero no creo que haya problemas. Si tienes el texto como objeto 3D, se trataría igual que cualquier otro objeto. Supongo que tampoco hay problema en coger el texto como un String desde una base de datos y formar un objeto 3D a partir de él con cualquier motor 3d, como Ogre, por ejemplo.

23.10.2009 @ 10:46
Comentario De: marielap [Visitante]  
marielap

MUCHAS GRACIAS POR LA RESPUESTA TAN RAPIDA QUE ME DIERON, AHORA LA VOY A PROBAR.
ESTARE COMENTANDO SI ME FUNCIONO Y LOS FELICITO POR EL CONTENIDO DE INFORMACION QUE TIENEN EN SU PAGINA.MUY INTERRESANTE!!!

25.10.2009 @ 06:51
Comentario De: milagros [Visitante]  
milagros

hola,estoy trabajando con el tema de realidad aumentada y la libreria artoolkit en mi trabajo final y mi pregunta es similar a la de mariela.
Quisiera saber si alguien sabe si con esta libreria es posible exportar una base de datos cualquiera y relacionarla con los patrones que tenemos en artoolkit y de alli mostrar cierta informacion, como por ej: en el caso de un museo enfocar con mi camara una determinada pintura de arte, la cual ya esta cargada en un patron en mi computador y que atravez del computador al reconocer el patron me muestre informacion como ser:autor de la obra, año en que fue creada, pais de origen, etc.
si alguien me pude ayudar desde ya le agradezco.

2.12.2009 @ 07:48
Comentario De: milagros [Visitante]  
milagros

hola,estoy trabajando en trabajo final con libreria artoolkit, y quisiera saber sin con esta libreria es posible por ejemplo al enfocar con mi camara un cuadro de pintura que esta identificado con el patron hiro y que atravez de la computadora pueda ver informacion como ser:autor de la obra, tipo de obra,lugar de origen de la obra.
si alguien me puede guiar desde ya muchas gracias

2.12.2009 @ 14:17


El formulario está cargando...

Buscar

Linkedin

Ver perfil de Alberto de Vega Luna en LinkedIn

Licencia

Creative Commons License
Esta obra se publica bajo una licencia de Creative Commons. Es necesario citar la fuente y el autor si se utilizan estos contenidos.
powered by b2evolution free blog software