Realidad Aumentada:

ARToolkit para animación de personajes



1.Realidad Aumentada:

1.1 ¿Qué es?

La realidad aumentada, consiste en la superposición de objetos o imágenes virtuales, sobre las imágenes del mundo real. Supone una inmersión, por parte del usuario, en un mundo que resulta de la “unión” entre el mundo real y el mundo virtual, ya que el usuario de este tipo de aplicaciónes, podrá ver (a traves de una cámara, o de dispositivos especiales de visión) objetos generados por ordenador que se integran en el mundo real.




1.2 Realidad Aumentada VS Realidad Virtual:

La realidad virtual pretende la inmersión del usuario en un mundo totalmente virtual, donde todo aquello que percibe ha sido generado por ordenador. El usuario se encuentra en un mundo distinto, aislado del mundo real, rodeado de objetos virtuales que no existen en la realidad, pero puede interactuar con ellos como si de verdad existieran.

En cambio, la realidad aumentada no pretende aislar al usuario del mundo real, sino complementar éste mediante objetos virtuales e imágenes generadas por ordenador. El usuario se encuentra inmerso en un mundo que tiene a la vez elementos virtuales y elementos reales con los que puede interactuar.

2. ARToolKit

2.1 ¿Qué es?

ArToolKit es un conjunto de librerias para C/C++ que sirven para la creación de aplicaciones de realidad aumentada. Para ello proporciona una serie de funciones para la captura de video y para la búsqueda de ciertos patrones ,en las imágenes capturadas, mediante técnicas de visión por computador. También proporciona una serie de ejemplos y utilidades de gran ayuda al programador que quiera realizar este tipo de aplicaciones.

2.2 ¿Cómo funciona?

Algo muy importante en las aplicaciones de realidad aumentada, es la necesidad de calcular el punto de vista de la cámara, para así poder realizar las operaciones necesarias sobre los objetos virtuales, para que estos se integren correctamente en el mundo real. Es decir, si queremos mostrar objetos virtuales, de modo que el usuario realmente se crea que existen en el mundo real, tendremos que realizar transformaciones sobre esos objetos de modo que el usuario los vea (a través de la cámara o dispositivo de captura utilzado) en la posición, tamaño, orientación e iluminación, en que esos objetos serían percibidos por el usuario en el mundo real en caso de que realmente estuvieran allí.

Para ello se utilizan unas plantillas de forma cuadrada, que se componen de un cuadrado negro con un cuadrado blanco cuatro veces más pequeño en su centro, y un dibujo sencillo en el interior del cuadrado blanco. La aplicación, utilizando las funciones y utilidades proporcionadas por ARToolKit, será capaz de detectar una de estas plantillas en las imágenes de video captutaradas.

Aquí se muestra un ejemplo de plantilla:






Una vez detectada una plantilla en una imagen, estudiando la orientación, posición y tamaño de la plantilla, la aplicación es capaz de calcular la posición y orientación relativa de la cámara respecto a la plantilla, y usando esta información podrá pasar a dibujar el objeto correspondiente sobre la imagen capturada mediante librerias externas a ARToolKit (por ejemplo glut y openGL), de modo que el objeto aparezca sobre la plantilla en la posición, orientación y tamaño correspondiente al punto de vista de la cámara, siempre que el programador de la aplicación así lo haya decidido, pues las posibilidades son muchas y pudiera ser que una vez obtenida esta información el programador decidiese utilizarla de otra forma, hacer otras operaciones distintas, etc.

El funcionamiento básico de una aplicación de ARToolkit es el siguiente:



El siguiente diagrama muestra el funcionamiento que se acaba de describir:

2.3 Instalación

2.3.1 Instalación en Windows

Software necesario:

Pasos de instalación usando Microsoft Visual Studio 6:

  1. Instalar el DirectX 9.0b SDK

  2. Descomprimir ARToolKit (version 2.70) en la carpeta ARToolkit

  3. Descomprimir DSVideoLib en ARToolKit\DSVideoLib

  4. Copiar los ficheros DSVideoLib.dll y DSVideoLibd.dll desde ARToolKit\DSVideoLib\bin.vc60 al directorio bin de ARToolkit

  5. Ejecutar el script register_filter.bat del directorio ARToolKit\DSVideoLib\bin.vc60

  6. Descomprimir e instalar las librerías GLUT, para ello, se situarán (manualmente) los ficheros *.h y *.lib en los directorios ARToolKit\include\GL y ARToolKit\lib, respectivamente. Los ficheros *.dll se colocan o bien en el directorio system32 de windows o en el directorio en que van a estar los ejecutables (directorio ARToolKit\bin).

  7. Ejecutar ARToolKit\Configure.win32.bat con lo que se creará el fichero ARToolKit\include\AR\config.h

  8. Descomprimir en el directorio dx9sdkcp el fichero con los extras del directX 9 SDK para C++ (dx9sdkcp.exe) y copiar el directorio

    dx9sdkcp\SDK (c++)\include a ARToolKit\directX\

  9. Copiar el directorio dx9sdkcp\SDK (C++)\Samples\C++\DirectShow\BaseClasses a ARToolKit\directX\ (una vez se haya copiado este directorio,

    y el directorio dx9sdkcp\SDK (c++)\include del punto anterior, si se desea puede borrarse el directorio dx9sdkcp ya que no lo necesitaremos más).

  10. Abrir el proyecto de VS6 (fichero .dsw) con microsoft visual studio

  11. Configurar los directorios include y lib en el microsoft visual studio (Menu Tools --> Options):

    Include:

    Lib:

  12. Compilar y construir las clases del proyecto: Si todo ha ido bien, se habrán generado los ficheros de ejemplo en el directorio ARToolKit\bin

Nota: En caso de tener tarjeta de TV, puede ser necesario desinstalarla o deshabilitarla, ya que sino al ejecutar los ejecutables podría aparecer la señal de TV en lugar de la de la camara.

2.3.2 Instalación en Linux





2.4 Ejemplos

ARToolKit 2.70 viene con los siguientes ejemplos:

calib_camera2d: Sirve para medir la distancia focal de la cámara y otros parámetros.

calib_cparamd: Sirve para medir las propiedades de la cámara.

calib_Distorsiond: Para medir la distorsion de la cámara.

collideTestd: Detecta colisiones entre plantillas. Marca las plantillas detectadas con líneas rojas y cuando están a cierta distancia una de otra, las marca en verde.




exviewd: Calcula y muestra la posición de la cámara a partir de la plantilla “Hiro”. Presionando 'd' muestra en una esquina al imagen umbralizada. Presionando 't' deja ajustar el valor del umbral.




graphicsTestd: Simplemente muestra una tetera girando para hacer una prueba de los gráficos.

loadMultipled: Reconoce las plantillas “Hiro” y el kanji “Hito”, y dibuja una esfera sobre la primera y un cubo sobre la segunda. Presionando 'd' muestra en una esquina la imagen umbralizada y con 't' permite ajustar el valor del umbral.




mkpattd: Sirve para crear nuevas plantillas a partir de una imagen de la plantilla capturada por la cámara. Presionando 't' se puede ajustar umbral.

modeTestd: Dibuja un cubo sobre la plantilla “Hiro”, un toroide sobre el kanji “Hito”, un cono sobre “samppatt1”, y una esfera sobre “samppatt2”. Presionando 'd' muestra en una esquina la imagen umbralizada. Y con 't' permite ajustar el valor del umbral.




multid: Muestra la señal de video de la cámara. Presionando 'd' muestra en una venana grande la imagen umbralizada y con 't' deja ajustar el valor del umbral. Si encuentra alguna de las plantillas, las marca en rojo sobre la imagen umbralizada.




opticald: Sirve para calibrar dispositivos de visión. Dibuja un cubo sobre “hiro”, un toroide sobre el kanji "Hito", un cono sobre “samppatt1”, y una esfera sobre “samppatt2”. Presionando 'd' muestra en una esquina la imagen umbralizada. Con 't' deja ajustar el valor del umbral

paddleInteraction: Dibuja una raqueta de paddle sobre “hiro”. Presionando 'd' muestra en una esquina la imagen umbralizada. Con 't' permite ajustar el valor del umbral utilizado.

paddleTestd: Dibuja una raqueta de paddle sobre “hiro”. Presionando 'd' muestra en una esquina la imagen umbralizada y pulsando la tecla 't' se puede ajustar el valor del umbral.




rangeTestd: Interacción entre la cámara y las plantillas. Dibuja una tetera sobre la plantilla “Hiro”, conforme la marca se acerca a la cámara el objeto aparece más pequeño.





relationTestd: Muestra un cono sobre el kanji “hito” y una esfera sobre “Hiro”, y además cuando encuentra las dos plantillas, muestra por consola una matriz 3x4 que refleja la diferencia de posición y rotación entre una plantilla y la otra.




simpleTestd: Muestra un cubo sobre la plantilla “Hiro”.




simpleTest2d: Muestra un cubo sobre la plantilla “Hiro”.




simpleLited: Muestra un cubo con una textura formada por degradados de color sobre la plantilla “Hiro”.




twoViewd: Para dispositivos con vision estereoscópica.

videoTestd: Muestra la señal de video de la cámara.