Microsoft Kinect has been around for some time and here at OpenSensorHub.org we decided to have some fun with this neat sensor platform.
Microsoft Kinect is available in three models: V1, V2, & Kinect for Windows. Our particular implementation, based on a dormant device longing for some application and digital exercise, uses a V1 I had laying about. V1 is noted by the model # on the underside of the base. In this particular case, Model # 1414.
The Kinect supports three sensors – an IR emitter, an RGB camera, and depth sensor as well as having the ability to tilt up or down (approx. +/- 27deg). The IR emitter (left most aperture) projects a point cloud into the environment and uses the depth sensor to measure the deflection of the light returned from each point to measure the distance from the device. The IR emitter is also used to produce a grayscale image (based on intensity, or luminance). The RGB camera is located between the IR emitter and the depth sensor (right most aperture). The frame resolution for this model of the Kinect is 640×480 and as can be seen below produces decent quality images (clients visualizers created with OSH JS-Toolkit).
JS-Toolkit is a wonderful tool for rapidly creating client visualizations and connecting them to data being served by OpenSensorHub nodes, making the task of visualization relatively simple.
Integrating the Kinect
The OpenSensorHub driver is built using the libfreenect library on Linux Mint and uses the corresponding Java Native Access package, sources for which are available through OpenKinect.org. Libfreenect is a system library used to interface with the Kinect via a USB interface and is packaged with OpenSensorHub driver for Kinect.
The only other hardware needed is interface cable and power supply combo (IDS 1 Pc Xbox 360 Kinect Sensor USB AV Adapter ) readily available online for about $10.
The implementation of the OpenSensorHub driver supports V1 specific implementations, principally the bit encoding schemes in which data frames are returned from the Kinect to the driver. These are IR 8-BIT, 11-BIT Depth, and RGB format for the camera. The outputs from the OpenSensorHub driver are:
MJPEG encoded RGB
Grayscale IR Frames (single channel)
MJPEG encoded Grayscale IR Frames
Raw Depth Data – Distance from surface of sensor – distances in meters
Preprocessed Depth Data – Accounting for camera lens properties – distances in meters
In addition, the driver provides support for setting the initial tilt angle and led indicator color & blink patterns. The driver also provides an additional enhancement – the ability to scale the volume of data for the depth cloud through the “Point Cloud Scale Factor” option in the configuration settings. This option allows you to scale down the volume of data output which each frame and is configurable as a decimal percentage value from (0.0, 1.0].
Future support will include the ability to command the Kinect to tilt while in operation and to change led indicator color & blink patterns.