Descripción rápida.

Bienvenido al blog de "The Minerva Project"!
¿Qué es Minerva? Minerva es una herramienta que facilita la creación de aplicaciones de realidad aumentada, sin requerir un conocimiento profundo en la materia. ¡Simplemente dile a Minerva qué quieres que haga tu aplicación, y ella hará todo el trabajo!

viernes, 4 de marzo de 2011

Sistemas SCA

Minerva basa la especificación de la lógica de la aplicación en los sistemas SCA.

¿Qué es un sistema SCA?

Los sistemas SCA se basan en la utilización de tres tipos básicos de objetos: los Sensores, los Controladores y los Actuadores. Para quien esté familiarizado con el uso de la suite Blender, y más particularmente con su Game Engine integrado, sabrán a lo que me refiero.

Veamos el siguiente ejemplo para entenderlo mejor:

>Imaginemos que queremos hacer una aplicación donde queremos que, cuando se pulse la tecla de Escape, se cierre (una aplicación muy sencilla a todas luces). En vez de utilizar librerías como SDL para detectar la pulsación de teclas y demás, en Minerva se haría de la siguiente forma:

1. Declaramos un MAO (un objeto en minerva) que contenga los MLB (sensores, controladores y actuadores). En nuestro ejemplo vamos a declarar un MAORenderable3DTeapot, que es una taza en 3D. Utilizamos este por ser muy simple de declarar.

2. Declaramos un sensor que se active cuando se pulse la tecla Escape. Este tipo de sensor en Minerva se denomina MSLSensorKeyboard, y le especificamos que sea la tecla que queremos.

3. Declaramos un controlador de tipo AND. Este controlador se activará siempre y cuando todas sus entradas estén activas. En Minerva se denomina MSLControllerAND.

4. Declaramos un actuador para que cierre la aplicación. En Minerva este actuador se denomina MSLActuatorQuitApp.

4. Finalmente conectamos el sensor al controlador, y este al actuador. Ya está hecha nuestra aplicación. En código MSL sería como sigue:

MAOWorld simple_app{
MAORenderable3DTeapot taza{
size = 1.0
reference = Null

MSLKeyboardSensor key_esc{
type = "KEYDOWN"
key = "ESCAPE"
}

MSLControllerAND and1

MSLActuatorQuitApp quitApp{}

key_esc -> and1 -> quitApp
}
}

Y ya está, sin compilar. Por supuesto, Minerva ofrece un variado repertorio de objetos MLB, además de simulaciones físicas, sombras, scripting en Python, propiedades dinámicas para los MAO...

Algo de arquitectura ;)

Algo de arquitectura, pero muy poquito!

Minerva básicamente utiliza el patron Factory y el patrón Controller, para manejar los objetos y los diferentes subsistemas. Está compuesta por:
  • TrackingController.
  • GameLogicController.
  • World.
  • MAOFactory.
  • MLBFactory.
  • PhysicsController.
  • VideoSourceFactory.
Los MAO y los MLB están basados en un diagrama de clases con herencia. Por ejemplo:
MLB
|- MLBSensor
|---MLBSensorProperty
|---MLBSensorKeyboard
|---MLBSensorNear
|--- etc...
|- MLBController
|---MLBControllerScript
|---MLBControllerAND
|--- etc...
|- MLBActuator
|--- MLBActuatorQuitApp
|--- MLBActuatorProperty
|--- MLBActuatorSound
|--- etc...

Por otra parte, dispone del módulo MPY (Minerva Python) para ofrecer la API de minerva al servicio del scripting en Python!

En la documentación oficial de Minerva se especificará todo esto, y mucho más, con más detalle.

Demo: ARSheep!

ARSheep!: Primera Demo liberada!!

En esta demo declaramos un MAORenderable3DOrej de tipo "Clase", es decir, no es un MAO que se represente de forma directa. Lo utilizaremos para tomarlo como modelo para añadir las ovejas dinámicamente con el actuador MLBActuatorAddDynamicObject.

Además utilizamos toda la potencia del motor físico! Una marca sirve como referencia para el suelo, que renderiza sombras y todo! Otra marca sirve como punto de creación de los objetos dinámicos, y una última es una taza maligna que no deja a las pobres ovejas en paz! Muy divertido!

Por supuesto, el código fuente no supera las 80 líneas con comentarios incluidos!




Fases de trabajo

Para la realización del proyecto se han diferenciado varias etapas de trabajo generales, haciendo una estimación del coste temporal que requerirá cada una.

La fase de implementación comenzó el día 18 de febrero de 2011, coincidiendo con el cumpleaños de su autor ;). La entrega, incluyendo la documentación, no debe sobrepasar el 15 de Junio del mismo año.

Fases generales de trabajo:
  1. Estudio previo (~1 semanas): antes de comenzar a picar código, se hizo un análisis de las características, requisitos, arquitectura del proyecto, lista de sensores, controladores y actuadores, etc. Durante esta etapa se definió los nombres de los componentes de Minerva (MAO, MLB, MSL, etc) y se creó el logotipo (la lechuza característica de Minerva).
  2. Realización del Kernel básico (~2 semanas): Comienza la etapa de implementación. Se define la arquitectura básica del sistema: Factorías (de MAO's y MLB's), controladores (de eventos de entrada, de la lógica del juego), representación de objetos tridimensionales y bidimensionales, soporte para las propiedades definidas por el usuario, obtención de vídeo, lanzamiento de excepciones, compilación sencilla (mediante Makefiles).
  3. Incorporación de la engine física (~2 semanas): estudió de la engine Bullet. Incorporación del sensor de colisión, y estudio de la implementación de simulaciones físicas dentro de Minerva. Se idea el concepto de MAO dinámico y estático, además de otros como el MAO clase.
  4. Creación del parser del lenguaje (~2 semanas): definición precisa del lenguaje e implementación mediante Bison y Flex.
  5. Refinamiento (~1 semana): Se dará un tiempo para refinar el proyecto orientado a las aplicaciones que se mostrarán en la presentación del proyecto.
  6. Documentación (~4 semanas): escritura de toda la documentación obligatoria, e impresión de la misma.

Features previstas

El objetivo principal de Minerva es la sencillez de uso acompañada de una gran potencia a la hora de desarrollar aplicaciones de realidad aumentada. Algunas de las features previstas que incorporará son:

  • Un variado repertorio de sensores: de teclado, cercanía, colisión, de propiedades, etc.
  • Posibilidad de añadir propiedades definidas por el usuario a los MAO que compongan la aplicación. Las propiedades pueden ser de diferentes tipos.
  • Un variado repertorio de controladores (AND, OR, etc).
  • Un variado repertorio de actuadores (Motion, cambiar propiedades, etc).
  • Soporte para reproducir audio.
  • Soporte para cargar modelos en formato OreJ con animación.
  • Soporte para crear objetos tridimensionales primitivos (líneas, rutas, etc).
  • Soporte para cargar objetos bidimensionales como texto (dinámico) o imágenes.
  • La mayoría de las propiedades de los MAO pueden cambiarse de forma dinámica, mediante los MLB.
  • Soporte para simulaciones físicas, integradas mediante la engine Bullet.
  • Soporte para grupos de marcas. Aumentan la precisión y la eficacia al hacer el tracking

Aparte, se prevée incorporar otro tipo de features, con carácter avanzado:
  • Interfaz gráfica como editor de nodos para crear los diagramas SCA.
  • Soporte para scripts en Python como controladores.
  • Soporte multicámara.
  • Soporte para comunicaciones con ZeroC Ice permitiendo aplicaciones multijugador.

¿Qué es Minerva?

Minerva es el proyecto de fin de carrera para Ingeniería Informática que desarrollo durante mi último año. Lo estoy llevando a cabo en la Universidad de Castilla-La Mancha, en el campus de Ciudad Real y con el soporte del laboratorio de investigación Oreto.

Según el anteproyecto presentado en Enero de 2011, Minerva es:

"Un sistema de especificación lógica basado en sensores, controladores y actuadores para aplicaciones de realidad aumentada".

Se denomina realidad aumentada a aquel paradigma de interacción cuyo objetivo es superponer objetos virtuales (sintetizados mediante un ordenador) sobre la realidad, dando la sensación de pertenencia a la misma.

Al contrario que ocurre con la realidad virtual, con la realidad aumentada no es necesario recrear virtualmente toda la realidad, sino una pequeña parte que se compone.

Las ventajas que proporciona este paradigma son muy numerosos: en la industria del ocio (invizimals o eye pet son ejemplos de ello), en la educación o incluso en medicina.

Un vídeo de ejemplo de tantos que se pueden encontrar en youtube:







De acuerdo, pero ¿qué tiene que aportar Minerva a todo esto?

Para la realización de una aplicación de realidad aumentada, por muy sencilla que sea, son necesarios conocimientos avanzados en los ámbitos de:
  • Diseño de gráficos por computador (OpenGl, D3D).
  • Captura de vídeo.
  • Reconocimiento de marcas o patrones (ARToolKit, BazAR).
  • Mucha experiencia en lenguajes como C++.
  • Conocimiento de la base matemática subyacente.

Minerva pretende abstraer al programador, por lo que de lo único que debe preocuparse es de qué quiere qué haga su aplicación, sin requerir todo ese conocimiento previo.

Para ello Minerva proporciona un lenguaje especial denominado MSL (Minerva Specification Lenguage), que mediante el uso de los MAO (Minerva Augmenter Object) y de los MLB (Minerva Logic Bricks) permite construir aplicaciones de realidad aumentada con muy poco esfuerzo.

Poco a poco se irá explicando en el blog en qué consisten y cómo se utilizan estos elementos para conseguir realizar aplicaciones de realidad aumentada.

Minerva: Building Augmented Reality apps has never been so easy!