Rosanswers logo

Dear all,

I am trying to use the Diamondback's package openni_camera_unstable to visualize the depth or my Asus Xtion.

Following the tutorial presented on the wiki always results in the following trace:

$ roslaunch openni_camera_unstable openni.launch 
... logging to /home/raph/.ros/log/1d23db16-a71c-11e0-96f5-0013a98db3d0/roslaunch-DTI-NB014-1972.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://DTI-NB014:51409/


 * /rosdistro
 * /camera/driver/rgb_frame_id
 * /camera/driver/rgb_camera_info_url
 * /camera/driver/depth_frame_id
 * /camera/depth_registered/rectify/interpolation
 * /rosversion
 * /camera/driver/device_id
 * /camera/depth/rectify/interpolation
 * /camera/driver/depth_camera_info_url

    rectify (nodelet/nodelet)
    metric_rect (nodelet/nodelet)
    metric (nodelet/nodelet)
    disparity (nodelet/nodelet)
    points (nodelet/nodelet)
    rectify (nodelet/nodelet)
    rectify_color (nodelet/nodelet)
    camera_nodelet_manager (nodelet/nodelet)
    camera_base_link (tf/static_transform_publisher)
    camera_base_link1 (tf/static_transform_publisher)
    camera_base_link2 (tf/static_transform_publisher)
    camera_base_link3 (tf/static_transform_publisher)
    driver (nodelet/nodelet)
    register_depth_rgb (nodelet/nodelet)
    points_xyzrgb_depth_rgb (nodelet/nodelet)
    rectify (nodelet/nodelet)
    rectify (nodelet/nodelet)
    metric_rect (nodelet/nodelet)
    metric (nodelet/nodelet)
    disparity (nodelet/nodelet)

auto-starting new master
process[master]: started with pid [2017]

setting /run_id to 1d23db16-a71c-11e0-96f5-0013a98db3d0
process[rosout-1]: started with pid [2030]
started core service [/rosout]
process[camera_nodelet_manager-2]: started with pid [2033]
process[camera/driver-3]: started with pid [2034]
process[camera/rgb/rectify-4]: started with pid [2035]
process[camera/rgb/rectify_color-5]: started with pid [2036]
process[camera/ir/rectify-6]: started with pid [2037]
process[camera/depth/rectify-7]: started with pid [2038]
process[camera/depth/metric_rect-8]: started with pid [2039]
process[camera/depth/metric-9]: started with pid [2040]
process[camera/depth/disparity-10]: started with pid [2041]
process[camera/depth/points-11]: started with pid [2042]
process[camera/register_depth_rgb-12]: started with pid [2043]
process[camera/depth_registered/rectify-13]: started with pid [2044]
process[camera/depth_registered/metric_rect-14]: started with pid [2045]
process[camera/depth_registered/metric-15]: started with pid [2046]
process[camera/depth_registered/disparity-16]: started with pid [2047]
process[camera/points_xyzrgb_depth_rgb-17]: started with pid [2048]
process[camera_base_link-18]: started with pid [2049]
process[camera_base_link1-19]: started with pid [2050]
process[camera_base_link2-20]: started with pid [2051]
process[camera_base_link3-21]: started with pid [2052]
[ERROR] [1309880018.024766364]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/compressed/set_parameters]
[ERROR] [1309880018.031679707]: Tried to advertise a service that is already advertised in this node [/camera/depth_registered/image_rect_raw/theora/set_parameters]
terminate called after throwing an instance of 'openni_wrapper::OpenNIException'
  what():  unsigned int openni_wrapper::OpenNIDriver::updateDeviceList() @ /tmp/buildd/ros-diamondback-openni-kinect-0.2.1/debian/ros-diamondback-openni-kinect/opt/ros/diamondback/stacks/openni_kinect/openni_camera_unstable/src/openni_driver.cpp @ 116 : enumerating image generators failed. Reason: Can't create any node of the requested type!
[camera_nodelet_manager-2] process has died [pid 2033, exit code -6].
log files: /home/raph/.ros/log/1d23db16-a71c-11e0-96f5-0013a98db3d0/camera_nodelet_manager-2*.log

which somehow make sense as the device does not have any RGB camera. Still, if I try to understand the file openni_driver.cpp, I see that given the vendor Id, the device should be recognize and no Image generator should be created:

 if (vendor_id == 0x45e)
      device = boost::shared_ptr<OpenNIDevice > (new DeviceKinect (context_, device_context_[index].device_node,
                                                                   *device_context_[index].image_node, *device_context_[index].depth_node,
      device_context_[index].device = device;
    else if (vendor_id == 0x1d27)
      if (device_context_[index].image_node.get())
        device = boost::shared_ptr<OpenNIDevice > (new DevicePrimesense (context_, device_context_[index].device_node,
                                                                         *device_context_[index].image_node, *device_context_[index].depth_node,
        device = boost::shared_ptr<OpenNIDevice > (new DeviceXtionPro (context_, device_context_[index].device_node,
                                                                       *device_context_[index].depth_node, *device_context_[index].ir_node));
      device_context_[index].device = device;
      THROW_OPENNI_EXCEPTION ("vendor %s (%s) known by primesense driver, but not by ros driver. Contact maintainer of the ros driver.",
                              getVendorName (index), vendor_id);

would anyone has any idea on what to try?

thanks in advance


Originally posted by raphael favier on ROS Answers with karma: 1382 on 2011-07-05

Post score: 0

Original comments

Comment by raphael favier on 2011-07-13:
Good news. Thanks for the info.

Comment by prp on 2011-07-13:
I've traded emails with Suat Gedikli at Willow Garage, and he has implemented a workaround for this issue. He is going to add it to the ROS package in the next day or so.

Comment by prp on 2011-07-11:
I am having the same problem. As far as I can tell, the code listed above never executes, as the exception is thrown (openni_driver.cpp line 116) before it gets here. Have you made any progress on this?


1 Answer 1


Rosanswers logo

Ok, I gently prodded Suat Gedikli, and he updated the main trunk last night. If you install the openni_kinect stack:

$rosinstall ~/ros /opt/ros/diamondback 'http://www.ros.org/wiki/openni_kinect?action=AttachFile&do=get&target=openni_kinect.rosinstall'

then rosmake it, it should work with the Xtion Pro (it does for mine). Big thanks to Suat!

Originally posted by prp with karma: 118 on 2011-07-19

This answer was ACCEPTED on the original site

Post score: 0

Original comments

Comment by raphael favier on 2011-07-22:
thx a lot!


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.