domingo, 19 de febrero de 2012

Android - Vuforia - Realidad Aumentada Móvil

QualComm ha añadido algunas nuevas funcionalides con la versión 1.5 de la extensión  para Unity, cuando tenga un rato lo revisare y lo intentaré actualizar.

Si alguno desconocéis cual es el concepto de realidad aumentada, ved el siguiente vídeo:


Basicamente esa es la idea, ver cosas en la pantalla que en realidad no estan en la vida real.

Tras esta rápida introducción, voy a comentar como configurar Vuforia, una plataforma de realidad aumentada para móvil desarrollada por QualComm, que nos permite realizar aplicaciones que incluyan esta característica tanto para Android como iOS, aunque me concentraré en el tema de Android y la instalación/configuración para Windows.

En la página oficial podéis encontrar tutoriales, en los que me he basado para crear este.


Como obtener Vuforia

Nos vamos a la siguiente página, https://developer.vuforia.com/resources/sdk/android, podemos ver que tenemos un Getting Started, para este tuto supondremos que ya tenemos un JDK, el eclipse, el SDK de Android y el ADT. En este tutorial explico como obtener esas cosas.

Instalar cygwin

Así que empezamos con el cygwin, nos bajamos el setup, lo ejecutamos y elegimos la opción de instalar desde internet, deja la ruta por defecto para instalación y el sitio para descargar paquetes donde este el setup.exe descargado anteriormente, (lo pilla por defecto).

En la selección de paquetes elegid solamente el paquete:

All -> Devel -> "make: The GNU version of the 'make' utility"

Click en skip hasta que ponga la versión actual (3.81-2).

Y elegid el servidor para la descarga que os quede más cerca (si sois de españa seleccionad rediris).

La instalacion debería automaticamente modificar las variables de entorno, sino lo hace, añadir la ruta de la carpeta bin de cygwin a la variable path de la siguiente forma. Nos vamos a propiedades de Mi PC (Equipo en W7), configuración avanzada del sistema (debemos ser administradores), variables de entorno buscamos abajo path y pinchamos en editar, nos vamos al final de la línea y añadimos un ; y la ruta de la carpeta bin completa.


Para probar que funciona abrimos un terminal escribiendo cmd en el cuadro de búsqueda de programas del menu inicio y una vez abierto probamos a escribir bash. Debería aparecer algo tal que así:


Instalar Android NDK

Ahora que ya tenemos instalado el cygwin, instalamos el android ndk, para ellos no lo bajamos de aqui. Descomprimis el zip y tenemos que añadir la ruta del directorio ndk a la variable path, que si lo has dejao por defecto será algo tal que asi: C:\Development\Android\android-ndk-r6\


No useis espacios para la ruta y la ultima barra yo la quite porque me daba problemas, aunque en el tutorial oficial dice que se ponga.

Además yo tuve que hacer un paso extra que no aparece por el tutorial oficial, nos vamos a la ruta del ndk, y tenemos que modificar el ndk-build.cmd, añadiendole en la primera linea lo siguiente:

GNUMAKE=C:\cygwin\bin\make.exe

Es decir la ruta donde tengamos el make.exe de cygwin, si lo habeis dejado por defecto estara ahí, sino poned la ruta que tengais.

Ahora para ver si esta to correcto abrimos de nuevo un cmd, y navegamos hasta la ruta de uno de los samples que encontramos bajo el directorio del ndk, por ejemplo el de lib_plasma, una vez en esa carpeta, escribimos bash, para abrir un interprete de cywin, y ahora escribimos:

ndk-build

Y si va todo bien se compilará la aplicación de NDK de ejemplo y aparecerá algo parecido a lo de la imagen, indicando que se ha generado la librería dinámica libplasma.so.



Instalar QCAR SDK

Lo anterior es necesario para poder usar el sdk de QCAR, lo descargamos desde aquí. Y seguimos las instrucciones de instalación.

Ahora debemos abrir eclipse y añadirle una classpath, windows>preferences>java>build path pinchamos en add y escribimos QCAR_SDK_ROOT como nombre y el directorio del ndk como ruta. Tal y como se ve en la imagen.


Y listo, ya tenemos instalado el QCAR.

Para meter aplicaciones en el móvil directamente usando el adb tienes que tener habilitado el usb debugging y permitir instalar aplicaciones desde fuentes desconocidas, aunque a mi nunca me ha reconocido los móviles que he conectado.

Compilar y ejecutar una aplicación

Vamos a probar una aplicación de ejemplo.

Nos vamos al directorio de qcar-android-xx-yy-zz/samples/ImageTargets y escribirmos ndk-build desde el bash de cygwin, si no os da ningún error perfecto, si os da un error parecido al de la primera imagen teneis que darle permisos al archivo que os de follones, para que podais usarlo.



Ahora que ya tenemos el shared object podemos crear el apk.

Para ello usamos el eclipse, creamos un nuevo proyecto con ImageTargets de nombre y desde un existing source (el directorio del ImageTargets.)


Si nos aparece algún error hacemos un clean del proyecto y debería ir fino ya.

Teniendo el apk ya podemos instalarlo en el móvil al gusto (usando adb, ASTRO, etc).

Tenemos que hacer uso de estas imágenes, que son el patrón que reconoce la aplicación para dibujar la especie de cafetera que deberá aparecer.

Chips
stones

Para imprimirlas usad los pdf que vienen dentro de la carpeta media del proyecto ImageTargets. Algo así tendreis que ver.

Realidad Aumentada con HTC Desire S
Esto esta bien, pero... ¿como hacer los modelos 3D?, usando el NDK se puede, pero puede ser muy pesado, asi que mejor usando un programa de diseño 3d, en este caso Unity.

Realidad Aumentada con Unity

Tan fácil como bajarse la extensión de aquí e instalarla (descomprimirla en alguna carpeta). Obviamente necesitas tener instalado el Unity.

Ahora creamos un nuevo proyecto de Unity importando el qcar-unity-android-xx-yy-zz.unitypackage.

También tenemos que añadir un config.xml y qcar-resources.dat, doble click en qcar-unity-imagetargets-android-1-0-6.unitypackage y en la ventana que se abre elegimos el config.xml, el qcar-resources.dat y el directorio Editor/QCAR/ImageTargetTextures. El proyecto debe quedar tal que así:


Ahora en la cámara que hay en medio, la seleccionamos y la eliminamos con suprimir, ya que vamos a meter la ARCamera, para ello la elegimos de la carpeta QualComm Augmented Reality/Prefabs y la arrastramos hasta la escena, hacemos lo mismo con el ImageTarget, a este ImageTarget le añadimos el chips_scaled que encontramos en la carpeta ImageTargetTextures, arrastrándolo encima hasta la el ImageTarget que aparece en la hierarchy, tras estos pasos y moviendo la vista en la escena ya podremos ver las patatas xD.

En la imagen se ve que el image Target esta a EMPTY, hay que cambiarlo y elegir nuestro chips, sino no funcionará.

ImageTarget debe marcar Chips
Ahora añadiremos un cubo a la escena (GameObject > Create Other > Cube) y lo agregamos al ImageTarget arrastrandolo encima en la vista de Hierarchy y tambien añadimos una Directional light (GameObject > Create Other > Directional Light) pa darle vidilla.

Edito: Para la versión de la extensión 1.5 hay un TrackableEventHandler por defecto, es decir que no necesitas importarlo como se especifica en la siguiente parte.

Para que el cubo desaparezca si no se ve el ImageTarget usamos un TrackableEventHandler, para ello usamos un script ya hecho en otro de los samples, concretamente en el ImageTargetTextures, igual que antes doble click sobre él y en la ventana buscamos el Scripts/TrackableEventHandler y pinchamos en import.

Lo buscamos en la carpeta scripts y lo añadimos arrastrándolo encima del ImageTarget.

Vista del script
Nuevo para la versión 1.5 también tenemos la opción de poder seleccionar distintos targets, puedes especificarlo en la opción Data Set Load Behaviour.

Para desplegar la aplicación, nos aseguramos que tenemos lo siguiente:

Vamos a Edit > Project Settings > Player > Android icon). Pinchamos en el simbolo de Android y nos aseguramos que Default Orientation no esta en Auto Rotation, que Minimum API Level esta a Android 2.1 'Eclair' (API level 7) o más y que el Bundle Identifier esta a un nombre valido (e.g. com.mycompany.firstARapp).

Visión de panel de configuración
Ahora salvamos la escena con File > Save Scene y configuramos el build con File > Build Settings, y aseguramos que este seleccionada nuestra escena, sino pinchamos en add current.

Intentad que la vista tenga una pinta similar a la imagen siguiente, para ello hay que ir moviendo los distintos elementos, cambiarle el tamaño al cubo y demás, nunca había uso Unity y lo conseguio hacer, así que no creo que os cueste mucho.

Vista General
Ahora build & run y nos generara el .apk que podremos instalar en el movil.

Una vista del resultado

Se puede ver el cubo, penco pero se ve xD
Y esto es todo, mas adelante intentaré hacer algún tuto más profundizando, como por ejemplo poder meter la RA solamente en una actividad de android, no tener que generar todo el .apk, pero para eso primero tengo que investigar, porque aun no sé siquiera si se puede!

Se ha quedao un tutorial bastante completo, pero he preferio meterlo to en uno, ya que esta to relacionao!

Nada mas, un saludo!

52 comentarios:

  1. Muchas gracias, me ha sido de ayuda

    ResponderEliminar
  2. este programa sirve si lo ejecuto desde el emulador de eclipse?

    ResponderEliminar
  3. pos debido que a la mano no tengo un dispositivo movil con android estoy tratando de ejecutarlo del emulador de eclipse pero no sale nada entonces no se si este programa sirve si lo ejecuto desde el emulador de eclipse?

    ResponderEliminar
  4. No funciona si lo ejecutas desde el emulador, tienes que hacerlo en un móvil compatible, desde el siguiente enlace lo puedes consultar:

    https://ar.qualcomm.at/qdevnet/support_file/download/Android/android%20supported%20devices/Supported_Devices_Android.pdf

    ResponderEliminar
  5. Ya Hice todos los pasos y nadaa!!! No me muestra el mugreeee cubooo!!

    ResponderEliminar
    Respuestas
    1. En algún paso estarás fallando, porque si que funciona, mira a ver si es porque el cubo lo has dibujao mu pequeño xD

      Eliminar
    2. Ya me salio jaja, es que no le había dicho a la Cámara que tomara el Data Set!!!
      Oye una pregunta, has intentado meter video??

      Eliminar
    3. No me metio tan a saco con la realidad aumentada, lo del video ni idea como irá, así que siento no poder ayudarte por ahora xD

      Eliminar
  6. Me gustaría contactar por mail contigo para algunas consultas.
    Te dejo mi mail: pk2traspk2@gmail.com


    Gracias

    ResponderEliminar
    Respuestas
    1. El tema de realidad aumentada por ahora lo tengo aparcaillo, aunque en breve planeo intentar ponerme con ello más a fondo, de todos modos intentaré echarte una mano en lo que pueda.

      Un saludo

      Eliminar
  7. Hola, lo primero agradecerte el tutorial. Me ha sido de bastante ayuda hasta donde he llegado! He intentado reproducir todos los pasos pero al arrancarlo desde el movil siempre me pasa lo mismo, sale el splash y se cae la aplicación. a alguien le ha pasado lo mismo?
    Gracias y un saludo

    ResponderEliminar
    Respuestas
    1. Ami me pasa igual o aveces cuando cambio la configuracion en player settings aparece un mensaje de que se detuvo el proceso, tengo duda si es por mi dispositivo, es un LG optimus One.
      Lo pudiste solucionar?

      Eliminar
  8. hola a todos excelente tuto me ayudo este y la documentación de vuforia para mac, así que ya saben que tmb va bien con mac

    saludos

    ResponderEliminar
  9. Hola, logre sacar un objeto 3D con Vuforia con mi iphone, pero ahora quisiera importar un objeto 3D con extencion .FBX el cual tiene una animación predeterminada, al importarlo a Unity, y compilarlo en el iphone, el objeto se muestra pero no corre la animacion. Que puede ser?

    ResponderEliminar
    Respuestas
    1. Solo he probado a mostrar objetos estáticos, no con animaciones, así que ni idea.

      Eliminar
  10. hola buenas, una pregunta,
    estoy tratando de compilar los otros ejemplos de vuforia, que tienen botones virtuales, y al momento que se esta instalando y va a ejecutarse sale una excepción,que me detiene la aplicacion, esto pasa con todos los ejemplos de vuforia que tienen botones virtuales

    ResponderEliminar
    Respuestas
    1. Los que yo probé de botones virtuales me funcionaron igual que el resto.

      Eliminar
  11. Muy bueno el tutorial aunque no e logrado hacerlo
    Tengo varias dudas del porque puede estar fallando haber si me podias hechar una mano.
    -Con que version de unity lo hiciste? ahora mismo lo estoy intentado con 3.5 pero al parecer tiene un error esta version
    -Y la otra duda es si mi android sea el adecuado es un lg optimus one, aunque si tiene OS 2.3
    Gracias (Y)

    ResponderEliminar
    Respuestas
    1. Mi versión de Unity es 3.4.0f5 y lo probé en un HTC Desire con android 2.2 creo recordar.

      Eliminar
    2. Ok, gracias
      Pues tambien ya lo intente con esa misma version de unity, estoy en el oyo jaja
      una ultima cosa que me podria sacar de esta seria si te acordaras que poner en Device Filter en las opciones de Player Settings si ARMv6 with VFP o ARMv7 only, aunque ya lo intente todo :S
      Gracias.

      Eliminar
  12. hola que tal, muy bueno el tuto! pero tengo problemas en cuanto al tamaño de la exportacion, los .apk q genero tienen tamaños de 9MB o 12MB algo q pienso es muy grande para una aplicacion del movil, si me puedes ayudar a bajarle el tamaño te lo agradeceria!!

    ResponderEliminar
    Respuestas
    1. Rob, que tal
      Viendo que a ti si te funciono, si me puedes hechar la mano pasandome el apk que tu compilaste para quitarme la duda si es mi android o estoy haciendo mal mi apk.
      este es mi correo fer16hape@hotmail.com
      Gracias (Y)

      Eliminar
    2. Fernando te agregue al msn, vamos a ayudarnos pues!! que yo tambien ando haciendo mal todo jeje

      Eliminar
  13. hola, alguien me podria ayudar?? necesito saber como hago para que la aplicacion se instale directamente en la memoria SD, ya que pongo la opcion prefer external pero aun asi no se instala en la SD y otra cosa.. quisiera poner una equis (x) en la esquina derecha de la pantalla para cerrar la aplicacion.. se podra hacer? trabajo en unity3d muchas gracias!!

    ResponderEliminar
    Respuestas
    1. Lo de instalar directamente en la SD, el unity te generaba el apk, asi que con eso deberías poder instalarlo donde quieras, respecto a lo de la X, habría que meterse más a fondo, y no me he metido tan a fondo en ello.

      Eliminar
  14. Saludos, yo estoy teniendo problemas similares a los que tienen algunos de ustedes, sólo logré ejecutar el apk de este tutorial, los demás no pude con vuforia y ahora con unity necesito la licencia para Android y eso me ha detenido alguien tiene una idea de que puedo hacer que no sea tan caro???

    ResponderEliminar
    Respuestas
    1. Tu solución es GOOGLE y las palabras unity free download y tal y cual... xD

      Eliminar
  15. Hola, alguna persona sabe como resolver este problema, al crear el apk en Unity sale un mensaje de error y dice que no encuentra la ruta del SDK y despues que no existen plataformas instaladas, dejo mi correo (locus1232000@hotmail.com) muchas gracias

    ResponderEliminar
  16. No se cuanto tiempo tenga de esto, pero para poder usar unity con android me sale la licensia de android en 400 dolares :(.

    ResponderEliminar
  17. Hola, estoy intentando seguir los pasos de tu tutorial, porque me parece bastante más completo que el que se facilita en la web de Qualcom. No sé si hay algo que he hecho mal desde el principio o será problema de versiones, pero cuando dices "Para que el cubo desaparezca si no se ve el ImageTarget usamos un TrackableEventHandler, para ello usamos un script ya hecho en otro de los samples, concretamente en el ImageTargetTextures, igual que antes doble click sobre él y en la ventana buscamos el Scripts/TrackableEventHandler y pinchamos en import", no te sigo. Yo no encuentro la carpeta ImageTargetTextures, y si hago una búsqueda en todo mi equipo del script TrackableEventHandler tampoco lo encuentro.
    Al comienzo del tutorial , la parte de Unity, tampoco encontraba el "qcar-unity-imagetargets-android-1-0-6.unitypackage" y en su lugar he importado el "vuforia-unity-imagetargets-android-1-5-10.unitypackage". En este paquete, las rutas para el .dat y .xml no eran exactamente las que tú indicabas, pero en principio no pensaba que esto podría traer problemas.
    Se te ocurre que puede pasar? O a alguien le ha pasado lo mismo al comenzar? Porque entiendo que sin este script el ejemplo no puede funcionar.
    Muchas gracias de antemano
    Anna

    ResponderEliminar
    Respuestas
    1. He estado revisando por encima el tutorial de Qualcomm, y han hecho algunos cambios, así que el que aparece aquí esta desfasado a estas fechas, ahora mismo no dispongo de tiempo para actualizar este, así que por ahora se queda así, pero he encontrao lo siguiente en el nuevo tutorial de Qualcomm:

      New to Vuforia AR Extension v1.5, a default event handler (DefaultTrackableEventHandler) has been added to the Image Target. This default handler will cause the cube you just drew to automatically appear or disappear – an automatic reaction to the appearance of the target in the video.

      Así que parece que ese script ya lo mete automático, no haría falta realizar esa parte de mi tutorial. Esta nueva versión no la he probado, así que no sé como de bien irá.

      Lo dicho, hasta que tenga tiempo para ponerme a actualizarlo se queda así, estad atentos xD.

      Un saludo.

      Eliminar
  18. J, muchas gracias por tu respuesta. La verdad es que al final era una tontería lo que me pasaba. Sólo tenía que marcar una opción de la configuración del ImageTarget, que era precisamente de la que tú hablas y que no viene marcada por defecto "DefaultTrackable Event Handler (Script)".
    Estoy investigando herramientas de este tipo como parte de mi tesina de fin de máster. Quería saber si podría tener tu correo para compartir novedades y consultas, si quieres y si es que aún sigues trabajando en este tema.
    Saludos!
    Anna

    ResponderEliminar
    Respuestas
    1. Ahora mismo estoy de vacaciones, y no estoy con esto, pero puede que en unas semanas me ponga de nuevo porque es un tema bastante interesante.

      En la sección de About! tienes un enlace para contactar conmigo por mail.

      Un saludo.

      Eliminar
  19. Que tal, muy buena tu guía paso a paso, tengo un par de consultas ya que no he encuentro mucha información español.

    1. ¿Como puedo agregar un nuevo Target Imag, ya tengo el .dat y el .xml que es lo que debo hacer ahora?

    2. Se puee agregar una simple imagen como una fotografia para que aparezca? estoy haciendo pruebas sobre el ejemplor de ImageTarget.

    ResponderEliminar
  20. te sobraste con este tuto muchas gracias

    ResponderEliminar
  21. seguí tus pasos uno por uno pero la cuenta free de unity no me dejo compilar la aplicación para android así q lo realice en eclipse y todo muy bien no me tiro error al generar la apk. cuando instalo la apk... arranca el aplicativo, pone a trabajar la cámara pero cuando enfoco las imágenes desde los pdf no de muestran las teteras....alguna idea de lo q pueda ser pdt: muchas gracias me ha servido un resto

    ResponderEliminar
  22. jejeje perdón ya me funciono es q aparentemente la capacidad de la cámara de mi tablet no es muy buena y le cuesta un poco mostrar la tetera...muchas gracias por toda la info

    ResponderEliminar
  23. Estoy intentando correr el ejemplo pero me muestra una leyenda que dice:
    [2012-11-22 04:55:32 - ImageTargets] Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
    [2012-11-22 04:55:32 - ImageTargets] Please check logcat output for more details.
    [2012-11-22 04:55:32 - ImageTargets] Launch canceled!

    Me podrias hechar la mano mi correo es: jonathanflores159@gmail.com

    ResponderEliminar
    Respuestas
    1. Borra aplicaciones del emulador o usa la opción de wipe data user desde la ventana de editar de emuladores para que te limpie información, porque como dice es que no tienes suficiente espacio en el dispositivo.

      Eliminar
  24. Hola, yo he utilizado el ejemplo de Vuforia del que estáis hablando para implementar una vista de realidad aumentada en mi proyecto Android: ModelAN3D (lo podéis encontrar en Google Play en https://play.google.com/store/apps/details?id=com.modela3d). La diferencia es que yo no renderizo la escena desde el código C++, lo hago desde Java.

    ResponderEliminar
    Respuestas
    1. He mirado tu aplicación y parece que esta to curra, no puedo probarla porque no tengo un móvil Android pero en cuanto tenga a mano uno le echaré un vistazo.

      Gran trabajo!

      Eliminar
  25. Estimado,

    hace unas semanas he intentado hace un app con unity y vuforia y la verdad es que he seguido los pasos de este y de la documentación oficial y al ejecutar la app no he logrado aun ver el modelo que agrego (el de ejemplo solo me ha funcionado en la version que se usa el NDK, en la de unity tampoco lo he logrado). Si puedes ayudarme, me encantaria enviarte el proyecto unity que hice y me ayudes a ver que podría estar faltando.

    Saludos.

    ResponderEliminar
  26. Muchas gracias, mejor que leerlo en inglés desde la web de Qualcomm. Gracias

    ResponderEliminar
  27. hola, donde se puede ver el tutorial en ingles de la web de Qualcomm??? que no lo encuentro

    ResponderEliminar
    Respuestas
    1. Han actualizado la web de vuforia por eso el enlace de la entrada no iba, aqui esta el nuevo: https://developer.vuforia.com/resources/sdk/android

      Eliminar
    2. Muchas gracias, como estoy en el paro para quien le sirve en www.formaciononlinegratis.net hay muchos cursos gratuitos, algunos de ellos te dan certificado. Saludos ;)

      Eliminar
  28. Hola! no se como modificar el ndk-build del ndk... me puedes ayudar???

    ResponderEliminar
  29. donde podria encontrar una guia mas actualizada debido a q el sdk de android viene conjunto al eclipse de forma automatica y todo instalado no se que hacer y necesito con urgencia los pasos nuevos para instalar el vuforia sdk

    ResponderEliminar
    Respuestas
    1. Si ya tienes instalado el sdk de android pues trabajo que te ahorras, empieza el tutorial desde instalar cygwin y sigue adelante.

      Eliminar
  30. Buena alguien que haya logrado poner un video? por lo menos usando el sample que deja vuforia en playback, necesito hacer una aplicacion de realidad aumentada para moviles y que aparezca un video, he descargado el ejemplo para unity y el ejemplo para ndk, por el momento estoy probando en unity, te descarga un package con todo incluido lo que no se es como armar el proyecto, es decir que ir poniendo, primera camara, despues imagetarget el data set, despues no se donde colocar el video me ayudan! :D

    ResponderEliminar

Ponte un nombre aunque sea falso, que Anó-nimo queda mu feo :(