Can't set wait_for_transform_duration

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Can't set wait_for_transform_duration

Divelix
Hi, Mathieu,

Currently, I use the following configuration on the robot: wheel odometry (/wheel_odom) as guess for icp_odometry and icp_odometry output as /odom for rtabmap. When I launch this configuration it throws these errors for a few seconds and then works fine:
[ WARN] [1647444262.047491739]: odometry: Could not get transform from /wheel_odom to base_footprint (stamp=1647444261.962495) after 0.100000 seconds ("wait_for_transform_duration"=0.100000)! Error="Lookup would require extrapolation -0.130254030s into the future. Requested time 1647444261.962495327 but the latest data is at time 1647444261.832241297, when looking up transform from frame [base_footprint] to frame [wheel_odom]. canTransform returned after 0.100217 timeout was 0.1."
[ERROR] [1647444262.047700818]: "guess_frame_id" is set, but guess cannot be computed between frames "/wheel_odom" -> "base_footprint". Aborting odometry update...
I tried to set "wait_for_transform_duration" to 50 as global parameter and as private parameter for icp_odometry and rtabmap, but still get these warnings about 0.1 and errors for few first seconds. Also I did "rosparam get wait_for_transform_duration" and it printed 50... Am I doing something wrong?
Reply | Threaded
Open this post in threaded view
|

Re: Can't set wait_for_transform_duration

matlabbe
Administrator

Is TF wheel_odom -> base_footprint exist? ("rosrun tf2_tools view_frames.py" to see the tf tree) The guess is a TF, not a topic.
Reply | Threaded
Open this post in threaded view
|

Re: Can't set wait_for_transform_duration

Divelix
Yes, I publish both /wheel_odom topic and /wheel_odom->base_footprint TF from the same Python script, and if I do "rosrun tf tf_echo /wheel_odom base_footprint" at once with main launch file, I get this output:

------------------
[ INFO] [1647504028.659039964]: Connected to master at [10.10.101.218:11311]
Failure at 1647504029.717054738
Exception thrown:"wheel_odom" passed to lookupTransform argument target_frame does not exist.
The current list of frames is:
Frame frontal_camera_link exists with parent base_link.
Frame base_link exists with parent base_footprint.
Frame connector exists with parent base_footprint.

Failure at 1647504029.717054738
Exception thrown:"wheel_odom" passed to lookupTransform argument target_frame does not exist.
The current list of frames is:
Frame frontal_camera_link exists with parent base_link.
Frame base_link exists with parent base_footprint.
Frame connector exists with parent base_footprint.

At time 1647504033.559
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.000, 1.000]
in RPY (radian) [0.000, -0.000, 0.000]
in RPY (degree) [0.000, -0.000, 0.000]
At time 1647504034.560
- Translation: [0.000, 0.000, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.000, 1.000]
in RPY (radian) [0.000, -0.000, 0.000]
in RPY (degree) [0.000, -0.000, 0.000]
-------------------

So, clearly, TF is publishing, but with a small initial lag.
Reply | Threaded
Open this post in threaded view
|

Re: Can't set wait_for_transform_duration

matlabbe
Administrator
Is odom TF published faster than 10 Hz? By default odometry is waiting 100 ms to gt the tf, otherwise it shows that warning. "wait_for_transform_duration" would be set as private parameter of the odometry node. For example:

<node pkg="rtabmap_ros" type="rgbd_odometry"  name="rgbd_odometry" >
  <param name="guess_frame_id" value="wheel_odom"/>
  <param name="wait_for_transform_duration" value="1.0"/>
</node>

In the code, the warning is logged here, and wait_for_transform_duration is read here from rosparam.