Archivo etiqueta Kinect

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

Physical Etoys and Kinect

A long time ago, we posted our experience connecting Etoys with Kinect. At the time, the installation process was really unfriendly, so we never integrated it with Physical Etoys properly. Until now 🙂

You can download the external module from here: http://tecnodacta.com.ar/gira/projects/physical-etoys/kinect/. To install, just copy the pem file inside the Physical Etoys folder, and the next time you open it Physical Etoys will take care of the rest. Also, you need to have the Kinect SDK installed.

On a technical note: We’ve moved away from OSCeleton and we now directly communicate with Kinect using a dll Matias wrote. This allows us to have much more control of the Kinect (for instance, now you can change the motor’s angle, and we’ll eventually add support for accessing the camera info inside Etoys) but, as a downside, we’re now depending on the Kinect SDK which only works on Windows 7 and Windows 8.

Anyway, I’ll repost the following video so you remember how cool it is to be able to access the Kinect from Etoys 🙂

Enjoy!

Hace mucho tiempo posteamos nuestra experiencia conectando Etoys con Kinect. En ese momento, la instalación era realmente muy incómoda así que nunca lo integramos con Physical Etoys como se debe. Hasta ahora 🙂

Pueden bajar el módulo externo desde acá: http://tecnodacta.com.ar/gira/projects/physical-etoys/kinect/. Para instalarlo, sólo copien el archivo pem en el directorio donde tienen instalado Physical Etoys, y la próxima vez que lo abran Physical Etoys se va a encargar del resto. Un detalle, para que funcione tienen que tener el SDK de Kinect instalado en su máquina.

En una nota técnica: decidimos dejar de usar OSCeleton y, en su lugar, nos comunicamos con Kinect usando una dll que escribió Matías. Esto nos permite tener mucho mejor control del Kinect (por ejemplo, ahora podemos cambiar el ángulo del motor, y eventualmente vamos a permitir el acceso a la cámara directamente desde Etoys) pero, como desventaja, ahora dependemos del SDK de Kinect, que sólo funciona en Windows 7 y Windows 8.

En fin, vuelvo a postear el video para que recuerden lo copado que es acceder a Kinect desde Etoys 🙂

¡Que lo disfruten!

,

No hay Comentarios

Kinect and Etoys

Hi guys! We have exciting news! Thanks to the ESUG Innovation Technology Awards we’ve been able to buy ourselves a Microsoft Kinect. We don’t have the Xbox 360 yet, but that doesn’t mean we can’t have a little fun with it. Who needs and Xbox if you can use Kinect with Etoys? 🙂

After seeing Stephen Howell’s great work using Kinect with Scratch, we followed his steps and made it available for Etoys as well. You can see it for yourself in the video below:

How to install it?

The installation steps are a little unfriendly for the moment, and I only tried this in Windows, sorry. The following steps were taken (and modified a little) from the Scratch forums, original here.

1) Install OpenNI.

The version that worked for me is OPENNI-Win32-1.0.0.25.exe

2) Install the Kinect sensor plugin.

Run the precompiled SensorKinect-Win32-5.0.0.exe file from the bin directory

3) Install NITE.

The version that worked for me is NITE-Win32-1.3.0.17.exe. When asked for the key enter this one: 0KOIk2JeIBYClPWVnMoRKn5cdY4=

4) Copy the XML files from

«c:\Program Files\Prime Sense\Sensor\SampleXMLs\NITE\Data»
into
«c:\Program Files\Prime Sense\NITE\Data»
(overwrite files)

5)  Copy the XML files from

«c:\Program Files\Prime Sense\Sensor\SampleXMLs\OPENNI\Data»
into
«c:\Program Files\OpenNI\Data»
(overwrite files)

After this steps you should have the kinect drivers working properly (except for the audio drivers, which are not needed anyway). The Kinect green light will blink slowly once the drivers are loaded properly. It never goes solid green.

You can test it by opening one of the samples at «C:\Program Files\Prime Sense\NITE\Samples».
If none of them work, check windows Device Manager. You should end up with something like this:

  • Other devices
    • Xbox NUI Audio – with an error icon
  • PrimeSensor
    • Kinect Camera
    • Kinect Motor

In Windows XP the drivers didn’t installed as easily as in Windows 7. If your Device Manager shows something different from above, try installing the driver found in here: «C:\Program Files\Prime Sense\Sensor\Driver».

6) Download and run OSCeleton from https://github.com/Sensebloom/OSCeleton

7) Open your Squeak or Etoys image and load the latest version of the following packages:

Look in the Object Catalog for the «Kinect Server», or execute the following line:

KinectServerMorph new openInHand.

Now you should click «Start», position yourself in a way that Kinect can see your entire body, do the calibration pose, and wait for the calibration to finish.

Have fun!

, , , , ,

5 Comentarios