Using The PrimeSense 3D Sensor With ROS

Nov. 23, 2012
PrimeSense provides the technology behind Microsoft's Kinect. Technology Editor Bill Wong checks out PrimeSense's version that targets developers.

PrimeSense is the company that provided the technology behind Microsoft's Kinect Anyone can buy a Kinect and it has become a popular research platform because it delivers a 3D image to a host processor. Some systems utilize webcams to generate 3D info but this can be very processor intensive (see Webcams For Gesture Recognition And More Vision Tricks). PrimseSense has its sensor (Fig. 1) available for developers.

Figure 1. The PrimeSense sensor looks very similar to the Microsoft Kinect as one might expect but it only requires a USB connection to operate.

I have written about how the PrimeSense technology works (see How Microsoft's PrimeSense-based Kinect Really Works). Essentially the system projects an infrared pattern using an infrared emitter. It has a color video camera and a matching infrared sensor. The image from the latter is given to the PrimeSense system-on-a-chip (SoC) that analyzes the changes of the image to determine the 3D image.

The sensor can provide a 3D depth image to the host. It can also combine that information with the video frame. The SoC can perform additional functions as well. All this is available via a USB 2.0 connection. The Kinect requires an additional power supply. The PrimeSense sensor is preferred by roboticists for this reason.

The PrimeSense sensor has the same functionality as the Microsoft Kinect except that it only needs a USB connection for power. It also has a higher frame rate, 60 frames/s versus 30 frames/s, for the video feed. The PrimeSense sensor was available as the ASUS Xtion but that has been discontinued although some are still available via

The big difference between the Kinect and the PrimeSense sensor is the software support. PrimeSense targets OEMs while the Kinect is for gamers and hobbyists. If you plan on turning out a product then you want to talk with Primesense.

Since our readers tend to fall into the OEM category I took a look at PrimeSense's offering in the contect of robotics. In particular, I made use of it with the Robot Operating System (ROS). I have written about ROS (see Frameworks Make Robotics Development Easy—Or Easier, At Least). It is used on robots like Willow Garage's PR2 (see Personal Robots May Be Knocking At Your Door In The Near Future). Even the PR2 is showing up with Primesense technology atop the robot.

It turns out that ROS has support for both the Primesense sensor as well as Microsoft's Kinect. Just the drivers are changed. That is not much of a surprise since functionally the two are essentially the same.

I had originally planned on getting the PrimeSense sensor to work with iRobot Create (see Real Robots: iRobot Create) that I was controlling via the Overo Air COM and Turtlecore from Gumstix (see TurtleCore Tacks Cortex-A8 On To iRobot Create). The system is running ROS and Ubuntu Linux.

The problem is that getting ROS running on the Gumstix and iRobot platform is a work in progress. I still plan on doing that but I decided to turn to a standard x86 PC running Ubuntu for the initial test because installation is a matter of installing the proper packages. It actually took longer to install Ubuntu and ROS than getting it to work with the PrimeSense sensor.

Controlling the iRobot Create via an x86-based laptop is also a common configuration. It was the one I used and I have been happy with the functionality although I do not have a platform for the laptop. That makes the Turtlecore support important to me when I get the time to do that.

The other way to utilize the sensor is to use software from the OpenNI (Open Natural Interaction) organization. OpenNI provides and API and supports platforms with open source OpenNI software (hosted on Github). This includes support for the PrimeSense sensor.

The OpenNI and Primesense support is C code so it should be easy to incorporate to many embedded applications. The OpenNI provides a higher level interface that supports gestures.

I did not do much with the C support because of time constraints. Plus I am more interested in robotics at this point and the work has been done to get the sensor to work with ROS.

Microsoft has proven the PrimeSense technology within the game industry. It has also been providing support for the developer community but the question for OEMs is whether buying a bunch of Kinects makes sense or whether dealing directly with PrimeSense is a better approach. I suspect that the latter will be preferred if designers are expecting to make more than a couple hundred units or want long term support.


To join the conversation, and become an exclusive member of Electronic Design, create an account today!