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/
SUMMARY
========
PARAMETERS
* /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
NODES
/camera/depth/
rectify (nodelet/nodelet)
metric_rect (nodelet/nodelet)
metric (nodelet/nodelet)
disparity (nodelet/nodelet)
points (nodelet/nodelet)
/camera/rgb/
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)
/camera/
driver (nodelet/nodelet)
register_depth_rgb (nodelet/nodelet)
points_xyzrgb_depth_rgb (nodelet/nodelet)
/camera/ir/
rectify (nodelet/nodelet)
/camera/depth_registered/
rectify (nodelet/nodelet)
metric_rect (nodelet/nodelet)
metric (nodelet/nodelet)
disparity (nodelet/nodelet)
auto-starting new master
process[master]: started with pid [2017]
ROS_MASTER_URI=http://localhost:11311
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].ir_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_context_[index].ir_node));
else
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;
}
else
{
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
Raph
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?