Arduino firmware troubleshooting

Hi everybody,

We are having some problems with the automatic firmware upload for Arduino. In the meantime, you can still use Physical Etoys on direct mode by manually uploading the firmware using the Arduino tools.
You can download it from here:

https://drive.google.com/open?id=0B3IlAFpF-YyPUGNxNmQzN1VvUlk

No hay Comentarios

A little big revolution towards accesibility!

Hi, people!

Today, I am very proud of announcing that Physical Etoys has eye tracking capabilities because we’ve added the Tobii EyeX tracker device.  The good thing of doing this development is that children can make projects  for people who can only move their eyes! We are letting them communicate, learn, play and explore the world in a better way 🙂

Spread the voice and share our happiness!

 

¡Hola, gente!
Hoy estoy muy orgulloso de anunciarles que Physical Etoys puede seguir el movimiento de los ojos porque agregamos el dispositivo Tobii EyeX tracker. ¡Lo bueno de este desarrollo es que los chicos van a poder realizar proyectos para personas que sólo pueden mover sus ojos! Les estamos permitiendo comunicarse, aprender, jugar y explorar el mundo de una forma mejor 🙂
¡Corran la voz y compartan nuestra felicidad!

No hay Comentarios

Conociendo coordenadas reales con Kinect

Hola!
En el marco del proyecto de SLAM que estamos desarrollando en este grupo de investigación (Ver aquí), les mostraré un extracto del trabajo en proceso.

Kinect nació como un periférico para la consola de juegos Xbox 360 de Microsoft. Llegaba dispuesto a cambiar la forma de jugar a los videojuegos, transformándonos en el «mando» con el que controlar a los personajes y demás movimientos virtuales, con movimientos corporales.
Rápidamente, dado su éxito, este dispositivo ha ampliado sus horizontes, convirtiéndose en un sistema de visión artificial muy utilizado por investigadores de todo el mundo, para lo cual la propia Microsoft decidió lanzar un SDK (software development kit) para facilitar el desarrollo de aplicaciones basados en Kinect.
Cuenta con una cámara RGB, un sensor de profundidad y un micrófono, que nos proporciona mucha información.

De las imágenes tomadas con la cámara RGB, podemos conocer las coordenadas “virtuales” de un punto (pixel) visible, como se muestra a continuación:
Visión Kinect

Además de estos datos, el Kinect nos otorga información sobre la profundidad de cada pixel (depth), gracias a su cámara infrarroja.
De esta manera, utilizando trigonometría, podemos calcular las coordenadas reales del punto reflejado en cada pixel.
Tomando como ejes cartesianos las rectas perpendiculares que pasan por el centro geométrico de la imagen, obtenemos las coordenadas virtuales en 2 dimesiones (Xo;Yo) del plano de la imagen.

Para esto, conociendo los ángulos de visión del Kinect y las medidas –en pixeles- de la imagen, podemos calcular a qué ángulo corresponde cada pixel.
El ángulo de cada pixel se calcula así: 57º/Width = xAngle; y 43º/Height = yAngle. Por lo que multiplicando por Xo e Yo respectivamente, obtenemos los ángulos en X e Y (desde el centro) del punto virtual, que coincidirá con los ángulos del punto real.
Una vez obtenidos estos ángulos, y conociendo la distancia real al punto en cuestión: Depth (proporcionada por el Kinect), calculamos las coordenadas del punto real.
Zr = Depth;
Estos valores se pueden obtener gracias a las razones trigonométricas que surgen de un triángulo rectángulo. En particular que: tan(«ángulo») = Opuesto / Adyacente

Triángulo rectángulo

En nuestro caso, consideramos que la cámara (Kinect) se encuentra en el vértice correspondiente al ángulo «tita» (ángulo que ya hemos calculado), y también conocemos la distancia del lado “Adyacente” (Depth), por lo que la única incógnita por calcular es la distancia del lado “Opuesto”, que corresponderá a la distancia real de nuestro punto desde el centro de la imagen o visión de la cámara (coordenadas reales: Xr e Yr).
Xr = Tg(xAngle) x Depth;
Yr = Tg(yAngle) x Depth;

, , ,

No hay Comentarios

Aprendiendo del Caballero de la Noche

No es novedad que los vehículos autónomos ya son presente. Por lo menos, algunas de las tecnologías desarrolladas para su funcionamiento ya se encuentran en vehículos cotidianos, como el sistema automático de estacionamiento. ¡Bienvenidos sean! En Argentina hay 21 muertos diarios por accidentes de tránsito. Seguramente esta tasa bajará drásticamente.

Noticia del 7 de mayo de 2015

Ahora bien, este tipo de inteligencias artificiales sofisticadas, que tienen en sus manos decisiones que pueden definir vida o muerte de seres humanos, comienzan a plantear dilemas que dejan a las 3 leyes de la robótica por el suelo. Por ejemplo, supongamos que tenemos un auto que es capaz de analizar en tiempo real, muy rápidamente, la cantidad de víctimas probable en un accidente. Voy circulando por una ruta que tiene un barranco a mi derecha. De pronto, un auto que viene por el otro carril se asoma imprudentemente para sobrepasar un camión. Es inevitable el choque de frente. En mi auto estoy solo, en el otro hay cinco personas, entre ellas, tres niños. ¿Qué debe hacer mi auto? Pareciera que lo más razonable es que se lance hacia el barranco, salvando cinco por uno. Pero, ¿quién compraría un auto capaz de matarlo a uno en nombre de la humanidad? Esto es un dilema, y científicos, filósofos y abogados se han puesto a pensar cómo resolverlo.

Pues bien, tal vez inspirados en «Batman, el caballero de la noche», encontraron una solución (si es que se puede llamar así). En un momento de la película, Harvey Dent tiene en sus manos al hijo de Gordon, y lanza la moneda para decidir si lo mata o no, diciendo «Tu creías que podíamos ser hombres decentes, en tiempos indecentes!Pero te equivocabas…el mundo es cruel, la única ética en un mundo cruel, es el azar… objetivo… imparcial… justo.»
Tal vez ese momento en el que el vehículo tiene que tomar una decisión tan terrible, es una clara representación de un mundo cruel. Y es por eso que los responsables de definir la ética de esta inteligencia artificial has determinado que la decisión debe ser aleatoria. Por lo tanto, cuando un auto tenga que hacer algo que finalmente dañe a uno o más seres humanos, y no se pueda evitar de ninguna manera, tomará su decisión, lisa y llanamente, lanzando la moneda… Como Harvey…

, , ,

No hay Comentarios

Acelerómetro / Giróscopo con Arduino

Hola a todos!
Les cuento que hemos adquirido un kit de sensores y accesorios para Arduino. Hay de los más variados: leds RGB, emisores láser, sensores de temperatura y humedad, de presencia, emisor y receptor de infrarrojo, encoders, acelerómetro, etc.
Uno de los más interesantes es el acelerómetro. Lo probamos con una Arduino Nano y un código que nos devuelve el Yaw, Pitch y Roll.
3axis1

El sensor al que nos referimos se lo conoce como IMU (Inertial Measurement Unit). Consta de un acelerómetro y un giróscopo. Estos miden la fuerza ejercida por la gravedad y la velocidad.
En este caso, el MPU-6050 es una IMU de 6DOF (“6 Degrees Of Freedom“). Esto significa que lleva un acelerómetro y un giroscopio, ambos de 3 ejes (3+3 = 6DOF).

La conexión con Arduino, se realiza de la siguiente manera:
ConexiónArduino

El MPU-6050 utiliza el protocolo de comunicación I2C, por lo que vamos a requerir descargar la siguiente librería:
https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050
(Si no saben cómo instalar una librería adicional para Arduino, pueden consultarlo en http://www.arduino.cc/en/pmwiki.php?n=Guide/Libraries)

Les paso el código utilizado, que fué extraído de http://playground.arduino.cc/Main/I2cScanner%EF%BB%BF

Finalmente, una captura del sistema funcionando:
Acelerómetro y Arduino

Espero que les haya sido de utilidad. Éxitos!
Saludos,

, , ,

3 Comentarios

Programmable Minecraft: dynamic code execution using Groovy

If we think about the road to transit to achieve our goal, we would notice that, eventually, we’d have to face the problem of Java not being an interpreted language, which makes the task of modifying code dynamically a bit more difficult. There are many workarounds to this issue and today I’d like to talk you about one of them: integrating Groovy and Java.

Groovy is a dynamic programming language for the Java platform: it is dynamically compiled to Java Virtual Machine bytecodes which allows us to alter the functioning of our code on the fly and to integrate it into Java application with ease.

The Groovy documentation clearly explains the integration mechanism and even provides example code: integrating scripts into the Minecraft source code makes changing the game’s behaviour during its execution easy 🙂 (click on the image to enlarge it)

Si pensamos respecto al camino a transitar para llevar a cabo el proyecto de Minecraft Programable, notaríamos que, en alguna parte del mismo nos encontraríamos con el problema de que Java no es un lenguaje interpretado, lo que dificulta la tarea de cambiar el código de nuestra aplicación y ver los resultados de nuestros cambios instantáneamente. Existen diferentes «soluciones» a esto y hoy quiero hablarles respecto a una de ellas: integrar Java y Groovy.

Groovy es un lenguaje de programación dinámico para la plataforma Java: es compilado dinámicamente a bytecodes de la máquina virtual de Java lo que nos permite alterar el funcionamiento de nuestro código on the fly e integrarlo en aplicaciones Java con facilidad.

La documentación de Groovy explica con bastante claridad el mecanismo para hacer esto e incluso nos provee de código ejemplo: integrar scripts en el código de Minecraft nos permite modificar el código que queramos durante la ejecución del juego 🙂 (click en la imagen para verla en mayor tamaño)

Groovy and Java

, , , ,

No hay Comentarios

Gifts from Sweden!

Hola, amigos! Espero que anden bien.

Quiero agradecer a Tobii (la compañía líder en captura de movimientos oculares) por obsequiarme un kit de desarrollo Tobii EyeX. Planeo agregar este dispositivo a Physical Etoys. Creo que va a traer un nuevo mundo de posibilidades a nuestra plataforma. Estén al tanto para más noticias. Que se diviertan!

Hi, friends! I hope you are doing good.

I am thanking Tobii (the world’s leader eye tracking company) for giving me a Tobii EyeX Dev Kit. I am planning to add this device to Physical Etoys. I believe that it would bring a new world of possibilities for our platform. Stay tuned for more news and have fun!

 

Tobii_Eye_Experience_EyeXBox_460x300

No hay Comentarios

Programmable Minecraft: Experimenting with the mob’s AI

Hello everyone! I bring you another status update of the Programmable Minecraft project.

Following the line of work I shared with you in my previous post on the topic, we incorporated new means of interacting with Minecraft: now users can ask about a particular block using its position as reference, ask about their own position, place living entities (mobs) in the world and disable their AI in order to code their own. Here’s a tiny example:

Have fun!

Hola a todos! Les traigo otro informe del estado del proyecto Minecraft Programable.

Siguiendo la línea de trabajo que compartí con ustedes en mi post anterior, incorporamos nuevas formas de interactuar con Minecraft: ahora los usuarios pueden consultar información respecto a un bloque particular utilizando su posición como referencia, colocar entidades (mobs) en el mundo y deshabilitar su IA para programar la suya propia. Este es un pequeño ejemplo:

Que se diviertan!

, , ,

2 Comentarios

Un escrito sobre los orígenes del pensamiento científico

El texto es de un libro llamado «El camino a la realidad» del físico Roger Penrose. En el mismo se tratan las leyes que rigen al universo y comienza con el siguiente breve, sencillo y hermoso prólogo:

Del mito a la ciencia según Roger Penrose

No hay Comentarios

Conway’s Game of Life

Hi everybody,

Playing with Laura’s «Programming Minecraft» project I made a very simple implementation of Conway’s Game of Life. Just for fun 🙂
Here you have a video:

Hola a todos, estaba jugando con el proyecto de Laura «Programando Minecraft» y armé una muy simple implementación del Juego de la Vida de Conway. Sólo para divertirme un rato 🙂
Acá les dejo un videito:

, , , ,

2 Comentarios