Interfaz de usuario impresionante

Hoy me han hecho llegar el enlace de una empresa llamada Leap que está desarrollando un producto (llamado igualmente Leap) muy interesante: Se trata de un interfaz que es capaz de detectar la posición de cada dedo en el espacio, permitiéndonos interactuar con el computador mediante gestos realizados en el aire. Inmediatamente uno recuerda la interfaz que aparece en la película Minority Report. Creo que sería interesante adquirir alguno para experimentar con él en el ámbito de la rehabilitación, uno de las áreas en las que investiga nuestro grupo de Robótica y Tecnología de Computadores Aplicada a la Rehabilitación.

“Simulación del láser completada”

En estos días ando liado completando una simulación de láser mediante un autómata celular escrito para CUDA. Está basado en trabajos previos realizados por mi compañero José Luís Guisado Lizar. Ya hemos obtenidos resultados, y vamos a pasar a la fase de redactar un posible artículo. Hace unos días, cuando le comentaba a un amigo esto en lo que estaba trabajando, me recordó la escena de la película Tron en la que el ciertos programas están trabajando en una simulación de láser y alguno de ellos dice: “simulación del láser completada”. Este trabajo tiene estos gratos momentos.

No es la escena que menciono pero es otro "momento láser" de la película. Fuente: http://weirdthings.com/2011/01/futurism-why-atom-lasers-are-awesome/

 

Mis primeros pinitos desarrollando para iOS

Este fin de semana he dedicado unas horas a introducirme en el desarrollo de aplicaciones para iOS. Ya había hecho algún intento, pero no me había puesto a ello porque tanto en el trabajo como en casa tengo (tenía) Mac OS X Leopard y las versiones del SDK que se pueden descargar de la web Apple solo son válidas para Lion o Snow Leopard. Buscando por internet pude encontrar en el blog Drop the Nerd el enlace al SDK de iOS para Leopard, en la misma web de Apple. A continuación me bajé algún ejemplo ya hecho y descubrí que necesita firmar de alguna forma las aplicaciones para poderlas probar en un iPhone (aunque de todas formas aún no tengo ninguno). Por suerte hay formas de crearse uno mismo una firma digital para ello.

Con todo listo, me puse a buscar cursos que me permitieran aprender tanto Objetive-C como a desarrollar para iOS, que no son la misma cosa. Una de las páginas que más útil me ha resultado es esta en la que se enseña rápidamente las características de Objetive-C comparándolas con las equivalentes en otros lenguajes orientados a objetos como C++ o Java. Tras leer ese breve tutorial ya podía ir entendiendo código escrito por otros en Objetive-C. Tras leer lo que ya considera suficiente sobre Objetive-C decidí ponerme manos a la obra (lo que más nos gusta a los programadores) y busque un curso que ensañará paso a paso a programar un juego para iOS (en el fondo lo que queremos todos es hacernos ricos con el nuevo Angry Birds). He encontrado un curso muy básico pero que cubre la mayoría de los puntos más básicos del desarrollo un juego (bucle del juego, detección simple de colisiones, IA, pantalla inicial y sonido). Hay que tener un poco de paciencia con el curso porque se ve que tras un traslado o migración ha perdido la maquetación y algunos enlaces, pero es bastante productivo:

Y he aquí mi criatura:

Publicaciones sobre CUDA y AER

El pasado verano vimos aceptados en el congreso ICONIP 2011 y recientemente publicados un par de trabajos en los que he participado :

 

AER Spiking Neuron Computation on GPUs: The Frame-to-AER Generation

Neuro-inspired processing tries to imitate the nervous system and may resolve complex problems, such as visual recognition. The spike-based philosophy based on the Address-Event-Representation (AER) is a neuromorphic interchip communication protocol that allows for massive connectivity between neurons. Some of the AER-based systems can achieve very high performances in real-time applications. This philosophy is very different from standard image processing, which considers the visual information as a succession of frames. These frames need to be processed in order to extract a result. This usually requires very expensive operations and high computing resource consumption. Due to its relative youth, nowadays AER systems are short of cost-effective tools like emulators, simulators, testers, debuggers, etc. In this paper the first results of a CUDA-based tool focused on the functional processing of AER spikes is presented, with the aim of helping in the design and testing of filters and buses management of these systems.

 

An approach to distance estimation with stereo vision using address-event-representation

Image processing in digital computer systems usually considers the visual information as a sequence of frames. These frames are from cameras that capture reality for a short period of time. They are renewed and transmitted at a rate of 25-30 fps (typical real-time scenario). Digital video processing has to process each frame in order to obtain a result or detect a feature. In stereo vision, existing algorithms used for distance estimation use frames from two digital cameras and process them pixel by pixel to obtain similarities and differences from both frames; after that, depending on the scene and the features extracted, an estimate of the distance of the different objects of the scene is calculated. Spike-based processing is a relatively new approach that implements the processing by manipulating spikes one by one at the time they are transmitted, like a human brain. The mammal nervous system is able to solve much more complex problems, such as visual recognition by manipulating neuron spikes. The spike-based philosophy for visual information processing based on the neuro-inspired Address-Event-Representation (AER) is achieving nowadays very high performances. In this work we propose a two-DVS-retina system, composed of other elements in a chain, which allow us to obtain a distance estimation of the moving objects in a close environment. We will analyze each element of this chain and propose a Multi Hold&Fire algorithm that obtains the differences between both retinas.

Trabajo Fin de Máster

El pasado Julio finalicé la realización del Máster en Ingeniería de Computadores y Redes impartido en la ETSII. Mi Trabajo Fin de Máster consintió en la realización de un sistema empotrado basado en un micro-controlador Cygnal C8051F340 que funcionaba como modulador en amplitud de sonido. Básicamente un pedal de efecto para guitarra. Como es natural sufrí del temido efecto demo, y unos días antes de la presentación quemé la placa y tuve que improvisar con otra igual pero no adaptada a la caja en la que presenté el proyecto. El único material gráfico del que dispongo en este momento es un vídeo de una versión no final del proyecto.

EDITO:

Pongo el “manual” para que se entienda un poco lo que hace:

16535.jpg

1.Pulsador de encendido/apagado: Pulsándolo activa y desactiva el procesado de la señal
2.Indicador de encendido/apagado: Indica cuando el procesado de señal está activado (led encendido) o el pedal deja pasar la señal sin modificar (led apagado).
3.Pulsador “tap tempo”: Pulsándolo repetidas veces marcando un ritmo, el pedal calcula el tempo y modifica su funcionamiento en función de este.
4.Indicador de tempo: El led indicador parpadea marcando el compás con un destello verde. En el primer compás del patrón que se está siguiendo, el led emite un destello rojo.
5.Entrada estéreo: Entrada de señal de tipo jack de 6,35 mm estéreo
6.Salida estéreo: Salida de señal de tipo jack de 6,35 mm estéreo
7.Conector para pulsadores externos: Conector de tipo jack de 6,35 mm estéreo que permite conectar dos pulsadores externos para realizar con el pie las funciones de selección de programa (botones 12)

 

16536.jpg

8.Conector de alimentación: Conector para una fuente de alimentación externa de 9v, con el centro negativo (Estándar de facto en el mercado de pedales de efecto)
9.Conector USB: ELIMINADO actualmente del proyecto.
10.Indicador de programa seleccionado: Mediante dos dígitos se muestra el programa seleccionado. Un programa consta de un patrón rítmico y una configuración específica de los parámetros.
11.Grabación de programa: Botón que permite almacenar en memoria no volátil la configuración actual de los parámetros. Cuando se pulsa una vez, los dígitos del programa parpadean. A continuación, mediante los botones de selección de programa se escoge el programa en el que se desea grabar la configuración. Si se pulsa de nuevo el botón de grabación de programa se guarda definitivamente el programa seleccionado. Si no se pulsa ningún botón al cabo de unos segundos se cancela la grabación de programa.
12.Selección de programa: Mediante estos botones se puede seleccionar el programa que se desea utilizar.
13.Control de tempo: Este control giratorio permite ajustar el tempo de la ejecución del patrón. Permite ajustar la velocidad hasta el rango de modulación en anillo. Si se pulsa el pulsador de “tap tempo” se ignora su valor.
14.Controladores de la forma de onda de los pulsos: Mediante estos controles se puede modificar la forma de los pulsos que modulan la señal.

16537.jpg

Se muestran a continuación una serie de ejemplos de formas que se pueden conseguir mediante la manipulación de estos controles.

 

16538.jpg

Importante: El oído humano percibe el volumen de los sonidos de forma logarítmica. Es decir, para percibir que una fuente de sonido ha duplicado su volumen de emisión, esta en realidad ha de multiplicarlo por 10. Las formas de ondas mostradas están representadas en escala logarítmica.

RetroHard Midi

Después de llevarme 2 días completos actualizando una Xubuntu  desde la 9.4 hasta la 11.4 a base de descarga y actualización, descarga y actualización, … esta tarde me he puesto con el ¡RETROHARD MIDI!. Tengo un teclado MIDI antiguo de Creative, un Blasterkey, que venia en pack con una SoundBlaster AWE 32.

Creative Blasterkeys

Se conecta al ordenador por el desaparecido y obsoleto puerto de juegos. Tiene un conector estándar MIDI OUT (DIM 5), así que se puede aprovechar. El problema es que su única fuente de alimentación es dicho conector. Antes de poner a modificarlo para añadirle la fuente quería probarlo con una tarjeta de sonido PCI con chip de Yamaha y el necesario puerto de juegos. De ahí que me haya pasado 3 días montando y actualizando una torre de PC desahuciada con una placa con un Atom 230, que se negaba a aceptar Windows XP, Windows 7 y Ubuntu 11.4. Solo he conseguido instalarle desde un pendrive una Xubuntu 9.4, y desde ahí el largo calvario hasta Xubuntu 11.4.

Con el sistema actualizado y con ALSA instalado, no tenía forma de ver el interfaz MIDI de la tarjeta. Después de mucho buscar en internet, la solución era añadir al fichero /etc/modprobe.d/alsa-base.conf la linea:

options snd-ymfpci mpu_port=0x330 fm_port=0x388 joystick_port=1

Y ejecute en un terminal

$ depmod -a

Comprobé que habia funcionado con

$ aplaymidi -l
Port    Client name                      Port name
14:0    Midi Through                     Midi Through Port-0
16:0    Yamaha DS-1S (YMF744)            Yamaha DS-1S (YMF744) MIDI
17:0    OPL3 FM synth                    OPL3 FM Port

He hice alguna pruebas. Me ha llevado toda la tarde encontrar un programa interesante de simulacion de sintesis analogica: phasex. Hacerlo funcionar también ha tenido su trabajo pues me he tenido que instalar JACK, y para ello he tenido primero que saber de su existencia y entender su utilidad. Una vez lanzado el demonio correspondiente con:

$ jackd -d alsa

Desde QjackCtl he realizado las conexiones con cables virtuales y por fin me he puesto a jugar:

sintetizador

Debo dar mi agradecimiento al blog: http://www.josegdf.net/2009/01/sonido-en-ubuntu-studio.html, que me ha puesto en la pista correcta.

Robot de dos ruedas: Hardware Beta listo

Este medio día he terminado la plataforma sobre la que voy a realizar mis primeros experimentos sobre robótica. Se trata de un robot de dos ruedas sobre las que se tiene que mantener en equilibrio, de momento sin desplazamiento. Se trata del clásico problema del péndulo invertido. Con el hardware que tiene ahora mismo únicamente podré llegar hasta ahí. Si consigo unos giróscopos se los conectaré en breve plazo (si antes he conseguido que no se caiga, claro). Lo siguiente será añadirle control remoto para poder dirigirlo mientras se mantiene en equilibrio.

Robot de 2 ruedas