Archivos de Tags: ARToolKit

Scripts para instalar ARToolKit, Collada DOM, OpenSceneGraph y osgART

He creado unos scripts y parches para que la instalación de todas estas librerías sean menos “dolorosa”. Los parches solucionan los problemas de compatibilidad de OpenSceneGraph con Ubuntu 11.10 y 12.04 como ya expliqué en otro post y unos pequeños bugs en osgART y ARToolKit (tambien se puede añadir soporte para V4L2 a este, creditos a Kameda Yoshinari por esto). Todavía me falta probarlos en las versiones de Ubuntu aunque si tienes algún problema son bastante fáciles de entender y los podrás arreglar sin problemas (estaría bien que me dijeras qué has cambiado para arreglarlos y así los actualice para que todos los tengamos disponibles ;) ). Si encuentras algún error o alguna manera de mejorarlos no dudes en escribirme aquí o en mi página de Github. Puedes descargarte todos los ficheros de aquí:

https://github.com/enekochan/installation-scripts

Tienes que bajarte todos los ficheros y ponerlos en la misma ruta para ejecutar la instalación. El orden correcto para ejecutarlos es:

  1. installARToolKit.sh
  2. installCollada.sh
  3. installOpenSceneGraph.sh
  4. installosgART.sh

Una vez tengas todas las librerías instaladas podrás usar osgART con ficheros Collada (.dae) de la misma manera que hago yo en esta imagen:

No te preocupes que pronto explicaré (con código fuente por supuesto) cómo se hace.

ACTUALIZACIÓN: Puedes encontrar aquí el código fuente para esta aplicación de realidad aumentada.

ARToolKit con OpenKinect usando la cámara IR

Hace más de un año me puse a añadir el soporte para Kinect a ARToolKit usando para ello libfreenect. Obtuve buenos resultados pero no tenía tiempo para publicar un código que estuviera lo suficientemente probado. Aunque ahora ya no tiene demasiado sentido porque al menos en Ubuntu se puede usar el Kinect en ARToolKit mediante el video input de GStremaer (ya que Ubuntu crea un dispositivo /dev/videoX al conectarlo, o al menos eso me ha sucedido a mí en Ubuntu 12.04 ACTUALIZACIÓN: He descubierto que esto sucede por el módulo gspca_kinect introducido a partir del kernel Linux 3.0). De todas maneras quería aprender como funciona ARToolKit por dentro. Ahora le he añadido no solo el soporte para la cámara RGB, sino tambien para la cámara IR, el motor y el LED.

La propia naturaleza de la cámara IR hace que usarla con ARToolKit sea muy difícil si el marker no está muy cerca del Kinect, pero oye es divertido programar con libfreenet. Trataré de publicar el código lo antes posible. Cuando lo tenga un poco más depurado.

Instalar osgART 2.0 RC3 con OpenSceneGraph 2.8.3 o 2.9.6 y soporte para Collada en Ubuntu 12.04

Antes de instalar osgART tenemos que instalar ARToolKit, collada-dom y OpenSceneGraph así que echar un vistazo a los siguientes post antes de continuar:

  • Install ARToolKit 2.72.1 en Ubuntu 11.10 y 12.04
  • Instalar la librería collada-dom en Ubuntu 10.04, 10.11, 11.04, 11.10 y 12.04
  • Instalar OpenSceneGraph 2.8.3 con soporte para Collada en Ubuntu 12.04
  • Instalar OpenSceneGraph 2.9.6 con soporte para Collada en Ubuntu 12.04

Una vez instaladas las dependencias para osgART descargarse el código de osgART 2.0 RC3 de aquí y descomprimirlo. Ejecutar los siguientes comandos:

mkdir build
cd build
cmake .. -DCMAKE_CXX_FLAGS=-fpermissive -DCMAKE_MODULE_LINKER_FLAGS=-lgstreamer-0.10 -DCMAKE_SHARED_LINKER_FLAGS=-lgstreamer-0.10
make
sudo make install

Se puede quitar la opción “-DCMAKE_CXX_FLAGS=-fpermissive” si se añaden los siguientes includes en el fichero “include/osgART/Utils” justo después de “#include “:

#include 
#include 

Configurar la variable de entorno ARTOOLKIT_CONFIG (ya deberías tenerla configurada al instalar ARToolKit):

export ARTOOLKIT_CONFIG="v4l2src device=/dev/video0 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24 ! identity name=artoolkit ! fakesink"

Y ejecutar el ejemplo mientras se muestra el marcador de “Hiro” a la cámara:

cd /usr/local/bin/
./osgartsimple

Si te aparece este error:

Plugin '-1' unknown!
Could not initialize video plugin!

Se debe a que no se han copiado correctamente las librerías de osgART a la carpeta de librerías (“/usr/local/lib“) o a la carpeta de librerías de OSG (“/usr/local/lib/osgPlugins-X.X.X“). Verifica que hay un fichero llamado “libosgART.so” en “/usr/local/lib” y que tienes los ficheros “osgdb_osgart.so“, “osgart_tracker_artoolkit2.so” y “osgart_video_artoolkit2.so” en la carpeta de librerías de OSG (que debería ser “/usr/local/lib/osgPlugins-2.8.3“o “/usr/local/lib/osgPlugins-2.9.6” en función de la versión de OSG que instalaste). Ten en cuenta que si instalas varias versiones de OSG es posible que el plugin de osgART no se copie a la carpeta de plugins de la versión de OSG que tu quieres. Ejecuta esto también por si acaso:

sudo ldconfig /etc/ld.so.conf

Si se ve el fondo negro se debe a un pequeño bug en ARToolKit. Se puede arreglar modificando en ARToolKit la función “ar2VideoCapNext” en el fichero “lib/SRC/VideoGStreamer/video.c en la línea 378 par que devuelva un 0 en vez de TRUE O modificando el fichero de osgART “src/osgART/Video/ARToolKit/ARToolKitVideo.cpp” en la línea 310 de esto:

if (0 == ar2VideoCapNext(video))

A esto:

if (ar2VideoCapNext(video))

Para utilizar la opción de ARToolKit donde cada fotograma se compara con los anteriores para obtener un tracking más suave del marker, se debe cambiar una línea de código de osgART. Dentro del fichero “src/osgART/Traker/ARToolKit/SingleMarker.cpp” descomentar la línea 76 y comentar la línea 77. Es decir pasar de esto:

//arGetTransMatCont(markerInfo, patt_trans, patt_center, patt_width, patt_trans);
arGetTransMat(markerInfo, patt_center, patt_width, patt_trans);

A esto:

arGetTransMatCont(markerInfo, patt_trans, patt_center, patt_width, patt_trans);
//arGetTransMat(markerInfo, patt_center, patt_width, patt_trans);

Fuentes: http://projects.springlobby.info/issues/1575
https://github.com/bitcoin/bitcoin/pull/456
https://code.ros.org/trac/opencv/ticket/1020
http://forum.openscenegraph.org/viewtopic.php?t=7755

Instalar ARToolKit 2.72.1 en Ubuntu 11.10 y 12.04

La instalación es igual que en Ubuntu 10.10 salvo que parece que hay algún problema con el script de configuración. Al ejecutar “./Configure” las librerías de gstreamer no se configuran correctamente en la variable GST_LIBS. Así es como está definida en el script:

GST_LIBS=`pkg-config --libs gstreamer-0.10`

Se puede solucionar el problema añadiendo manualmente la variable GST_LIBS a la definición de la variable LIBS:

LIBS="-lpthread -lglut -lGLU -lGL -lXi -lX11 -lm $GST_LIBS"

También se puede añadir el resultado de ejecutar el comando “pkg-config --libs gstreamer-0.10” a esa variable, al final las dos maneras hacen que LIBS tenga el siguiente valor:

LIBS="-lpthread -lglut -lGLU -lGL -lXi -lX11 -lm -pthread -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lxml2 -lgthread-2.0 -lrt -lglib-2.0"

Es posible que también tengas un problema con V4L al ejecutar make, debido a que han cambiado el nombre del fichero de cabecera “linux/videodev.h” a “libv4l1-videodev.h”. Si te pasa esto cambia ese nombre del fichero de cabecera en los siguientes ficheros de ARToolKit:

include/AR/sys/videoLinuxV4L.h
lib/SRC/VideoLinuxV4L/video.c

Instalar ARToolKit 2.72.1 en Ubuntu 10.10

Primero hay que instalar algunas dependencias:

sudo apt-get install freeglut3-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libxi-dev libxmu-headers libxmu-dev libjpeg62-dev libglib2.0-dev libgtk2.0-dev

Después descargar, extraer, configurar y compilar el código de ARToolKit:

wget "http://sourceforge.net/projects/artoolkit/files/artoolkit/2.72.1/ARToolKit-2.72.1.tgz/download" -O ARToolKit-2.72.1.tgz
tar xzvpf ARToolKit-2.72.1.tgz
cd ARToolKit
./Configure
make

Al hacer ./Configure se pueden seleccionar varios tipos de entrada (elegir GStreamer, la opción 5):

"1: Video4Linux" para capturadoras de video (mediante V4L versión 1).
"2: Video4Linux+JPEG Decompression (EyeToy)" para cámaras Play Station EyeToy (mediante V4L versión 1).
"3: Digital Video Camcoder throught IEEE 1394 (DV Format)" para cámaras firewire.
"4: Digital Video Camera throught IEEE 1394 (VGA NONCOMPRESSED Image Format)" para cámaras firewire.
"5: GStreamer Media Framework" para webcams USB.

Luego hay que copiar los ficheros de cabecera a nuestra carpeta de include:

sudo cp -R ./include/AR /usr/local/include/

Y las librerías a la carpeta de librerías:

sudo cp ./lib/*.a /usr/local/lib/

Ahora hay que crear el fichero para que pkg-config sepa donde están estas nuevas librerías y sus ficheros de cabecera. En Ubuntu 10.10 esto se configura en la carpeta /usr/lib/pkg-config o en  /usr/lib/pkgconfig ya que puede variar de una instalación a otra. Hay que crear un fichero llamado AR.pc dentro de esa carpeta con este contenido (siendo super-usuario):

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${exec_prefix}/include

Name: AR
Description: ARToolKit libs and includes
Version: 2.72.1
Libs: -L${libdir} -lARgsub -lARgsub_lite -lARgsubUtil -lARMulti -lARvideo -lAR
Cflags: -I${includedir}/AR

Así se podrá usar pkg-config para crear los Makefile más facilmente:

$ pkg-config --cflags AR
-I/usr/local/include/AR
$ pkg-config --libs AR
-L/usr/local/lib -lARgsub -lARgsub_lite -lARgsubUtil -lARMulti -lARvideo -lAR

También es recomendable meter la ruta donde se han copiado las librerías a la variable de entorno LD_LIBRARY_PATH. Se puede configurar en el fichero “~/.bashrc” que se encuentra en la carpeta home del usuario.

export LD_LIBRARY_PATH=/usr/local/lib

Antes de ejecutar alguno de los ejemplos que se encuentran en la carpeta “bin” de ARToolKit hay que exportar una variable de configuración para que ARToolKit sepa de dónde capturar el vídeo y en qué formato hacerlo. Yo por ejemplo uso esta configuración:

export ARTOOLKIT_CONFIG="v4l2src device=/dev/video0 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24 ! identity name=artoolkit ! fakesink"

Ojo al dispositivo que queráis usar (devide=/dev/video0). También se puede configurar el tamaño de las imágenes capturadas usando los parámetros height y width, aunque es posible que de fallos si se selecciona un tamaño no compatible con la cámara.

export ARTOOLKIT_CONFIG="v4l2src device=/dev/video0 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=640,height=480 ! identity name=artoolkit ! fakesink"

También se puede usar un fichero de vídeo para hacer pruebas o para desarrollar en un ordenador que no tenga webcam real:

export ARTOOLKIT_CONFIG="filesrc location=gstreamer_test_xvid.avi ! decodebin ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24 ! identity name=artoolkit ! fakesink"

Para poder ver qué es lo que se ve en la cámara y saber si realmente esta funciona se puede usar el siguiente comando:

gst-launch-0.10 v4l2src ! xvimagesink

De la misma manera se puede utilizar para probar las configuraciones a pasar a la variable ARTOOLKIT_CONFIG, con la salvedad de que habrá que cambiar fakesink por xvimagesink según si se va a probar gst-launch-0.10 o se va a configurar la variable de ARToolKit.

Una vez configurada la variable ARTOOLKIT_CONFIG podemos ir a la carpeta bin de ARToolKit y ejecutar uno de los test:

cd bin
./simpleTest

Si se utiliza V4L1 con algunas cámaras de vídeo en vez de devolver una paleta RGB se devuelve una paleta YUV que ARToolKit no espera recibir por defecto. Para solucionar el problema hay que añadir la siguiente opción a la variable de configuración ARTOOLKIT_CONFIG. Se pueden ver otras opciones de configuración con V4L1 en la documentación oficial.

-palette=YUV420P

Fuentes: http://www.block4.com/index.php?id=107

http://artoolkit.sourceforge.net/apidoc/video/#VideoLinuxV4L