Paleta kinect

De Proyecto Butiá
Revisión del 15:01 11 nov 2012 de Ewe (Discusión | contribuciones) (Introducción)

Saltar a: navegación, buscar

Introducción

El trabajo consistió en el desarrollo de un plugin que permitirá trabajar con el sensor Kinect en la actividad TurtleArt. Se propuso el desarrollo de la paleta básica que le deja al usuario consultar los valores de las coordenadas x,y,z de una parte del cuerpo definida, en este caso particular, una mano.

Instalacion para Ubuntu

ref: http://blog.jorgeivanmeza.com/2011/12/instalacion-openni-sensor-kinect-y-nite-en-gnulinux-ubuntu-11-10-desde-fuentes/


Paso cero

remover el kernel module gspca_kinect:

$ rmmod gspca_kinect

$ sudo apt-get install cmake build-essential git-core python python-dev libboost-python-dev libusb-1.0-0-dev freeglut3-dev openjdk-7-jdk doxygen graphviz mono-complete

OpenNI

$ mkdir ~/kinect ; cd ~/kinect

$ git clone https://github.com/OpenNI/OpenNI.git -b unstable

si! unstable!

$ cd OpenNI/Platform/Linux/CreateRedist

$ bash RedistMaker

$ cd ../Redist/OpenNI-Bin-Dev-Linux-x86*/

$ sudo ./install.sh

Sensor Kinect

$ cd ~/kinect

$ git clone https://github.com/avin2/SensorKinect

$ cd SensorKinect/Platform/Linux/CreateRedist

$ bash RedistMaker

$ cd ../Redist/Sensor-Bin-Linux-x86*

$ sudo sh install.sh


NITE

Descargar la distribución binaria para GNU/Linux(OpenNI Compliant Middleware Binaries) mas reciente desde la siguiente ubicación. http://www.openni.org/Downloads/OpenNIModules.aspx

$ cd ~/kinect

$ tar jxvf nite-bin-linux-x86-v1.5.2.21.tar.bz2

$ cd NITE-Bin-Dev-Linux-x86*/Data

$ chmod a+w *

$ vi *.xml

<License vendor="PrimeSense" key="insert key here"/> … reemplazar por … <License vendor="PrimeSense" key="0KOIk2JeIBYClPWVnMoRKn5cdY4="/>

$ cd ..

$ sudo ./install.sh

PyOpenNI

$ git clone https://github.com/jmendeth/PyOpenNI.git

$ mkdir PyOpenNI-build

$ cd PyOpenNI-build

$ cmake ../PyOpenNI

$ make

$ sudo cp lib/openni.so /usr/lib/pymodules/python2.7/


Lo que se puede usar actualmente: https://github.com/jmendeth/PyOpenNI/wiki/current-features


Ejemplos

OpenNI

$ cd ~/kinect/OpenNI/Platform/Linux/Bin/x86-Release

$ ./Sample-NiSimpleViewer

se termina apretando Esc

NITE

$ cd ~/kinect/NITE-Bin-Dev-Linux-x86*/Samples/Bin/x86-Debug

$ ./Sample-PointViewer

PyOpenNI

$ cd ~/kinect/PyOpenNI/examples

$ python depth.py


Instalacion de TurtleArt para Ubuntu

NO esta recomendada la instalacion mediante el comando

$ sudo apt-get install sugar-turtleart-activity

La version del TurtleArt no fue actualizada hace tiempo. Se instala la version 98-1. Para acceder al codigo mas reciente (actualmente v160) se descarga la actividad .xo desde http://activities.sugarlabs.org/en-US/sugar/downloads/latest/4027/addon-4027-latest.xo?src=addondetail

y se la descomprime mediante el comando unzip.

Para arrancar el TurtleArt en la carpeta TurtleArt.activity se ejecuta el comando

$ python TurtleArtActivity.py

Como armar un plugin para TurtleArt

Sugarlabs dice


Desarrollo

Se desarrollo 3 bloques de la paleta cuales permiten acceder a las coordinadas x ,y y z del punto central de la palma. Para obtener las coordenadas en necesario el reconocimiento previo de una mano por el sensor. Para indicarle a usuario que la mano fue reconocida los bloques de la paleta se pintan de color verde. En la ausencia de la mano, se pintan de gris.

Clase Kinect

Se implemento la clase Kinect que extiende la clase Plugin. Fue necesario implementar la paleta nueva de la kinect y tres bloques xKinect, yKinect y zKinect. Los rangos de valores, por falta de información publicada, se estimó de la manera empirica. La coordenada x tomó valores entre -2333 y 1711, la coordenada y entre -588 y 1181, la coordenada z entre 420 y 5002. Con el usuario sentado a un metro del sensor los valores obtenidos fueron: entre -540 y 540 para x, entre -400 y 400 para y, entre 420 y 1200 para z. Estos valores fueron elegidos como valores sugeridos para el usuario para los valores de los bloques de la actividad TurtleArt.

Clases del OpenNI

Las clases del openni usadas en el plugin fueron:

Context

DepthGenerator

GestureGenerator

HandsGenerator

Con las funciones de las clases se genero un tracker de la mano, la cual después de haber encontrado una, devolvía sus coordenadas x, y, z.

Threading

Para monitoreo de los valores cambiantes de las coordenadas fue necesario crear un thread al lado del thread principal. También se creo un thread para las actualizaciones de la paleta - cambio del color de los bloques al verde con la mano detectada y cambio al gris en la ausencia de la mano.

Referencias

[Kinect] http://www.xbox.com/es-ES/Kinect

[TurtleArt] http://wiki.sugarlabs.org/go/Activities/Turtle_Art/Plugins

[Paleta de Sensores] http://wiki.sugarlabs.org/go/Activities/Turtle_Art/Uso_de_Tortuga_Arte_Sensores

[Butiá] http://www.fing.edu.uy/inco/proyectos/butia/

[OpenNi] http://openni.org/

[PrimeSense] http://www.primesense.com/

[Python] http://www.python.org/

[Ubuntu 12.04] http://releases.ubuntu.com/12.04/

[GitHub] https://github.com/

[Plugin TurtleArt] http://revista.python.org.ar/3/es/html/turtle_art.html