11. Desarrollo Aplicación de Realidad Aumentada

Proyecto IoT con Realidad Aumentada para InterLight

Supervisado por: Manuel Alonso Rosa

El objetivo de este proyecto es enlazar, a través de una base de datos en la nube, los valores de unos sensores de parámetros ambientales y una aplicación de realidad aumentada.

La idea es poder tener una aplicación móvil gráfica e interactiva, donde se puedan ver unos datos a tiempo real al enfocar a un objeto.

Los sensores ambientales están conectados a una placa con un módulo Wifi, ESP-WROOM-02, que recoge los valores de cada sensor y se procesan mediante programación en C, para que sean unos datos útiles.

Este mismo programa, está configurado para conectarse a una red de datos, o través del Wifi, para enviar los valores a la red en una página Web de almacenamiento de datos (ThingSpeak).

En ThingSpeak almacenamos los datos y los compartimos de distintas formas. Se harán dos cosas:

-Crear las gráficas y asignarle los valores correspondientes. (Fig.1.1 y 1.2)

-Copiar los enlaces de la base de datos en JSON. (Fig.2)


Seleccionamos los JSON dependiendo de los datos que queramos visualizar en la App.

JSON es un formato de texto sencillo para el intercambio de datos. Se trata de un subconjunto de la notación literal de objetos de JavaScript, aunque, debido a su amplia adopción como alternativa a XML, se considera un formato independiente del lenguaje. Si nuestro canal de ThingSpeak está en privado, tenemos que tener en cuenta que debemos tener una Clave de lectura.

Esquema

Microcontrolador

IoT cloud Server

Gráficas de datos

Explicacion de APP AR

¿Que es la Realidad Aumentada en el IoT?

En Unity 3D creamos la interfaz de la Realidad Aumentada. Elegimos un Target (Imagen u objeto) con la que reaccionará nuestro programa.

Éste, leerá los datos en formato JSON que salen de ThingSpeak y los mostrará en nuestra interfaz.

Unity 3D + Vuforia

Estructura software

Unity 3D es una herramienta que nos ayuda a desarrollar videojuegos para diversas plataformas mediante un editor y scripting para crear videojuegos con un acabado profesional. Esta herramienta está accesible al público en diferentes versiones, gratuita y profesional, cada cual, con sus ventajas y limitaciones. Evidentemente, la más completa es la profesional, pero es necesario hacer un desembolso que no todo el mundo puede permitirse y sobre todo si estamos comenzando a utilizar dicha herramienta.

Estas versiones que he comentado están enfocadas para desarrollar videojuegos para PC, Mac y Web a través de un plugin para su visionado. Sin embargo, además de estas versiones “básicas”, existen añadidos que permiten trasladar nuestro desarrollo a dispositivos móviles, evidentemente, volviendo a realizar un desembolso para obtener dicha licencia y poder utilizar estas funcionalidades extras en esta herramienta.

Además de esta herramienta, existen en el mercado otras, quizás más famosas, como son UDK de EpicGames o CryEngine de Crytek. Sin embargo, una de las ventajas que obtenemos con Unity 3D es que no estamos anclados a Windows para poder realizar nuestros desarrollos, ya que dispone de versión tanto para Windows como para Mac.

Unity 3D nos provee de un editor visual muy útil y completo donde mediante unos pocos clicks podremos importar nuestros modelos 3D, texturas, sonidos, etc. para después ir trabajando con ellos. Además, incluye la herramienta de desarrollo MonoDevelop con la que podremos crear scripts en JavaScript, C# y un dialecto de Python llamado Boo con los que extender la funcionalidad del editor, utilizando las API que provee y la cual encontramos documentada junto a tutoriales y recursos en su web oficial.

Además, si no somos muy habilidosos con el 3D o necesitamos recursos para nuestros juegos, en la propia aplicación podemos acceder a una tienda como si de la App Store se tratase, donde encontraremos multitud de recursos gratuitos y de pago. Incluso podremos extender la herramienta mediante plugins que obtendremos en dicha tienda.

Hay que tener en cuenta que la licencia que nos ofrecen es válida para Unity 3D en su versión gratuita, por lo que no tendremos las características que nos brinda la versión profesional, pero creo que para empezar y hacer nuestros primeros pinitos en el mundo del desarrollo de videojuego ofrece todas las herramientas necesarias.


Microsoft Visual Studio es un programa de Microsoft que nos permite la edición y modificación de programas/Script de distintos sitios. En este proyecto es necesario, aunque no obligatorio, al usar Unity 3D. Tiene como ventaja, que Unity y Microsoft Visual Studio vienen enlazados de forma predeterminada y a la hora de comprobar los fallos en Unity de las Script, nos especifica exactamente dónde está el error.

Menú de la APP

Menú de Realidad Aumentada

Aprovechando el amplio abanico de oportunidades que ofrece Unity 3D, se puede crear una aplicación para móvil con menú y botones de más información y salida

ThingSpeak

Es una aplicación y una API de Internet de las cosas (IoT) de código abierto para almacenar y recuperar datos de cosas mediante el protocolo HTTP a través de Internet o a través de una red de área local. ThingSpeak permite la creación de aplicaciones de registro de sensores, aplicaciones de seguimiento de ubicación y una red social de cosas con actualizaciones de estado.

Vuforia.

Vuforia es un kit de desarrollo de software de realidad aumentada (SDK) para dispositivos móviles que permite la creación de aplicaciones de realidad aumentada. Utiliza la tecnología de visión artificial para reconocer y rastrear imágenes planas (objetivos de imagen) y objetos 3D simples, como cajas, en tiempo real. Esta capacidad de registro de imágenes permite a los desarrolladores posicionar y orientar objetos virtuales, como modelos 3D y otros medios, en relación con imágenes del mundo real cuando se ven a través de la cámara de un dispositivo móvil. El objeto virtual, después, rastrea la posición y orientación de la imagen en tiempo real para que la perspectiva del espectador en el objeto se corresponda con la perspectiva en el objetivo de la imagen. Por lo tanto, parece que el objeto virtual es parte de la escena del mundo real.

Vuforia SDK es compatible con una variedad de tipos de objetivos 2D y 3D, incluidos los objetivos de imagen "sin marcadores", las configuraciones de múltiples objetivos 3D y una forma de marcador direccionable, conocido como VuMark. Las características adicionales del SDK incluyen la detección de oclusión localizada utilizando 'Botones virtuales', la selección del objetivo de la imagen en tiempo de ejecución, y la capacidad de crear y reconfigurar los conjuntos de objetivos mediante programación en el tiempo de ejecución.

Image target u objetivo

Vuforia target manager

Creando la base de datos necesaria para los objetos “target” que usaremos en el proyecto

Volvemos a la web de Vuforia y en este caso en lugar de a la licencia accedemos a Target Manager. Pulsamos sobre Add DataBase donde le pondremos un nombre y en nuestro caso marcaremos Type: Device. Con

esto lo que le decimos es que el target estará alojado en nuestro dispositivo, siendo Cloud igual pero con la necesidad de consultar por Internet la imagen y con VuMark, cuando son marcas registradas.

En mi caso lo he llamado

prueba _ar_demo y pinchando sobre ella, añadiremos nuestro target. Al pulsar Add target, nos saldrán varios tipos, en el ejemplo usaremos single image, pero se pueden usar objetos 3D reales. La imagen usada tiene

que tener un máximo de 2mb y ser jpg o png. Además debemos saber el ancho de la misma ya que habrá que ponerlo en la caja donde pone Width y darle un nombre. Yo he usado la siguiente imagen

capturada con mi móvil de una carta real. Como veis en la figura, el número de estrellas nos indica la calidad o facilidad que tendra de ser reconocida por nuestro dispositivo como target.


Una vez subida, pulsamos sobre Download Database (All) y marcamos Unity Editor. Esto generará un unitypackage que importaremos haciendo doble clic.

Ahora seleccionamos nuestra cámara AR de nuevo y la configuración de Vuforia para cargar la base de datos descargada, marcando en Databases la nuestra y activándola.


Configurando el objeto de nuestra tarjeta “target” que nuestra cámara detectará

Ahora añadiremos nuestra carta como target a la escena, pulsando sobre Hierarchy botón derecho del ratón, Vuforia e Imagen. Esto nos crea un ImageTarget que al seleccionarlo nos muestra en el Inspector sus opciones.

En Database al pinchar se nos muestra como opción la nuestra que seleccionamos. Y si no lo hace de forma automática, seleccionamos nosotros la nuestra. Aparecerá con su tamaño real, pero lo arreglamos cambiando su Scale en 1 1 1.

Agregando el objeto virtual que aparecerá al detectar nuestro “target” con la cámara

Ahora, creamos un objeto cualquiera, en mi caso un cubo que sea hijo de ImageTarget y le añadimos un material de algún color. Lo escalamos y colocamos donde queremos que aparezca cuando nuestra cámara detecte nuestro target. Este objeto puede

ser un objeto estático como el ejemplo o uno animado. Aquí el límite lo dará nuestra imaginación.

Dispositivo IoT

Estructura Hardware

El ESP-WROOM-02 es una placa que contiene un chip de la familia ESP8266, que es un chip de bajo costo Wifi con una pila TCP/IP completa y un microcontrolador.


El ESP-WROOM-02 cuenta tan solo con 1 puerto analógico, por eso, se utiliza el integrado MCP3008. Los puertos necesarios para la conexión entre la placa y el MCP3008 son:

  • El ESP-WROOM-02 cuenta con dos botones: Reset y Flash.

El botón Reset sirve para reiniciar el programa cargado en la placa.

El botón Flash sirve para cargar el programa en la placa. Debe mantenerse pulsado durante 5-6 segundos.


El dispositivo MCP3008 es un convertidor analógico-digital de aproximaciones sucesivas de 10 bits con circuitería integrada de muestreo y retención.

Este integrado lee hasta 8 señales analógicas y las convierte en digital.

La tensión máxima que admite este integrado es de 5,5v y la mínima de 2,7v.

Vdd y Vref se puentean a la hora del montaje.


Estos sensores no tienes una calibración exacta. Únicamente, toman unos valores básicos que pueden ser interpretados y usados de referencia. Se pueden calibrar perfectamente más delante.

Todos estos sensores están conectados de forma analógica, aunque en varios se tiene la opción de conectarlo de forma digital.

En todos los sensores necesarios, aparecerá el código para pasar de digital a valores útiles.

IoT sensor

Entorno sensores

Datos recibidos

Datos mostrados en AR

Aplicación .APK

SDK Android

Compilando el proyecto para nuestro Android

Ya tenemos nuestro proyecto funcionando, pero lo chulo es poder enseñarselo a la gente y hacerlo más funcional aún ¿no?

Bien, pues vamos a ello, no es nada complejo y el proceso es exactamente el mismo que cualqueir proyecto Android asique los que

ya hayais tocado algo con Unity lo hareis si necesidad de mirar esto o de un vistazo rápido.

Seleccionamosd File -> Build Settings y añadimos la escena actual. Si hasta ahora no la habíamos guardado, (eso es que os gusta el riesgo…

para una demo no pasa nada, pero para un proyecto real no os lo aconsejo) nos pedirá el nombre y ruta de la misma, por ejemplo main.

Ahora seleccionamos Android y pulsamos Switch Platform. Esto creará lo necesario

para el cambio de proyecto. Cuando acabe, pulsamos sobre Player Settings. Marcamos de nuevo Vuforia Augmented Reality Supporte. En Other Settings, en la sección Identification es necesario darle

un nombre a Package Name que suele ser nuestro juego y nuestra web a la inversa, por ejemplo com.croquetasvirtuales.ARdemo y estaría listo.

Al pulsar sobre Build debería de generar el apk de nuestra demo que instalaremos y probaremos en nuestro móvil, pero es posible que nos de error si no hemos configurado aún el path del SDK de Android como comenté

al principio que haríamos a posteriori.

En ese caso iremos a Edit, External Tools, SDK y JDK. Si por algún motivo alguno de los dos no lo hemos instalado, podemos darle a download ahí mismo y tras instalarlo, le pondremos la ruta.

Tras esto, iremos de nuevo a File -> build and settings y haremos el build. Si os da error puede ser que tengáis activado por defecto en Other Settings, la compatibilidad con AndroidTv, así que desmarcadla.

Una vez ejecutado en nuestro móvil tendremos el resultado siguiente:

VID_20190618_102819.mp4
Proyecto IoT con Realidad Aumentada para InterLight.pptx