Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nomenclature of tf_echo and tf_listener #4239

Open
lepalom opened this issue Mar 21, 2024 · 3 comments
Open

Nomenclature of tf_echo and tf_listener #4239

lepalom opened this issue Mar 21, 2024 · 3 comments
Assignees

Comments

@lepalom
Copy link

lepalom commented Mar 21, 2024

I have a question about nomenclature that it is getting me crazy. Probably is because English is not my language.

The tool tf2_echo help says:

tf2_echo source_frame target_frame [echo_rate]

This will echo the transform from the coordinate frame of the source_frame
to the coordinate frame of the target_frame.
Note: This is the transform to get data from target_frame into the source_frame.

For me is clear, if I have a frame, for instance, "grasp_01", and another frame "base", and I execute:

ros2 run tf2_ros tf2_echo base grasp_01

I would obtain the transformation that comes from base to grasp_01. Easily, I can see the distance between the origin of "base" to the origin of "grasp_01" expressed in the "base" frame.

But, in the documentation, for example the turtle, the sentence says:

Let’s look at the transform of the turtle2 frame with respect to turtle1 frame which is equivalent to:
ros2 run tf2_ros tf2_echo turtle2 turtle1

To me is the opposite, I got the transformation from turtle2 to turtle1, that is the same the frame turtle1 w.r.t. turtle2, not the opposite as claims the documentation.

Also, I got another issue, the tf_buffer class has the method

lookupTransform (const std::string &target_frame, const std::string &source_frame, const tf2::TimePoint &time, const tf2::Duration timeout) const override

where you gets the transform between two frames by frame ID. With:

  • target_frame = The frame to which data should be transformed
  • source_frame = The frame where the data originated
    ...

If I create a listener in C++, and I call the function with:

tfs = tf_buffer_->lookupTransform("base", "grasp_01", tf2::TimePointZero);

I would obtain the same value as using tf2_echo. So, please, could you explain what should I understand as source_frame, target_frame in the ROS context?

@ros-discourse
Copy link

This issue has been mentioned on ROS Discourse. There might be relevant details there:

https://discourse.ros.org/t/nomenclature-of-tf-echo-and-tf-listener/36985/1

@CursedRock17
Copy link
Contributor

Duplicate of the following:

ros/geometry#108
ros/geometry#111
ros/geometry#226

@clalancette
Copy link
Contributor

clalancette commented Apr 18, 2024

I think what we need to do here is to make the target/source nomenclature completely consistent across the documentation, the tools, and the API. @ahcorde I'm going to assign this one to you (along with #653) to eventually clean this up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants