Desarrollo de un Multimarcador para Realidad Aumentada

Desde Diciembre del 2012 me empeñe en desarrollar mi propia detección de marcadores en CSharp y XNA, para ello estoy empleando OpenCvSharp, un marco de trabajo muy bueno que esta siendo portado desde OpenCv.

Para el desarrollo de diferentes pasos me he inspirado en js-aruco que me permitió entender los pasos para desarrollar la homografía. La codificación del marcador es propia y esta basada en una secuencia de 2 a la 9 combinaciones, es decir el marcador esta dividido en un tablero de 7 x 7 partes (49), de las cuales solo tomo 9 que son las centrales. La parte exterior permite crear una bloque totalmente negro que separa el marcador de la parte blanca, la segunda cuadricula interior determina la orientación y la siguiente cuadricula es la que permite determinar la codificación, cuyo resultado son 512 marcadores posibles.

Una vez ubicado e identificado el marcador, el siguiente reto fue determinar la rotación, traslación y escalado. Fue realmente una tarea ardua, debido a que se tenía que transmitir estos valores a 3D en XNA, que de por si es ya es difícil sino tienes mucha experiencia en trabajar con 3D. Luego de mucho investigar en la matemática proyectiva y funciones recomendadas  (ProjectPoints2, SolvePnP, Rodrigues, etc.) que fueron casi un dolor agudo de cabeza por los datos de entrada como de salida (interpretación); me decidí hacerlo a mi modo…. básicamente basarme en el ángulo de rotación y su cambio según los sentidos de orientación que me permite trasladar y rotar el objeto en 3D según el movimiento del marcado. Esto me  permite economizar en tiempo de ejecución y memoria.

El escalado fue mucho más sencillo pues tomé como referencia el perímetro y en función de este determinar el tamaño del modelo a presentar.

Este es el video de muestra del avance logrado; ahora queda optimizar el código y documentarlo para su posterior liberación.

Juan Cadillo

Aprendiendo con Scratch y WeDo en un entorno aumentado

WeDo es una Kit limitado de introducción a la robótica; dentro de sus guías trae como construir y programar de forma guiada 12 modelos robóticos LEGO® sencillos que se pueden conectar al puerto USB. Su entorno visual de programación detecta automáticamente los sensores y motores (Plug and Play), o las propias creaciones robóticas. Pero para ser sinceros creo que pudieron hacerlo más completo; ya que dos motores no pueden ser activados al mismo tiempo algo que sinceramente es frustrante a la hora de querer hacer otras cosas o aplicaciones prácticas con los niños.
Como alternativa los bloques WeDo son compatibles y pueden ser manejas con Scratch, que es un lenguaje gráfico relativamente simple de aprender por su entorno basado en bloques que se sueltan para crear juegos, historias, arte, música, etc.

Al igual que WeDo solo reconoce un solo motor en su versión 1.4, pero existe una versión que puede trabajar hasta con dos motores.

Scratch, al ofrecer muchas otras posibilidades se convierte en un entorno en el que podemos reutilizar los bloques WeDo para enseñar muchos otros conceptos e introducir al alumno en la programación con sensores, el desarrollo de opciones de control de entrada y salida de datos programable que es lo que a manera de piloto estoy trabajando. Paralelamente estoy empeñado en la construcción de una interfaz que me permita usar los sensores en XNA y lograr aunado a OpenCV proyectos con mayores posibilidades de Aumentar la Realidad (sinceramente es un dolor de cabeza manejar la interfaz USB, por mi falta de experiencia con este tipo de programación, pero de trasteo en trasteo voy avanzando día a día).

Con los niños se ha trabajo un juego de conducción de un automóvil. este proyecto usa el sensor de inclinación para conducir un automóvil en el juego y el sensor de distancia para acelerar. Esta aplicación la hemos copiado de (http://scratch.mit.edu/) he iniciado su uso; en los siguientes días espero que los niños comprendan los diferentes bloques de código y empiece a volar su imaginación, logrando en base a disciplina nuestros propios juegos. Ya que el objetivo del trabajo es despertar la motivación por investigar e innovar.

Aquí el video:

Juan Cadillo

Juego de Realidad Aumentada en 3D usando GoblinXNA

Dentro de los avances en el uso de la Realidad Aumentada que vengo realizando; sigo explorando diferentes plataformas y entornos de trabajo; uno de ellas es XNA. XNA es un entorno creado por Microsoft para facilitar la construcción y gestión del desarrollo de video juegos; dentro de este entorno se ha optimizado ciertas funcionalidades para poder integrar 3D dentro de la plataforma, siendo GoblinXNA una distribución libre que posibilita este objetivo.

GoblinXNA me ha permitido integrar un objeto en 3D a la pantalla y poder manejarlo usando realidad aumentada a través de opencv para el entorno de programación de C#.

El juego es un primer prototipo del manejo y la funcionalidad que se requiere para permite potenciar las habilidades motrices de los niños con video juegos en 3D; que espero pueda seguir evolucionando.

Y un resumen del proyecto presentado a Microsoft Partners in Learning – Latin America y Caribbean Forum que se desarrollara el 19 y 20 de Setiembre en Lima – Perú.

Juan Cadillo