Introducción
OpenNI (Open Natural Interaction) es una organización sin ánimo de lucro enfocada en el desarrollo de tecnologías para la interacción natural con dispositivos. Uno de sus principales participantes es PrimeSense, una empresa israelí responsable del desarrollo del Kinect y dispositivos similares junto con la firma Asus.
Su framework provee una infraestructura genérica basada en APIs de código abierto para acceder a los dispositivos de interacción natural, sobre él se instala el Sensor que permite acceder específicamente a los servicios provistos por el Kinect. Adicionalmente esta empresa desarrolla el middleware NITE el cual no es de código abierto y permite acceder a funcionalidades avanzadas como seguimiento del esqueleto en tiempo real y reconocimiento de gestos entre otras cosas.
Este proedimiento fue verificado en equipos utilizando GNU/Linux Ubuntu 11.10 y Mint 12.
Aviso! Se instalarán las versiones inestables de OpenNI y NITE ya que actualmente así lo sugiere el módulo de SensorKinect modificado por avin2.
Prerequisitos
$ sudo aptitude install build-essential python libusb-1.0-0-dev freeglut3-dev openjdk-7-jdk doxygen graphviz
Si se desea instalar el soporte para .NET es necesario contar previamente con el soporte para Mono instalado.
$ sudo aptitude install mono-complete
Instalar OpenNI
$ mkdir ~/kinect ; cd ~/kinect
$ git clone https://github.com/OpenNI/OpenNI.git -b unstable
Aviso! Si hay problemas con la siguiente ruta verificar si existe el directorio Linux o Linux-x86 ya que he visto algunas variaciones entre las pruebas que realicé a finales de diciembre del año pasado y esta versión mas reciente.
$ cd OpenNI/Platform/Linux/CreateRedist
$ bash RedistMaker
$ cd ../Redist/OpenNI-Bin-Dev-Linux-x86*/
$ sudo ./install.sh
Instalar 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
Instalar NITE
Descargar la distribución binaria para GNU/Linux 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
Probar los ejemplos
Es posible verificar el funcionamiento del software recién instalado con las aplicaciones de demostración que este incluye. Para hacer esto se recomienda revisar los siguientes directorios.
- ~/kinect/OpenNI/Platform/Linux/Bin/x86-Release
- ~/kinect/NITE-Bin-Dev-Linux-x86*/Samples/Bin/x86-Debug
Solución de problemas
Verificar el reconocimiento del dispositivo
Una vez conectado el Kinect al puerto USB del computador y a la corriente eléctrica este debe ser reconocido por el sistema operativo.
$ dmesg
…
[ 158.092116] usb 2-3: new high speed USB device number 4 using ehci_hcd
[ 158.224738] hub 2-3:1.0: USB hub found
[ 158.224915] hub 2-3:1.0: 3 ports detected
[ 158.800196] usb 2-3.2: new full speed USB device number 5 using ehci_hcd
[ 160.336252] usb 2-3.1: new high speed USB device number 6 using ehci_hcd
[ 161.448177] usb 2-3.1: usbfs: USBDEVFS_CONTROL failed cmd mtp-probe rqt 128 rq 6 len 1024 ret -110
[ 162.128178] usb 2-3.3: new high speed USB device number 7 using ehci_hcd
[ 162.299863] gspca: v2.13.0 registered
[ 162.301016] usbcore: registered new interface driver kinect
…
$ lsusb
…
Bus 002 Device 005: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor
Bus 002 Device 006: ID 045e:02ad Microsoft Corp. Xbox NUI Audio
Bus 002 Device 007: ID 045e:02ae Microsoft Corp. Xbox NUI Camera
…
error CS0117: `OpenNI.CalibrationStatus’ does not contain a definition for `ManualAbort’
Si se está realizando una actualización de OpenNI probablemente sea buena idea desinstalar los archivos previos antes de realizar nuevamente los pasos descritos en este artículo.
$ sudo rm -rf /usr/include/ni/
$ sudo rm /usr/share/java/org.OpenNI.jar
$ sudo rm /usr/lib/libOpenNI.jni.so
$ sudo rm -rf /usr/lib/mono/gac/OpenNI.net
$ sudo rm /usr/lib/mono/2.0/OpenNI.net.dll
$ sudo rm /usr/lib/libOpenNI.so
Open failed: Failed to set USB interface!
Aparentemente los kernels incluyen un módulo para interactuar con el Kinect que interfiere con la ejecución de OpenNI. Para verificar esto es necesario ejecutar el siguiente comando.
$ lsmod | grep gspca_kinect
gspca_kinect 12792 0
gspca_main 27610 1 gspca_kinect
En caso de existir este módulo debe ser removido de la siguiente manera.
$ sudo rmmod gspca_kinect
Para evitar permanentemente la carga de este módulo del Kernel es necesario agregarlo a la lista negra de la siguiente manera.
$ sudo vi /etc/modprobe.d/blacklist-kinect.conf
blacklist gspca_kinect
Esta modificación será tenida en cuenta tan pronto como se reinicie el sistema operativo.
Enlaces
- OpenNI
http://openni.org/ - Overview
http://openni.org/Documentation/Reference/index.html - Tutorial
http://openni.org/Documentation/Tutorial/index.html - Programmer’s Guide
http://openni.org/Documentation/ProgrammerGuide.html - Módulo Sensor Kinect adaptado por avin2
https://github.com/avin2/SensorKinect