You are on page 1of 12

REALIDAD AUMENTADA PROYECTO:TAPIR AGUSTN HERNNDEZ VZQUEZ SERVICIO SOCIAL

REPORTE Anlisis Compilar ejemplo simpleTest + problemas Solucin ejemplo simpleTest Prueba

REPORTE
Se analizaron los siguientes paquetes, los cuales son de cdigo 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 excepcin 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

Anlisis
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 cdigo 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, tambin se inicializa el punto de montaje de la webcam(en la parte device=/dev/video0 puede cambiar dependiendo de la marca de la cmara 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 tomara el punto de montaje video1 as como lo hace casualmente el sistema Linux con particiones nuevas y/o dispositivos usb) as como su resolucin(la resolucin depende tanto del programa escrito en

C como las opciones que maneja el script ) y por ultimo ya que se inicializaron los parmetros 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 lgica de su cdigo fuente; cabe destacar que no fueron compilados por mi, sino que estos ejemplos ya venan 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 decisin 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':

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

entramos a la carpeta simple:

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

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): simpleTest.c:(.text+0x23e): simpleTest.c:(.text+0x28f): simpleTest.c:(.text+0x2d7): simpleTest.c:(.text+0x2e3): simpleTest.c:(.text+0x2fb): simpleTest.c:(.text+0x308): simpleTest.c:(.text+0x363): undefined undefined undefined undefined undefined undefined undefined undefined reference reference reference reference reference reference reference reference to to to to to to to to `arVideoOpen' `arVideoInqSize' `arParamLoad' `arParamChangeSize' `arInitCparam' `arParamDisp' `arLoadPatt' `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): simpleTest.c:(.text+0x446): simpleTest.c:(.text+0x450): simpleTest.c:(.text+0x45c): simpleTest.c:(.text+0x468): simpleTest.c:(.text+0x474): undefined undefined undefined undefined undefined undefined reference reference reference reference reference reference to to to to to to `argDrawMode3D' `argDraw3dCamera' `glClearDepth' `glClear' `glEnable' `glDepthFunc'

simpleTest.c:(.text+0x48a): undefined simpleTest.c:(.text+0x496): undefined simpleTest.c:(.text+0x4a4): undefined simpleTest.c:(.text+0x4b0): undefined simpleTest.c:(.text+0x4bc): undefined simpleTest.c:(.text+0x4d7): undefined simpleTest.c:(.text+0x4f2): undefined simpleTest.c:(.text+0x50d): undefined simpleTest.c:(.text+0x528): undefined simpleTest.c:(.text+0x543): undefined simpleTest.c:(.text+0x55e): undefined simpleTest.c:(.text+0x56a): undefined simpleTest.c:(.text+0x589): undefined simpleTest.c:(.text+0x597): undefined simpleTest.c:(.text+0x5a3): undefined simpleTest.c:(.text+0x5af): undefined collect2: ld returned 1 exit status

reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference reference

to to to to to to to to to to to to to to to to

`argConvGlpara' `glMatrixMode' `glLoadMatrixd' `glEnable' `glEnable' `glLightfv' `glLightfv' `glLightfv' `glMaterialfv' `glMaterialfv' `glMaterialfv' `glMatrixMode' `glTranslatef' `glutSolidCube' `glDisable' `glDisable'

Solucin ejemplo simpleTest


Al analizar los errores me encontr que son funciones que pertenecen tanto a glut como opencv, pero que no ya las haba instalado? Cual era el problema, bueno como indique mas arriba resolv el glutInit con el comando especial para glut, entonces es lgico que si activo las dems 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 haba un archivo llamado Makefile los archivos Makefile son script para interpretes de shell, pero que hace el Makefile?.

Cdigo del Makefile su funcionamiento es el siguiente: INC_DIR= ../../include-------->es en donde se encuentran las libreras para inicializar la camaraweb

LIB_DIR= ../../lib----------->se encuentran las funciones faltantes cuando compilamos el gcc BIN_DIR= ../../algoritmos_compilados------>carpeta ejecutables del algoritmo donde se guardan los

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 -lm----->el comando para correr glut -lglut -lGLU -lGL -lXi -lX11

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_compilados rm -f $(BIN_DIR)/simpleTest allclean: rm -f *.o-------->borra archivo objeto de ../../algoritmos_compilados rm -f $(BIN_DIR)/simpleTest rm -f Makefile

ahora ya sabemos que hace el Makefile pero como lo corremos, de hecho una vez que tenemos el makefile ya es mas fcil 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 :

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 despus por ahora conseguir que simpleTest se ejecute. Para compilarlo tenemos que ir a la carpeta algoritmos_compilados:

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 lgica de su cdigo 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.

You might also like