depth_image_proc/point_cloud_xyzrgb time synchronization

asked 2022-01-31 04:50:12 -0500

max_ros gravatar image

updated 2022-02-08 06:14:18 -0500

Hi ROS community.

I would like to apply the depth_image_proc/point_cloud_xyzrgb nodelet to overlay some rgb data on a registered depth image. Status is as follows:

  • Registered depth image (/depth_registered/image_rect ) is published correctly
  • camera info (/gas_camera/camera_info ) is published correclty
  • rectified rgb image (/gas_camera/image_rect ) is published correcty

  • the nodelet ...point_cloud_xyzrgb topic is created, in rviz I can subscribe and the status is all green, however no data is published on it.

My question is obviously why is no data published ;-)


What I have tried so far:

time sync: The input topics aren't perfectly time syncronized, as seen in the following screenshot. image description

  • Do the topics need to be perfectly time synced? Or is there a parameter to set something like "allow approximate_time"?
  • I tried to appy an approximate time filter, which is called frequently. However as far as I understand, all it does now (the way I implemented it), is filtering out some messages. Would I need to overwrite the header timestamps manually and republish the topics in my callback?

(time_syncronizer here as image, as the code won't show up nicely for some reason): image description

rgb_image: Another idea I had, was that the used topic for the rgb_image is actually just a uint8 img (grayscale). However, I tried using an rgb image instead which did not change anything.

And just for completeness, the relevant parts from the launch file:

  <node pkg="nodelet" type="nodelet" name="nodelet_manager" args="manager" />

  <!-- time sync test -->
       <node pkg="gas_cam" type="time_synchronizer.py" name="time_sync_node" respawn="true">
           <remap from="image" to="/depth_registered/image_rect" />
           <remap from="camera_info" to="/$(arg namespace_ir)/camera_info" />
      </node>

  <!-- stereo proc for xyzrgb pointcloud -->          
  <node pkg="nodelet" type="nodelet" name="nodelet_point_cloud_xyzrgb" args="load depth_image_proc/point_cloud_xyz nodelet_manager nodelet_manager">
        <remap from="rgb/camera_info" to="/$(arg namespace_ir)/camera_info"/>
        <remap from="rgb/image_rect_color" to="/$(arg namespace_ir)/image_rect" />
        <!-- remap from="rgb/image_rect_color" to="/$(arg namespace_ir)/ir_false_color" /-->
        <remap from="depth_registered/image_rect" to="/depth_registered/image_rect" />

        <param name="queue_size" value="15" />
    </node>

Update: I tried to overwrite the timestamp of the "out of time message" /depth/registered/image_rect , but the behaviour stayed the same.

edit retag flag offensive close merge delete

Comments

If I remembered correctly, the CameraInfo of the depth images is also required by the nodelet.

JunTuck gravatar image JunTuck  ( 2022-02-01 04:04:40 -0500 )edit

@JunTuck -- thanks for your help! If this is true, the docs should be updated. Since I did not yet adapt the namespace of the registered depth image, the nodelet would have subscribed to /depth_registered/camera_info/ anyways. And I checked, this topic is published correctly, so I think this seems not to be the problem (even though you could be correct ;-).

max_ros gravatar image max_ros  ( 2022-02-01 04:08:05 -0500 )edit