ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

To answer your first question, no single node is ever expected to be the sole publisher of tf messages. Instead each node which either senses or calculates a particular tf transform would be expected to publish it.

For example if you had a revolute arm in a workcell with a depth camera on the end of the arm being used to identify the location of objects. In this case a node using the robots URDF file would listen to the joint take topic and calculate the relationships between each link of the arm. The end effector mounted camera would also be part of the URDF so it's location relative to the base link of the robot is also defined. Next you would use a static transform publisher to define the position of the arm base link in the world frame of the workcell. Finally your object detection node would detect and publish the position of objects relative to the cameras optical frame.

In this case you have three nodes which are each publishing part of the TF tree. The combined tree can be used to find the location of the detected objects in the world frame of the workcell.

To answer your second question. No there is no internal TF tree state. Each new node that starts a TF listener starts listening to the tf and tf_static topics. It then builds up a buffer of frame relationships which it uses to resolve TF queries. So each node will only be aware of transforms which have be published since that node started.

Hope this helps clear this up for you.