Android conoce a Blender (OSC)

Gracias al protocolo OSC (Open Sound Control), podemos establecer comunicacion entre diferentes aplicaciones en nuestro sistema, e incluso entre diferentes ordenadores. Funciona enviando mensajes etiquetados a una IP y puerto especificada en una red compartida.

En otras palabras, podemos mover objetos en blender utilizando el telefono como si fuese un mando de la wii o similar…

Android meet Blender (OSC) from Carlos Padial on Vimeo.

Gracias al protocolo OSC (Open Sound Control), podemos establecer comunicacion entre diferentes aplicaciones en nuestro sistema, e incluso entre diferentes ordenadores. Funciona enviando mensajes etiquetados a una IP y puerto especificada en una red compartida.

En otras palabras, podemos mover objetos en blender utilizando el telefono como si fuese un mando de la wii o similar…

En este ejemplo, el telefono android actua como cliente, enviando mensajes con informacion de sus sensores de orientacion y su acelerometro, ademas de enviar las coordenadas de la pulsacion de nuestros dedos en pantalla. Esto es posible gracias a una aplicacion gratuita del android market llamada andOSC.

Esta aplicacion utiliza tres sensores del android:

  1. Touch(x,y)           – mensage etiquetado : /touch (+ dos numeros flotantes)
  2. Accelerometer   – mensage etiquetado : /acc   (+ tres numeros flotantes, uno por eje)
  3. Orientation          – mensage etiquetado : /ori (+ tres numeros enteros, uno por eje, en grados)

Por otro lado tenemos el motor de juegos de Blender (BGE), funcionando como servidor OSC, leyendo los mensajes que llegan al puerto. Para ello utilizo una libreria de OSC llamada liblo, con sus vinculos (bindings) para python: Pyliblo. Necesitamos instalar ambos y copiar el fichero liblo.so a la carpeta python de nuestro blender, para asi poder importarlo desde el BGE.

En el ejemplo tenemos dos scripts ejecutandose. El primero, llamado server.py, gestiona los mensajes y crea una cuantas propiedades para almacenar los valores recibidos. El servidor OSC necesita ser creado y cerrado en cada ciclo para que el BGE pueda actualizar los eventos. Es la manera mas simple de crear un servidor OSC con liblo.

El segundo script movecube.py, esta atento a los valores que cambian y modifica al cubo protagonista de acuerdo a esta informacion.

Puedes ver los dos scripts y la configuracion del BGE dentro del fichero .blend (adjunto abajo)

Esta implementacion esta lejos de ser perfecta, pero es un buen comienzo para utilizar OSC con Blender 25

Instrucciones:

  1. Instalar los modulos liblo y pyliblo modules y hacerlos activos en Blender
  2. Instalar la aplicacion andOSC en el movil android (aplicación gratuita, descargala aqui)
  3. Configurar la direccion IP y el puerto en la aplicacion de android (obten la IP ejecutando ifconfig en el terminal)
  4. Comienza el juego presionando P       (Puedes jugar a cambiar los valores de la variable sens en movecube.py para obtener una respuesta mas suave)

El acelerometro funciona de un modo extraño porque esta siempre mezclado con la rotacion del movil, por eso lo tengo desactivado. Puedes eliminar el # de la ultima linea para probarlo