I've had a Kinect for a while. I wrote a few interesting scripts with it, then forgot about it for a while. In between that time and now, I went through several OS upgrades that wiped away my changes. I decided I want to mess with it again, and had to reinstall OpenNI and the python extensions. This is a somewhat tricky process, so here's how it's done.
Step 1: Installing OpenNI, NITE, and the drivers
These are the drivers and middleware that will do all the heavy lifting for you.
I grabbed them from the simple-openni
project, which is a Kinect library for Processing. I don't care about processing,
but they also conveniently bundle the libraries for you. Just grab the
sudo ./install.sh in the
NITE-Bin-Dev-Linux-[platform]-[version] folder, and the
Step 2: Add the library exports to your shell
The installation process generates a file with the location of the library files. You need to source this file for the installing of PyOpenNI. Simply run
source [folder you extracted openni in]/OpenNIDevEnvironment
However if it's not there, simply run
sudo updatedb && locate OpenNIDevEnvironment
Which should find the current location for your to
updatedb will take a few minutes to run generally.
Step 3: Build PyOpenNI
These instructions are on the Github, however I'll copy them here.
git clone https://github.com/jmendeth/PyOpenNI.git mkdir PyOpenNI-build cd PyOpenNI-build cmake ../PyOpenNI make <copy to your python modules folder>
Step 4: Blacklist gspca_kinect
If you're using a newer Linux kernel (I'm using one of the 3.10 series), there is an existing module that only allows you to use the kinect as a generic webcam. This conflicts with OpenNI, so you need to blacklist it.
You can temporarily blacklist the module by running
sudo rmmod gspca_kinect
And permanently blacklist it by adding
blacklist gspca_kinect to your blacklist
file (google how to do it for your distribution).
Step 5: Not really a step
You can use OpenNI through Python now. But here's a bit of extra support code
for controlling the motor and LED, which PyOpenNI doesn't do (requires
import usb LED_OFF = 0 LED_GREEN = 1 LED_RED = 2 LED_YELLOW = 3 LED_BLINK_YELLOW = 4 LED_BLINK_GREEN = 5 LED_BLINK_RED_YELLOW = 6 _dev = usb.core.find(idVendor=0x045e, idProduct=0x02B0) #The kinect motor device def set_led_color(color): _dev.ctrl_transfer(0x40, 0x06, color, 0x0, ) def set_motor_angle(degree): _dev.ctrl_transfer(0x40, 0x31, degree, 0x0, ) def set_motor_up(): set_motor_angle(60) def set_motor_level(): set_motor_angle(0) def set_motor_down(): set_motor_angle(-60)
Thanks for reading, hope this helps you!
- Previous entry: Packaging Jython scripts in a single executable Jarfile
- Next entry: I've migrated my blog... again!