6/7/09

Realidad Aumentada - ARToolKit en Ubuntu 9.04

A fines de junio de 2009 estuve leyendo en el blog de Fabio acerca de realidad aumentada, y uno de los ejemplos mostraba algo de ARToolKit.

La realidad aumentada es la posibilidad de interactuar con elementos virtuales en el mundo real. Esto abre un mundo de posibilidades, desde un diagnóstico médico hasta juegos.

En el mundo real sólo existe un patrón (un papel impreso, en la mayoría de los casos) y mediante ese patrón la computadora le agrega un modelo 3D en tiempo real. Es sencillamente impresionante.



Enseguida me puse manos a la obra para probarlo en Ubuntu 9.04.

Al final de este artículo vas a encontrar un listado de los paquetes instalados y un listados completo de paquetes y sus dependencias. Todos esos paquetes los instalé durante las pruebas, por lo que el listado seguramente se puede reducir.

EL SISTEMA
ARToolKit es una biblioteca de software para crear aplicaciones de AR (Augmented Reality - Realidad Aumentada) y se puede descargar desde la página del HIT Lab de la Universidad de Washington y se distribuye bajo la GNU GPL para aplicaciones no comerciales.

La instalación es muy simple y sólo se requieren unos pocos comandos en la consola. Todo detallado en la página de la Universidad de Washington.

LA COMPLEJIDAD
ARToolKit es muy simple y potente, pero requiere de una cámara para poder funcionar. Técnicamente puede usarse cualquier cámara. Allí es donde se complica un poco hacer que el sistema funcione, dadas las opciones de drivers para conectarse con la cámara.

LA SOLUCIÓN
ARToolKit soporta que la cámara sea conectada a través de Gstreamer, por lo que literalmente se puede usar cualquier cámara. Recomiendo no renegar con las otras opciones (como hice yo) y empezar a probar con la opción de Gstreamer.

EL SECRETO
Al configurar la cámara y correr el sistema de prueba de ARToolKit ($ simpletest) el sistema no funcionaba porque la pantalla estaba dividida en varias partes, se veía la imagen duplicada y la parte inferior con lluvia. Este tema de demandó algunas horas hasta que entendí lo que pasaba.

Luego de buscar un rato largo y probar varias cosas en internet, encontré un post en el foro del HIT Lab de la Universidad de Canterbury el motivo del problema.

Y es que la cámara genera una imagen YUV (de luces) y ARToolKit necesita una imagen RGB (de colores). Esta diferencia en el formato hace que la imagen que el sistema de prueba recibe no sea útil para su funcionamiento.

En mi caso fue tan simple como exportar una línea para que se convierta el formato:
$ export ARTOOLKIT_CONFIG="v4l2src ! jpegdec ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24 ! identity name=artoolkit ! fakesink"

Y listo!




LISTADO DE PAQUETES INSTALADOS
freegult
libxi-dev
libxmu-dev
libxmu-headers
libjpeg2-dev
libglib2.0-dev
libgtk2.0-dev
libgstreamer-dev

LISTADO DE PAQUETES INSTALADOS Y SUS DEPENDENCIAS
build-essential (11.4)
dpkg-dev (1.14.24ubuntu1)
g++ (4:4.3.3-1ubuntu1)
g++-4.3 (4.3.3-5ubuntu4)
libstdc++6-4.3-dev (4.3.3-5ubuntu4)
patch (2.5.9-5)

freeglut3 (2.4.0-6.1ubuntu1)
freeglut3-dev (2.4.0-6.1ubuntu1)
libgl1-mesa-dev (7.4-0ubuntu3.1)
libglu1-mesa-dev (7.4-0ubuntu3.1)
libice-dev (2:1.0.4-1)
libpthread-stubs0 (0.1-2)
libpthread-stubs0-dev (0.1-2)
libsm-dev (2:1.1.0-1)
libx11-dev (2:1.1.99.2-1ubuntu2)
libxau-dev (1:1.0.4-1)
libxcb1-dev (1.1.93-0ubuntu3)
libxdmcp-dev (1:1.0.2-3)
libxext-dev (2:1.0.99.1-0ubuntu3)
libxt-dev (1:1.0.5-3ubuntu1)
linux-headers-2.6.28-13 (2.6.28-13.44)
linux-headers-2.6.28-13-generic (2.6.28-13.44)
linux-image-2.6.28-13-generic (2.6.28-13.44)
linux-restricted-modules-2.6.28-13-generic (2.6.28-13.17)
mesa-common-dev (7.4-0ubuntu3.1)
x11proto-core-dev (7.0.14-2)
x11proto-input-dev (1.5.0-1ubuntu1)
x11proto-kb-dev (1.0.3-3ubuntu1)
x11proto-xext-dev (7.0.4-1)
xlibmesa-gl-dev (1:7.4~5ubuntu18)
xtrans-dev (1.2.3-1)

libxi-dev (2:1.2.0-1ubuntu1)

libxmu-dev (2:1.0.4-1)
libxmu-headers (2:1.0.4-1)

v4l-conf (3.95.dfsg.1-8.1ubuntu1)

libjpeg62-dev (6b-14)

libglib2.0-dev (2.20.1-0ubuntu2)

debhelper (7.0.17ubuntu4)
gettext (0.17-6ubuntu2)
html2text (1.3.2a-5)
intltool-debian (0.35.0+20060710.1)
libatk1.0-dev (1.26.0-0ubuntu2)
libcairo2-dev (1.8.6-1ubuntu2)
libdirectfb-dev (1.0.1-11ubuntu1)
libdirectfb-extra (1.0.1-11ubuntu1)
libexpat1-dev (2.0.1-4)
libfontconfig1-dev (2.6.0-1ubuntu12)
libfreetype6-dev (2.3.9-4ubuntu0.1)
libgtk2.0-dev (2.16.1-0ubuntu2)
libmail-sendmail-perl (0.79.16-1)
libpango1.0-dev (1.24.1-0ubuntu1)
libpixman-1-dev (0.13.2-1)
libpng12-dev (1.2.27-2ubuntu2)
libsys-hostname-long-perl (1.4-2)
libsysfs-dev (2.1.0-5)
libxcb-render-util0-dev (0.2.1+git1-1)
libxcb-render0-dev (1.1.93-0ubuntu3)
libxcomposite-dev (1:0.4.0-3)
libxcursor-dev (1:1.1.9-1)
libxdamage-dev (1:1.1.1-4)
libxfixes-dev (1:4.0.3-2)
libxft-dev (2.1.13-3ubuntu1)
libxinerama-dev (2:1.0.3-2)
libxrandr-dev (2:1.3.0-1build1)
libxrender-dev (1:0.9.4-2)
po-debconf (1.0.15ubuntu1)
x11proto-composite-dev (1:0.4-2)
x11proto-damage-dev (1:1.1.0-2build1)
x11proto-fixes-dev (1:4.0-3)
x11proto-randr-dev (1.3.0-1)
x11proto-render-dev (2:0.9.3-2)
x11proto-xinerama-dev (1.1.2-5ubuntu1)
zlib1g-dev (1:1.2.3.3.dfsg-12ubuntu2)

check (0.9.5-4)
libgstreamer0.10-dev (0.10.22-1)
libpopt-dev (1.14-4)
libxml2-dev (2.6.32.dfsg-5ubuntu4)

19 comentarios:

  1. Me pareció super interesante tu trabajo, instalé el Artoolkit en ubuntu 9.04 y tuve varios problemas, configuré la camara tanto como v4l como gmstreamer y no me funcinaba.
    ME gustaria si pudieras colocar un mini manual de como lo instalaste, ya que los paquetes que indicas que se requieren instalados, no me aparecen en mi Synaptic.
    Gracias por el aporte.

    ResponderEliminar
  2. haré las pruebas hoy mismo quiero experimentar con realidad aumentada.

    ResponderEliminar
  3. @Oscar
    Dime qué problema tienes o que error aparece. Saludos.

    @Darkest
    Estoy seguro que te va a gustar. Las cosas que se pueden hacer son inimaginables. Ya hay juegos (PSP) que usan ésta tecnología. Saludos.

    ResponderEliminar
  4. Pues no he podido correr el ejemplo ./simpleTest aqui el error
    ./simpleTest
    No video config string supplied, using defaults.
    libARvideo: GStreamer 0.10.30

    (:3739): GStreamer-CRITICAL **: gst_parse_launch_full: assertion `pipeline_description != NULL' failed
    Fallo de segmentación

    ResponderEliminar
  5. otro error:
    $ ./simpleTest
    Using config string from environment [v4l2src device=/dev/video0 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24 ! identity name=artoolkit ! fakesink].
    libARvideo: GStreamer 0.10.30
    libARvideo: GStreamer pipeline is PAUSED!
    libARvideo: GStreamer negotiated 1280x800
    libARvideo: GStreamer pipeline is PLAYING!
    libARvideo: GStreamer pipeline is PAUSED!
    Image size (x,y) = (1280,800)
    *** Camera Parameter ***
    --------------------------------------
    SIZE = 1280, 800
    Distortion factor = 637,000000 527,000000 6,550000 1,012757
    1401,90294 0,00000 633,00000 0,00000
    0,00000 1452,18836 483,00000 0,00000
    0,00000 0,00000 1,00000 0,00000
    --------------------------------------
    libARvideo: GStreamer pipeline is PLAYING!
    Segmentation fault

    ResponderEliminar
  6. @darkest
    @sweena
    Ya lo probé y funciona en Ubuntu 10.04 con algunos cambios en los parámetros de gstreamer.
    Voy a escribir un nuevo artículo con el paso a paso.
    Hasta luego...

    ResponderEliminar
  7. Nuevo artículo con datos actualizados: http://elblogdeparq.blogspot.com/2010/11/artollkit-271-ubuntu-1004-funciona.html

    ResponderEliminar
  8. Hello,
    Estamos trabajando y entregando proyectos de Realidad Aumentada, pero utilizando un motor no basado en Flash, obteniendo excelentes resultados a nivel gráfico.

    ResponderEliminar
  9. @john2010,
    Gracias por elegir este espacio para hacer publicidad.
    Es una lástima que todos los ejemplos que ofrecen en su web sean con flash, cuando dicen estar utilizando un motor diferente.
    De todas maneras sería interesante que pudieran realizar algún aporte acerca de ARToolkit.
    Gracias!

    ResponderEliminar
  10. Emmanuel9/7/12 5:39

    Hola, antes que nada permíteme felicitarte el blog esta excelente, estoy comenzando con Ubuntu12.04 y ARToolkit, tengo algunas ideas de Realidad Aumentada que me gustaría empezar a desarrollar, he seguido los pasos de instalación de ARToolKit, pero tengo algunos problemas al ejecutar el make ya que me aparecen varios errores de este tipo


    ../../lib/libARvideo.a(video.o): In function `cb_have_data':
    /home/garatuza/ARToolKit/lib/SRC/VideoGStreamer/video.c:66: undefined reference to `gst_pad_get_negotiated_caps'
    /home/garatuza/ARToolKit/lib/SRC/VideoGStreamer/video.c:67: undefined reference to `gst_caps_get_structure'
    /home/garatuza/ARToolKit/lib/SRC/VideoGStreamer/video.c:70: undefined reference to `gst_structure_get_int'
    /home/garatuza/ARToolKit/lib/SRC/VideoGStreamer/video.c:71: undefined reference to `gst_structure_get_int'
    /home/garatuza/ARToolKit/lib/SRC/VideoGStreamer/video.c:72: undefined reference to `gst_structure_get_double'
    /home/garatuza/ARToolKit/lib/SRC/VideoGStreamer/video.c:74: undefined reference to `g_print'

    La verdad le he dado vueltas al asunto durante ya dos días, pero no encuentro que pueda ser, por lo que veo son algunas referencias pero no se me ocurre nada, podrías ayudarme?

    De antemano te agradezco y aprecio cualquier ayuda y de nueva cuenta, excelente blog

    Saludos

    ResponderEliminar
    Respuestas
    1. Hola Emanuel,

      Quisiera saber si lograste solucionar el inconveniente con el ARToolkit y como lo hiciste. Gracias

      Eliminar
  11. @Emmanuel,

    Ya estoy un poco alejado de este tema, pero te dejo 2 cosas para revisar:

    - make lo ejecutas como sudo? prueba $sudo make
    - Verifica los ajustes de video. Por lo que he visto, una incorrecta configuración de video (alto/ancho) puede dar este error.

    Saludos,

    ResponderEliminar
    Respuestas
    1. Hola Pablo,

      Yo tengo el mismo error, estoy trabajando en Ubuntu Quantal 12.1, pero no comprendo como se pueden verificar los ajustes del video ya que sudo make no funcionó.

      Gracias por tu respuesta.

      Eliminar
    2. Hola JohannaIng,

      No comprendo qué quieres decir con que sudo make no funcionó. Significa que no se compiló? Tienes los paquetes necesarios para compilar (build-essential)? Has ejecutado 'sudo make' y ha dado los mismos errores?

      En caso que lo hayas instalado con make, luego tienes que desinstalarlo (make uninstall) antes de 'sudo make'....

      Saludos...

      Eliminar
  12. Hola Pablo
    Mi problema es el siguiente, he instalado ARToolkit en ubuntu12.04 y todo me funciona bien ya que ejecuto el ejemplo simpleTest sin problema. Pero necesito hacer correr este ejemplo cuando al iniciar linux. Es decir, que se ejecute el solito sin tocar yo nada al iniciar linux. Para ello se que hay varias formas como introducir el path del simpletest en el archivo rc.local dentro de etc o crear un script dentro de etc/init.d. Pues bien, he probado las dos cosas y no soy capaz de hacerlo correr ya que para comprobar si el simpletest se ejecuta he puesto para que se cree un archivo de texto y escriba en el las distancias. Pues el archivo de texto se crea pero la funcion primera glutinit ya no se ejecuta ya que mediante los fprintf que he puesto veo que no aparece nada. Podria ser el error correspondiente a los runlevels?es decir, que es necesario que el simpletest se ejecute solo en el runlevel 2 por ejemplo?. Para que corra en todos los niveles lo he hecho con el comando sudo update-rc.d NameOfYourScript defaults y de momento no funciona. Cuales tu opinion?
    Saludos

    ResponderEliminar
    Respuestas
    1. Mmm....

      Si lo quieres ejecutar como un demonio (servicio) tienes que poner el script en /etc/init.d y crear los enlaces en /etc/rc2.d para que se inicie. Encontrarás más info en internet de cómo administrar los demonios.

      Otra cosa que se me ocurre es si l4v2 está activo antes de hacer login como usuario y si artoolkit podrá acceder a él...

      Esto no lo he probado, y como he dicho antes estoy alejado de este tema.

      De todas maneras te deseo mucha suerte!!

      Eliminar
  13. Hola pablo
    Mi problema es el siguiente:
    He instalado artoolkit y me funciona bien porque ejecuto cualquiera de los ejemplos y funciona. Pero querria que se ejecutara el simpletest al iniciar linux.He creado un script en /etc/init.donde introduzco el path del ejecutable del simpletest, pero no hay manera que corra al iniciar linux. He puesto dentro del codigo del simpletest alguna funcion para crear un archivo de texto y comprobar que se ejecuta pero veo que en que comienza la primera funcion de artoolkit glutinit ya no se printa nada. Cual podria ser el problema?.Sabes si artoolkit puede trabajar bien al iniciar linux?
    Agradeceria mucho alguna sugerencia tuya
    Saludos

    ResponderEliminar
  14. Hola Pablo!!

    Dejame felicitarte por el buen trabajo que has estado realizando.
    Tengo el siguiente proble, cuando ejecuto el simpleLite y el simpleTest, no tengo ningun problema, pero al momento de ejecutar el mk_patt, para poder crear mis propios marcadores, me sale un error, que es el que muestro a continuación, agradecería mucho si me pudieras dar por favor una sugerencia de como poder resolverlo, de antemano agradesco tu aporte .

    [root@localhost bin]# ./mk_patt
    Enter camera parameter filename(Data/camera_para.dat):
    Using supplied video config string [videotestsrc].
    libARvideo: GStreamer 0.10.36

    (mk_patt:30890): GLib-GObject-WARNING **: invalid cast from 'GstVideoTestSrc' to 'GstBin'

    (mk_patt:30890): GStreamer-CRITICAL **: gst_bin_get_by_name: assertion 'GST_IS_BIN (bin)' failed
    Pipeline has no element named 'artoolkit'!
    setupCamera(): Unable to open connection to camera.
    main(): Unable to set up AR camera.

    ResponderEliminar