I did an issue in ROS documentation 2 weeks ago, but I got no answer. Yesterday, in the ROS Meetup Barcelona, I commented it with my colleagues and I did not get any consensus. It is a question of nomenclature and probably the ROS documentation is written by people from different areas (Vision, classic robotics, etc.) that have a different background.
Let me put this question here, and maybe we can clarify the concept.
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.
It is curious, because I asked several people and many times I got the answer: “First, I try it with tfA and after tfB, but if I don’t get the data I want, I change to tfB and later tfA”.
So, please, could you explain what should I understand as source_frame, target_frame in the ROS context?