[Documentation] [TitleIndex] [WordIndex

Only released in EOL distros:  

openni_kinect: nite | openni | openni_camera_deprecated

Package Summary

Deprecated ROS driver for OpenNI depth cameras.

If you are a new user of the ROS OpenNI drivers (on Electric or later), see openni_launch and openni_camera. This page is provided to help users of the old driver migrate their code, and for historical interest.

openni_camera_deprecated is unmaintained and likely to be removed in Groovy.


ROS has long had two distinct OpenNI camera drivers:

The question of which to use has caused plenty of confusion. There are slight differences in the ROS APIs for the two drivers. Finally, the APIs have tended to move around to various packages across ROS releases.


Microsoft released the Kinect in November 2010. Almost immediately the open-source libfreenect community deciphered the USB protocol and provided basic access to the depth and RGB image streams. We in the ROS community participated in the early development of libfreenect and wrote an experimental ROS driver for the Kinect.

In December 2010, PrimeSense (the company behind the Kinect's depth-sensing technology) released the OpenNI natural interaction framework. It provided fuller access to the Kinect's hardware as well as software depth registration and skeleton tracking. We quickly ported our ROS driver to OpenNI.

The openni_kinect stack, including the openni_camera driver package, was first released in ROS Diamondback in March 2011 following months of feverish development.


openni_camera provides:


The new driver (discussed below) was backported to the Diamondback-only package openni_camera_unstable. It provides:


The original openni_camera driver was developed rapidly and organically, as multiple developers hacked new features onto the same monolithic node. Over time we discovered drawbacks of the original ROS API, regretted its lack of flexibility, and found the codebase more and more difficult to extend.

In Electric, we introduced a new "unstable" version of the driver, intended to eventually replace the old monolithic one. It greatly slimmed down the driver node(let), splitting most of the device-independent data processing into separate nodelets in depth_image_proc. At the same time it added features such as calibration, support for Asus Xtion devices, access to the IR image stream, and registration of the depth stream with any (even external) RGB camera.


Accessed as in Diamondback.


openni_camera also provides the new, minimal driver:

depth_image_proc provides various nodelets for 2D/3D processing.

openni_launch provides launch/openni.launch, which composes the driver and processing nodelets into a unified system.


In Fuerte the new API has officially reached a stable state. There should not be any breaking ROS API changes from Electric. However the openni_kinect stack has been reorganized, resulting in a couple of name changes.


No longer lives in openni_camera. It has been split off into openni_camera_deprecated, which still provides:


openni_camera (now a unary stack) provides only the new, minimal driver:

depth_image_proc has been moved to image_pipeline.

openni_launch (also a unary stack) still provides launch/openni.launch. It has gained some flexibility since Electric.

Migration guide

Updating from deprecated to stable API

In the stable API, the driver node(let) is minimal, publishing only the device outputs. Instead, the deprecated node(let) API corresponds closely to the launch file API of openni_launch. If you need processed outputs such as point clouds, replace use of openni_camera[_deprecated]/openni_node and openni_camera/OpenNINodelet with openni_launch.

Note the following ROS API changes between openni_camera_deprecated and openni_launch:

Diamondback/Electric to Fuerte (deprecated API)

For users of the deprecated API, the only change is the package name. Instead of:

# Diamondback, Electric
rosrun openni_camera openni_node
roslaunch openni_camera openni_node.launch


# Fuerte
rosrun openni_camera_deprecated openni_node
roslaunch openni_camera_deprecated openni_node.launch

The node(let) ROS API remains unchanged. The nodelet can still be loaded by the same name, openni_camera/OpenNINodelet.

This package is scheduled for removal in Groovy. Please update your packages to use the stable openni_camera and openni_launch APIs.



Deprecated OpenNI camera driver.

Subscribed Topics

camera/depth/indices (pcl/PointIndices)

Published Topics

RGB camera
camera/rgb/camera_info (sensor_msgs/CameraInfo) camera/rgb/image_raw (sensor_msgs/Image) camera/rgb/image_mono (sensor_msgs/Image) camera/rgb/image_color (sensor_msgs/Image) camera/rgb/points (sensor_msgs/PointCloud2)
Depth camera
If ~depth_registration is off, all images are in the original IR camera frame. If on, all images are registered to the RGB camera frame. camera/depth/camera_info (sensor_msgs/CameraInfo) camera/depth/image_raw (sensor_msgs/Image) camera/depth/image (sensor_msgs/Image) camera/depth/disparity (stereo_msgs/DisparityImage) camera/depth/points (sensor_msgs/PointCloud2)


~device_id (string) ~rgb_frame_id (string, default: /openni_rgb_optical_frame) ~depth_frame_id (string, default: /openni_depth_optical_frame) ~use_indices (bool, default: false)
Dynamically Reconfigurable Parameters
See the dynamic_reconfigure package for details on dynamically reconfigurable parameters. ~image_mode (int, default: 2) ~debayering (int, default: 0) ~depth_mode (int, default: 2) ~depth_registration (bool, default: False) ~depth_time_offset (double, default: 0.0) ~image_time_offset (double, default: 0.0)

openni_camera/OpenNINodelet nodelet

Nodelet version of the deprecated OpenNI driver. Has the same ROS API as openni_node above.

Launch files


A simple example launch file. It opens the first enumerated device with OpenNI depth registration enabled. The ROS API is as described above.


Publishes default transforms relating the IR and RGB cameras to tf. Included by openni_node.launch.

2020-01-25 12:56