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

Upload: agustin-hv

Post on 14-Jul-2015

58 views

Category:

Documents


0 download

TRANSCRIPT

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 1/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

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 2/12

 

REPORTE

Se analizaron los siguientes paquetes, los cuales son de código abierto ymanejan las ARToolKITs lo cual es necesario para el proyecto de realidadaumentada.

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 shellde 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 losejemplos .c que se encuentren en la carpeta /examples a excepción delejemplo 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-getinstall firefox”

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

INSTALAR EN LA FORMA COMO LO REQUIERE EL NODO DEOPENVRML.......PROBANDO

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 3/12

 

Análisis

Al instalar el programa ATOMIC me encontré con archivos compilados deprogramas ejemplo los cuales al ejecutarlos de forma tradicional enLinux(./”nombre_ejecutable”) no pasaba nada ¿porque no se compilan?, unaparte fue los permisos de usuario los cuales se corrigieron con “sudo chmod

-R +x *” pero no se compilaba el archivo ejecutable. Se escribió un archivocon la orden .sh para mandar llamar el programa ejecutable(el código delarchivo .sh fue proporcionado por ATOMIC) una vez que esta escrito el .shse le agrega en la ultima linea el comando para “correr” archivos loscompilados.

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 nose “instalan” como opencv o glut son llamadas desde la carpeta en donde seesta compilando, también se inicializa el punto de montaje de la webcam(enla parte “device=/dev/video0” puede cambiar dependiendo de la marca de lacá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 otrawebcam esta tomaría el punto de montaje “video1” así como lo hacecasualmente el sistema Linux con particiones nuevas y/o dispositivos usb)así como su resolución(la resolución depende tanto del programa escrito en

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 4/12

 

C como las opciones que maneja el script ) y por ultimo ya que seinicializaron los parámetros de la webcam y se cargaron las ARToolKIT seejecuta con el orden ./nombre_ejecutable con esto responde a la pregunta¿porque no se compilan?, primero necesitaba inicializar las dependencias dela 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 mismonivel pero en la carpeta Data.Los archivos compilados fueron tomados del paquete ARToolKitAtomic.zip dela carpeta bin y todos funcionaron de acuerdo a la lógica de su códigofuente; cabe destacar que no fueron compilados por mi, sino que estosejemplos ya venían en el paquete ARToolKitAtomic.zip solo se ocuparon comoprueba, pero explicare como compilarlos.

Compilar ejemplo simpleTest + problemas

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

Se abrió una terminal en linea de comando:

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

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 5/12

 

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 congcc:

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 6/12

 

al compilarlo nos aparecen errores de referencia que son estos:

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

simpleTest.c:(.text+0x17): undefined reference to `glutInit' ///resueltocon 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'

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 7/12

 

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

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 8/12

 

Solución ejemplo simpleTest

Al analizar los errores me encontré que son funciones que pertenecen tantoa glut como opencv, ¿pero que no ya las había instalado? Cual era elproblema, bueno como indique mas arriba resolví el glutInit con el comando

especial para glut, entonces es lógico que si activo las demás funcionescon el comando para opencv se logre compilar, pero ahora ¿que comandoescribo para que el gcc compile la glut y la opencv al mismo tiempo?, siexploramos en la carpeta /simple había un archivo llamado “Makefile” losarchivos Makefile son script para interpretes de shell, ¿pero que hace elMakefile?.

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

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

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 9/12

 

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

BIN_DIR= ../../algoritmos_compilados------>carpeta donde se guardan losejecutables 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 programaobjeto 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 elobjeto 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)/simpleTestrm -f Makefile

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 10/12

 

ahora ya sabemos que hace el “Makefile” pero como lo “corremos”, de hechouna 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 loscomandos respectivos a cada dependencia (glut, opencv y soporte webcam) ynos crea el archivo ejecutable en la carpeta /algoritmos_compilados ahora aprobar.

Prueba

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

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 11/12

 

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 elpatron, no “corren”, bueno si se ejecuta pero no detecta nada o simplementemanda que no se encuentra el marcador; La otra carpeta Wrl es donde secolocan nuestros modelos .wrl, haremos una prueba con wrl después por ahoraconseguir que simpleTest se ejecute.

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

5/13/2018 01 Documentacion TAPIR - slidepdf.com

http://slidepdf.com/reader/full/01-documentacion-tapir 12/12

 

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

ya hemos compilado y probado el algoritmo simpleTest.c y funciona deacuerdo a la lógica de su código fuente la cual realiza el renderizado deun 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 SEPUEDE EJECUTAR “./Configure” PERO EL “./Configure2“ ES UN ARCHIVOMODIFICADO POR MI Y ESTA CONFIGURACION ES CON LA QUE SE ACTIVO EL DRIVER DELA CAMARA, SI SE USA EL “./Configure” SE DESPLIEGA UN MENU DEL DRIVER AUSAR HE PROBADO LOS OTROS PERO EL GStreamer Media Framework ES EL QUEMEJOR.