Friday, March 11, 2011

Kinect + BeagleBoard-xM (now need GLES)

My shiny new BeagleBoard-xM arrived a few days ago. I have been too snowed in with OSGi to spare it some time. The test image on the supplied SD card boots fine, but I have grand plans for a slamming robot vehicle which will require more goodies (probably eventually ros).

It has become even easier to get started with kinect and beagleboard thanks to the inclusion of libfreenect master in angstrom. It can be almost plug and play.

    #beagleboard xM now works fine with kinect + opencv just need gles demos
  1. Install non-ramdisk angstrom. From windows the easiest way to get started is to download and SD image Koen graciously provides and burn it on top of the test image supplied with the board. As expected a few hiccups with the image writer but nothing a downgrade would not fix.
  2. Install libfreenect directly (opkg install libfreenect) or grab git/cmake etc. to build from source. Even when building libfreenect from source, having libfreenect-dev installed is handy since it fetches all the other headers needed.
  3. Make an OpenCV based demo, the standard demos don't work so well because the Beagle video driver lacks GLX. Need some more packages opencv, opencv-dev, compilers and whatever else. The building required a few symlinks for compilers and opencv libraries since I was compiling on the beagle itself rather than cross-compiling from oe.
My TinCanTools xM trainer board with its Arduino will be arriving soon. The idea is to get a couple of servos and probably even a mobile robotics platform to start building an indoor track and shoot platform, with some slamming and co-operative map building thrown in. If anyone is interested in building a GLES client for the Kinect on the BeagleBoard let me know.

7 comments:

Deva.R said...

neatly done.. #respect

Stephen said...

I'm trying to do the same thing, but I haven't had much success with integrating into OpenCV. Could you post your code, or give some pointers?

Thanks.

what_nick said...

Hi Stephen, I used some pretty well circulated code that can be seen here: http://code.google.com/p/libfreenect-kernel/source/browse/simple_opencv/freenectopencv.cpp. The makefile needed some changed to work on the beagle. I can push that back if you are desperate.

Gusti said...

I would really like to know about the alterations you had to perform to the makefile if you can share. Been trying to get the BeagleBoard working with the Kinect for a while now

what_nick said...

I reduced the number of linked libraries, http://code.google.com/p/libfreenect-kernel/source/browse/simple_opencv/Makefile you have to create a couple of symlinks as well /usr/lib/libopencv_core.so -> /usr/lib/libopencv_core.so.2.2 , /usr/lib/libopencv_highgui.so -> /usr/lib/libopencv_highgui.so.2.2

pH said...

What performance or framerate are you able to get? This blog led to believe that it was not very quick: http://tirokartblog.wordpress.com/2011/03/25/kinect-performance-on-pandaboard-and-beagleboard-xm/

what_nick said...

Depends on the framesizes you request. The new libfreenect API can call lower resolutions (by asking for small frames - http://openkinect.org/wiki/Protocol_Documentation#Relevant_Bits_of_Code) to reduce USB bandwidth and up the framerate. All the maths required is integer so the ARM can keep up without dramas. Frames coming out of opencv code may not be that fast depending on which opencv code you link to (with floating point emulation, neon or dsp)