Realidad Aumentada 01 documentacion tapir

12
REALIDAD AUMENTADA PROYECTO:TAPIR AGUSTÍN HERNÁNDEZ VÁZQUEZ SERVICIO SOCIAL REPORTE Análisis Compilar ejemplo simpleTest + problemas Solución ejemplo simpleTest Prueba

Transcript of Realidad Aumentada 01 documentacion tapir

Page 1: Realidad Aumentada 01 documentacion tapir

REALIDAD AUMENTADA

PROYECTO:TAPIR

AGUSTÍN HERNÁNDEZ VÁZQUEZ

SERVICIO SOCIAL

REPORTE

Análisis

Compilar ejemplo simpleTest + problemas

Solución ejemplo simpleTest

Prueba

Page 2: Realidad Aumentada 01 documentacion tapir

REPORTE

Se analizaron los siguientes paquetes, los cuales son de código abierto y manejan las ARToolKITs lo cual es necesario para el proyecto de realidad aumentada.

Descargas:

● ARToolKit2.61.tar.gz● openvrml-0.18.6.tar,gz● ARToolKitAtomic.zip● atomic07linuxen.zip

para que los programas en lenguaje c se lograran compilar desde una shell de Linux se necesita de las siguientes dependencias:

● opencv

libcv1 libhighgui1 libcvaux1 libcv-dev libcvaux-dev libhighgui-dev

● glut

freeglut3-dev freeglut3 freeglut3-dbg libalut0

NOTA:la siguiente dependencia es para el ejemplo simpleVRML.c los ejemplos .c que se encuentren en la carpeta /examples a excepción del ejemplo simpleVMRL.c se pueden compilar con las dependencias anteriores.

● openvrml

libboost-iostreams-dev spidermonkey-bin libmozjsOd-dbg libmozjs-dev--->ADVERTENCIA AL INSTALAR ESTE PAQUETE SE DESINSTALA

FIREFOX, PARA REINSTALARLO EJECUTE EN TERMINAL “sudo apt-get install firefox”

libmozjsOd js2-mode Java Native Interface(JNI)--->ESTA DEPENDENCIA NO SE HA LOGRADO

INSTALAR EN LA FORMA COMO LO REQUIERE EL NODO DE OPENVRML.......PROBANDO

Page 3: Realidad Aumentada 01 documentacion tapir

Análisis

Al instalar el programa ATOMIC me encontré con archivos compilados de programas ejemplo los cuales al ejecutarlos de forma tradicional en Linux(./”nombre_ejecutable”) no pasaba nada ¿porque no se compilan?, una parte fue los permisos de usuario los cuales se corrigieron con “sudo chmod -R +x *” pero no se compilaba el archivo ejecutable. Se escribió un archivo con la orden .sh para mandar llamar el programa ejecutable(el código del archivo .sh fue proporcionado por ATOMIC) una vez que esta escrito el .sh se le agrega en la ultima linea el comando para “correr” archivos los compilados.

En este script se tomo el archivo compilado del programa simpleTest.c

Detalles del script: lo que hace es exportar las ARToolKITs ya que estas no se “instalan” como opencv o glut son llamadas desde la carpeta en donde se esta compilando, también se inicializa el punto de montaje de la webcam(en la parte “device=/dev/video0” puede cambiar dependiendo de la marca de la cámara así como su punto de montaje en la parte “vide0” puede ser “video1” o “videoX” por lo regular es “video0” pero si se llegaran a conectar otra webcam esta tomaría el punto de montaje “video1” así como lo hace casualmente el sistema Linux con particiones nuevas y/o dispositivos usb) así como su resolución(la resolución depende tanto del programa escrito en

Page 4: Realidad Aumentada 01 documentacion tapir

C como las opciones que maneja el script ) y por ultimo ya que se inicializaron los parámetros de la webcam y se cargaron las ARToolKIT se ejecuta con el orden ./nombre_ejecutable con esto responde a la pregunta ¿porque no se compilan?, primero necesitaba inicializar las dependencias de la webcam.

NOTA:el script debe estar en la misma carpeta que la del archivo compilado y a su vez los patrones como “hiro” , ”kanji”, etc deben estar al mismo nivel pero en la carpeta Data.Los archivos compilados fueron tomados del paquete ARToolKitAtomic.zip de la carpeta bin y todos funcionaron de acuerdo a la lógica de su código fuente; cabe destacar que no fueron compilados por mi, sino que estos ejemplos ya venían en el paquete ARToolKitAtomic.zip solo se ocuparon como prueba, pero explicare como compilarlos.

Compilar ejemplo simpleTest + problemas

Teniendo en cuenta el script .sh, tome la decisión de usar el compilador gcc para hacer una prueba con el programa simpleTest.c el cual depende de opencv y glut.

Se abrió una terminal en linea de comando:

con el comando anterior nos posicionamos en la carpeta /tapir en cual es el nombre del proyecto, ahora escribimos en terminal 'ls':

Page 5: Realidad Aumentada 01 documentacion tapir

nos muestra los archivos y carpetas contenidas en /tapir, nos vamos a /RA-algoritmos y vemos que archivos contiene:

entramos a la carpeta simple:

vemos que el algoritmos simpleTest.c se encuentra ahí lo compilamos con gcc:

Page 6: Realidad Aumentada 01 documentacion tapir

al compilarlo nos aparecen errores de referencia que son estos:

/tmp/ccOfnWhj.o: In function `main':

simpleTest.c:(.text+0x17): undefined reference to `glutInit' ///resuelto con el comando “gcc -I/usr/X11R6/include -lglut -o ”

resolví el problema de glutInit pero aun faltan estos:

simpleTest.c:(.text+0x21): undefined reference to `arVideoCapStart' simpleTest.c:(.text+0x3d): undefined reference to `argMainLoop' /tmp/ccloBWye.o: In function `keyEvent(unsigned char, int, int)': simpleTest.c:(.text+0x69): undefined reference to `arUtilTimer'

/tmp/ccloBWye.o: In function `mainLoop()':

simpleTest.c:(.text+0x9a): undefined reference to `arVideoGetImage' simpleTest.c:(.text+0xb4): undefined reference to `arUtilSleep' simpleTest.c:(.text+0xc7): undefined reference to `arUtilTimerReset' simpleTest.c:(.text+0xd9): undefined reference to `argDrawMode2D' simpleTest.c:(.text+0xf4): undefined reference to `argDispImage' simpleTest.c:(.text+0x116): undefined reference to `arDetectMarker' simpleTest.c:(.text+0x133): undefined reference to `arVideoCapNext' simpleTest.c:(.text+0x1c0): undefined reference to `argSwapBuffers' simpleTest.c:(.text+0x1f3): undefined reference to `arGetTransMat' simpleTest.c:(.text+0x1ff): undefined reference to `argSwapBuffers'

/tmp/ccloBWye.o: In function `init()':

simpleTest.c:(.text+0x217): undefined reference to `arVideoOpen' simpleTest.c:(.text+0x23e): undefined reference to `arVideoInqSize' simpleTest.c:(.text+0x28f): undefined reference to `arParamLoad' simpleTest.c:(.text+0x2d7): undefined reference to `arParamChangeSize' simpleTest.c:(.text+0x2e3): undefined reference to `arInitCparam' simpleTest.c:(.text+0x2fb): undefined reference to `arParamDisp' simpleTest.c:(.text+0x308): undefined reference to `arLoadPatt' simpleTest.c:(.text+0x363): undefined reference to `argInit'

/tmp/ccloBWye.o: In function `cleanup()':

simpleTest.c:(.text+0x370): undefined reference to `arVideoCapStop' simpleTest.c:(.text+0x375): undefined reference to `arVideoClose' simpleTest.c:(.text+0x37a): undefined reference to `argCleanup'

/tmp/ccloBWye.o: In function `draw()':

simpleTest.c:(.text+0x432): undefined reference to `argDrawMode3D' simpleTest.c:(.text+0x446): undefined reference to `argDraw3dCamera' simpleTest.c:(.text+0x450): undefined reference to `glClearDepth' simpleTest.c:(.text+0x45c): undefined reference to `glClear' simpleTest.c:(.text+0x468): undefined reference to `glEnable' simpleTest.c:(.text+0x474): undefined reference to `glDepthFunc'

Page 7: Realidad Aumentada 01 documentacion tapir

simpleTest.c:(.text+0x48a): undefined reference to `argConvGlpara' simpleTest.c:(.text+0x496): undefined reference to `glMatrixMode' simpleTest.c:(.text+0x4a4): undefined reference to `glLoadMatrixd' simpleTest.c:(.text+0x4b0): undefined reference to `glEnable' simpleTest.c:(.text+0x4bc): undefined reference to `glEnable' simpleTest.c:(.text+0x4d7): undefined reference to `glLightfv' simpleTest.c:(.text+0x4f2): undefined reference to `glLightfv' simpleTest.c:(.text+0x50d): undefined reference to `glLightfv' simpleTest.c:(.text+0x528): undefined reference to `glMaterialfv' simpleTest.c:(.text+0x543): undefined reference to `glMaterialfv' simpleTest.c:(.text+0x55e): undefined reference to `glMaterialfv' simpleTest.c:(.text+0x56a): undefined reference to `glMatrixMode' simpleTest.c:(.text+0x589): undefined reference to `glTranslatef' simpleTest.c:(.text+0x597): undefined reference to `glutSolidCube' simpleTest.c:(.text+0x5a3): undefined reference to `glDisable' simpleTest.c:(.text+0x5af): undefined reference to `glDisable' collect2: ld returned 1 exit status

Page 8: Realidad Aumentada 01 documentacion tapir

Solución ejemplo simpleTest

Al analizar los errores me encontré que son funciones que pertenecen tanto a glut como opencv, ¿pero que no ya las había instalado? Cual era el problema, bueno como indique mas arriba resolví el glutInit con el comando especial para glut, entonces es lógico que si activo las demás funciones con el comando para opencv se logre compilar, pero ahora ¿que comando escribo para que el gcc compile la glut y la opencv al mismo tiempo?, si exploramos en la carpeta /simple había un archivo llamado “Makefile” los archivos Makefile son script para interpretes de shell, ¿pero que hace el Makefile?.

Código del “Makefile” su funcionamiento es el siguiente:

INC_DIR= ../../include-------->es en donde se encuentran las librerías para inicializar la camaraweb

Page 9: Realidad Aumentada 01 documentacion tapir

LIB_DIR= ../../lib----------->se encuentran las funciones faltantes cuando compilamos el gcc

BIN_DIR= ../../algoritmos_compilados------>carpeta donde se guardan los ejecutables del algoritmo

LDFLAG=-pthread -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lxml2 -lglib-2.0 -L/usr/X11R6/lib -L/usr/local/lib -L$(LIB_DIR)------->el comando para “correr” opencv

LIBS= -lARgsub -lARvideo -lAR -lpthread -lglut -lGLU -lGL -lXi -lX11 -lm----->el comando para “correr” glut

CFLAG= -O -pthread -I/usr/include/gstreamer-0.10 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/libxml2 -I/usr/X11R6/include -I$(INC_DIR)------->el comando para inicializar webcam

all: $(BIN_DIR)/simpleTest

$(BIN_DIR)/simpleTest: simpleTest.o $(OBJS) -------->se crea el programa objeto y carga los comandos

cc -o $(BIN_DIR)/simpleTest simpleTest.o $(OBJS) $(LDFLAG) $(LIBS) --->se copia el archivo objeto a ../../algoritmos_compilados

simpleTest.o: simpleTest.c $(HEADDERS) ------>compila simpleTest.c con el objeto simpleTest.o

cc -c $(CFLAG) simpleTest.c

clean: rm -f*.o--------->borra archivo objeto de ../../algoritmos_compiladosrm -f $(BIN_DIR)/simpleTest

allclean: rm -f *.o-------->borra archivo objeto de ../../algoritmos_compiladosrm -f $(BIN_DIR)/simpleTest rm -f Makefile

Page 10: Realidad Aumentada 01 documentacion tapir

ahora ya sabemos que hace el “Makefile” pero como lo “corremos”, de hecho una vez que tenemos el makefile ya es mas fácil nos vamos a la carpeta /simple:

al hacer “make” vemos que en terminal se compila el programa objeto con los comandos respectivos a cada dependencia (glut, opencv y soporte webcam) y nos crea el archivo ejecutable en la carpeta /algoritmos_compilados ahora a probar.

Prueba

Para probar el ejemplo simple.c necesitaremos del script .sh del que hablamos anteriormente lo editaremos y lo colocamos en la carpeta /algoritmos_compilados :

Page 11: Realidad Aumentada 01 documentacion tapir

verificamos se se creo el archivo ejecutable:

Vemos que en la carpeta /algoritmos_compilados tenemos dos carpetas: /Dta y /Wrl. La Data contiene los patrones que se van a usar (“hiro” , ”kanji”, etc) un problema con los ejecutables es que si no esta la carpeta Data y el patron, no “corren”, bueno si se ejecuta pero no detecta nada o simplemente manda que no se encuentra el marcador; La otra carpeta Wrl es donde se colocan nuestros modelos .wrl, haremos una prueba con wrl después por ahora conseguir que simpleTest se ejecute.

Para compilarlo tenemos que ir a la carpeta “algoritmos_compilados”:

Page 12: Realidad Aumentada 01 documentacion tapir

ahora ejecutamos ls para ver archivos ubicamos el script “simple.sh” y escribimos en terminal “sh simple.sh”

ya hemos compilado y probado el algoritmo simpleTest.c y funciona de acuerdo a la lógica de su código fuente la cual realiza el renderizado de un cubo cuando la webcam visualiza el patron hiro.

NOTA:ANTES DE COMENSAR A COMPILAR SE DEBE DE SELECCIONAR EL DRIVER DE CAPTURA, PARA SELECCIONAR EL DRIVER DEBEMOS UBICARNOS EN LA CARPETA DESDE TERMINAL /tapir Y EJECUTAR EL SIGUENTE COMANDO “/.Configure2” (RECOMENDAD -- DEBEN INSTALARSE DEPENDENCIAS GStreamer Media Framework), TAMBIEN SE PUEDE EJECUTAR “./Configure” PERO EL “./Configure2“ ES UN ARCHIVO MODIFICADO POR MI Y ESTA CONFIGURACION ES CON LA QUE SE ACTIVO EL DRIVER DE LA CAMARA, SI SE USA EL “./Configure” SE DESPLIEGA UN MENU DEL DRIVER A USAR HE PROBADO LOS OTROS PERO EL GStreamer Media Framework ES EL QUE MEJOR.