SlideShare una empresa de Scribd logo
1 de 12
Descargar para leer sin conexión
REALIDAD AUMENTADA

PROYECTO:TAPIR

AGUSTÍN HERNÁNDEZ VÁZQUEZ

SERVICIO SOCIAL




                                           REPORTE

                                          Análisis

           Compilar ejemplo simpleTest + problemas

                       Solución ejemplo simpleTest

                                            Prueba
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
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
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':
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:
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'
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
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
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_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 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 :
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”:
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.

Más contenido relacionado

La actualidad más candente

La actualidad más candente (14)

Despliegue de aplicaciones PHP
Despliegue de aplicaciones PHPDespliegue de aplicaciones PHP
Despliegue de aplicaciones PHP
 
Multitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplosMultitarea e hilos en java con ejemplos
Multitarea e hilos en java con ejemplos
 
Ud3 inocente alcaide
Ud3 inocente alcaideUd3 inocente alcaide
Ud3 inocente alcaide
 
Destructores
Destructores Destructores
Destructores
 
Uso de Excepciones en JAVA
Uso de Excepciones en JAVAUso de Excepciones en JAVA
Uso de Excepciones en JAVA
 
97132962-instalacion-de-open meetings-en-squeeze
 97132962-instalacion-de-open meetings-en-squeeze 97132962-instalacion-de-open meetings-en-squeeze
97132962-instalacion-de-open meetings-en-squeeze
 
Atix24
Atix24Atix24
Atix24
 
Concurrencia en Java
Concurrencia en JavaConcurrencia en Java
Concurrencia en Java
 
Freepascal
FreepascalFreepascal
Freepascal
 
Introducción a java
Introducción a javaIntroducción a java
Introducción a java
 
Turbogears_Instalación
Turbogears_InstalaciónTurbogears_Instalación
Turbogears_Instalación
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 
Atix23
Atix23Atix23
Atix23
 
Comandos de Java
Comandos de JavaComandos de Java
Comandos de Java
 

Destacado

Realidad Aumentada 02 interfaz t apir
Realidad Aumentada 02 interfaz t apirRealidad Aumentada 02 interfaz t apir
Realidad Aumentada 02 interfaz t apirAgustín Hv
 
Herramientas ARToolKit Implementadas en el Proyecto de Realidad Aumentada TAp...
Herramientas ARToolKit Implementadas en el Proyecto de Realidad Aumentada TAp...Herramientas ARToolKit Implementadas en el Proyecto de Realidad Aumentada TAp...
Herramientas ARToolKit Implementadas en el Proyecto de Realidad Aumentada TAp...Agustín Hv
 
Reconocimiento Facial, para Registro de Asistencia
Reconocimiento Facial, para Registro de AsistenciaReconocimiento Facial, para Registro de Asistencia
Reconocimiento Facial, para Registro de AsistenciaAlfredo Carrion Ventura
 
Proyecto de Grado Realidad Aumentada
Proyecto de Grado Realidad AumentadaProyecto de Grado Realidad Aumentada
Proyecto de Grado Realidad AumentadaPato Lara
 
The Outcome Economy
The Outcome EconomyThe Outcome Economy
The Outcome EconomyHelge Tennø
 

Destacado (8)

Build ar
Build arBuild ar
Build ar
 
Realidad Aumentada 02 interfaz t apir
Realidad Aumentada 02 interfaz t apirRealidad Aumentada 02 interfaz t apir
Realidad Aumentada 02 interfaz t apir
 
Reconocimiento de Rostros
Reconocimiento de RostrosReconocimiento de Rostros
Reconocimiento de Rostros
 
Herramientas ARToolKit Implementadas en el Proyecto de Realidad Aumentada TAp...
Herramientas ARToolKit Implementadas en el Proyecto de Realidad Aumentada TAp...Herramientas ARToolKit Implementadas en el Proyecto de Realidad Aumentada TAp...
Herramientas ARToolKit Implementadas en el Proyecto de Realidad Aumentada TAp...
 
Reconocimiento Facial, para Registro de Asistencia
Reconocimiento Facial, para Registro de AsistenciaReconocimiento Facial, para Registro de Asistencia
Reconocimiento Facial, para Registro de Asistencia
 
Iniciación a ARToolKit
Iniciación a ARToolKitIniciación a ARToolKit
Iniciación a ARToolKit
 
Proyecto de Grado Realidad Aumentada
Proyecto de Grado Realidad AumentadaProyecto de Grado Realidad Aumentada
Proyecto de Grado Realidad Aumentada
 
The Outcome Economy
The Outcome EconomyThe Outcome Economy
The Outcome Economy
 

Similar a Realidad aumentada proyecto Tapir

Evasión de Técnicas Forenses
Evasión de Técnicas ForensesEvasión de Técnicas Forenses
Evasión de Técnicas ForensesConferencias FIST
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasosSoni BM
 
Clase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfClase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfodryemeliGomez
 
37 supervisión del sistema
37  supervisión del sistema37  supervisión del sistema
37 supervisión del sistemaAprende Viendo
 
Programación en c primer programa en c
Programación en c primer programa en cProgramación en c primer programa en c
Programación en c primer programa en cFree Lancer
 
Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)
Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)
Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)Pablo Alvarez Doval
 
Tutorial shell scripts
Tutorial shell scriptsTutorial shell scripts
Tutorial shell scriptsScreenMedia
 
Mprogintc++ regular
Mprogintc++ regularMprogintc++ regular
Mprogintc++ regularpayasito1980
 
Manual de programacion en lenguaje c++
Manual de programacion en lenguaje c++Manual de programacion en lenguaje c++
Manual de programacion en lenguaje c++Samuel Ballén
 
Mprogintc++ prog(3)
Mprogintc++ prog(3)Mprogintc++ prog(3)
Mprogintc++ prog(3)desi2907
 
COMPILADOR G++
COMPILADOR G++COMPILADOR G++
COMPILADOR G++HM47
 
OpenMP - Configuración de IDE y ejecución de código paralelo
OpenMP - Configuración de IDE y ejecución de código paraleloOpenMP - Configuración de IDE y ejecución de código paralelo
OpenMP - Configuración de IDE y ejecución de código paraleloadelsolar
 

Similar a Realidad aumentada proyecto Tapir (20)

Evasión de Técnicas Forenses
Evasión de Técnicas ForensesEvasión de Técnicas Forenses
Evasión de Técnicas Forenses
 
7 curso
7 curso7 curso
7 curso
 
Symfony2 Formacion y primeros pasos
Symfony2  Formacion y primeros pasosSymfony2  Formacion y primeros pasos
Symfony2 Formacion y primeros pasos
 
Jenkins pipeline
Jenkins pipelineJenkins pipeline
Jenkins pipeline
 
Clase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdfClase 2 GuiaPractica.pdf
Clase 2 GuiaPractica.pdf
 
37 supervisión del sistema
37  supervisión del sistema37  supervisión del sistema
37 supervisión del sistema
 
Programación en c primer programa en c
Programación en c primer programa en cProgramación en c primer programa en c
Programación en c primer programa en c
 
Curso linux clase_2_2012
Curso linux clase_2_2012Curso linux clase_2_2012
Curso linux clase_2_2012
 
Admin Manual
Admin ManualAdmin Manual
Admin Manual
 
Logs en Linux.pdf
Logs en Linux.pdfLogs en Linux.pdf
Logs en Linux.pdf
 
Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)
Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)
Depuración Avanzada Con Win Dbg Y Vs 2010 (Basica)
 
Tutorial shell scripts
Tutorial shell scriptsTutorial shell scripts
Tutorial shell scripts
 
Lenguaje c 2_neo
Lenguaje c 2_neoLenguaje c 2_neo
Lenguaje c 2_neo
 
Mprogintc++ regular
Mprogintc++ regularMprogintc++ regular
Mprogintc++ regular
 
Mprogintc++
Mprogintc++Mprogintc++
Mprogintc++
 
Apuntes de progra c++
Apuntes de progra c++Apuntes de progra c++
Apuntes de progra c++
 
Manual de programacion en lenguaje c++
Manual de programacion en lenguaje c++Manual de programacion en lenguaje c++
Manual de programacion en lenguaje c++
 
Mprogintc++ prog(3)
Mprogintc++ prog(3)Mprogintc++ prog(3)
Mprogintc++ prog(3)
 
COMPILADOR G++
COMPILADOR G++COMPILADOR G++
COMPILADOR G++
 
OpenMP - Configuración de IDE y ejecución de código paralelo
OpenMP - Configuración de IDE y ejecución de código paraleloOpenMP - Configuración de IDE y ejecución de código paralelo
OpenMP - Configuración de IDE y ejecución de código paralelo
 

Realidad aumentada proyecto Tapir

  • 1. REALIDAD AUMENTADA PROYECTO:TAPIR AGUSTÍN HERNÁNDEZ VÁZQUEZ SERVICIO SOCIAL REPORTE Análisis Compilar ejemplo simpleTest + problemas Solución ejemplo simpleTest Prueba
  • 2. 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
  • 3. 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
  • 4. 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':
  • 5. 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:
  • 6. 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'
  • 7. 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
  • 8. 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
  • 9. 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_compilados rm -f $(BIN_DIR)/simpleTest allclean: rm -f *.o-------->borra archivo objeto de ../../algoritmos_compilados rm -f $(BIN_DIR)/simpleTest rm -f Makefile
  • 10. 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 :
  • 11. 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”:
  • 12. 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.