First you will need to get a couple of libraries, first off libusb is required, I downloaded the latest 1.0.9 tarball and built it using the following commands
tar vfxj libusb-1.0.9.tar.bz2 cd libusb-1.0.9/ ./configure make sudo make installThis should work fine for both of the debian versions and this will install the developer libraries and headers for libusb. Next I downloaded the OpenKinect source code from git hub unzip this file and change into the source directory.
You may need to install cmake if you have not already done so, this can be done by using sudo apt-get install cmake. Next we need to edit some of the cmake files as for this example I don't want to build the demos which require libraries which will not work properly on the pi.
If you edit the CMakeLists.txt file and search for the following line
OPTION(BUILD_EXAMPLES "Build example programs" ON)And change the ON to OFF you should now be able to build by typing the following
cmake CMakeLists.txt make sudo make installThis will then install the following files
ls /usr/local/include/libfreenect/ libfreenect.h
libfreenect-registration.h
libfreenect_sync.hand
ls /usr/local/lib/libfree* /usr/local/lib/libfreenect.a
/usr/local/lib/libfreenect.so.0.1
/usr/local/lib/libfreenect_sync.a
/usr/local/lib/libfreenect_sync.so.0.1 /usr/local/lib/libfreenect.so
/usr/local/lib/libfreenect.so.0.1.2The first demo I've tried is a modified version of the tiltdemo.c There are reports of this working fine for some people, however it didn't for me under the latest wheezy build so I investigated more and found that the sync library wasn't working for me. The following program uses the Normal freenect library calls instead.
#include "libfreenect.h" #include <cstdlib> #include <ctime> #include <iostream> int main(int argc, char *argv[]) { // seed rng generator srand(time(0)); // pointer to the freenect context freenect_context *ctx; // pointer to the device freenect_device *dev; if (freenect_init(&ctx, NULL) < 0) { std::cout<<"freenect_init() failed\n"; exit(EXIT_FAILURE); } // set the highest log level so we can see what is going on freenect_set_log_level(ctx, FREENECT_LOG_SPEW); int nr_devices = freenect_num_devices (ctx); std::cout<<"Number of devices found: "<<nr_devices<<"\n"; // I only have one kinect so open device 0 if (freenect_open_device(ctx, &dev, 0) < 0) { std::cout<<"could not open device error\n"; freenect_shutdown(ctx); exit(EXIT_FAILURE); } // now I'm going to loop and set random value // these are basically from the tiltdemo.c that comes with // the freenect lib modified not to use the sync lib while (1) { // Pick a random tilt and a random LED state freenect_led_options led = (freenect_led_options) (rand() % 6); // explicit cast int tilt = (rand() % 30)-15; freenect_raw_tilt_state *state = 0; double dx, dy, dz; // Set the LEDs to one of the possible states freenect_set_led(dev,led); // Set the tilt angle (in degrees) freenect_set_tilt_degs(dev,tilt); // Get the raw accelerometer values and tilt data state=freenect_get_tilt_state(dev); std::cout<<"led["<<led<<"] tilt["<<tilt<<"]\r" ; std::cout.flush(); sleep(1); } }To build this I used the following makefile
CC=g++ CFLAGS=-c -Wall -O3 -I/usr/local/include/libfreenect LDFLAGS=-L/usr/local/lib -lfreenect SOURCES=tiltdemo.cpp OBJECTS=$(SOURCES:%.cpp=%.o) EXECUTABLE=tiltdemo all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .cpp.o: $(CC) $(CFLAGS) $< -o $@ clean : rm -f *.o $(EXECUTABLE)A video of it in action can be seen here