ros-perception / perception_pcl

PCL (Point Cloud Library) ROS interface stack
http://wiki.ros.org/perception_pcl
421 stars 332 forks source link

ROS2 filter transform may need to wait for transform #416

Closed daisukes closed 1 year ago

daisukes commented 1 year ago

I got a lot of extrapolation errors from a ros2 filter.

[ERROR] [1686159512.587704112] [pcl_ros]: Lookup would require extrapolation into the future.  Requested time 1686159512.581233 but the latest data is at time 1686159512.546177, when looking up transform from frame [velodyne] to frame [base_link]
[ERROR] [1686159512.587728480] [filter_crop_box_node]: Error converting input dataset from velodyne to base_link.
[ERROR] [1686159512.687872448] [pcl_ros]: Lookup would require extrapolation into the future.  Requested time 1686159512.682093 but the latest data is at time 1686159512.646461, when looking up transform from frame [velodyne] to frame [base_link]
[ERROR] [1686159512.687893898] [filter_crop_box_node]: Error converting input dataset from velodyne to base_link.

The following change (adding timeout for lookup) works well for me, but I am not sure this fix is good. According to the melodic code, it uses waitForTransform. Is there any difference between them?

    transform =
      tf_buffer.lookupTransform(
      target_frame, in.header.frame_id, tf2_ros::fromMsg(
          in.header.stamp), tf2::Duration(std::chrono::seconds(1)));

ros2

https://github.com/ros-perception/perception_pcl/blob/33dbb3bf1fda7b7e5a3382cf36f8961b15d2d8b9/pcl_ros/src/transforms.cpp#L77-L80

melodic

https://github.com/ros-perception/perception_pcl/blob/283496fd921a0b60e9ea1bba45561804226895e8/pcl_ros/src/transforms.cpp#L60-L61