Use a dedicated callback group instead of a separate node in TfBuffer#52
Merged
Conversation
TfBuffer created its own internal node ("_tf_listener") with a dedicated
executor/thread to keep TF flowing while the host node's executor is busy.
But spawning a second node is an anti-pattern: it shows up in the ROS graph,
inherits the global __node remap (causing duplicate-name collisions), and
limits TfBuffer to one instance per host node.
Instead, create the /tf and /tf_static subscriptions on the host node under a
dedicated MutuallyExclusive callback group (automatically_add_to_executor_with
_node=false) and spin only that group on TfBuffer's executor/thread via
add_callback_group. This mirrors tf2_ros::TransformListener(spin_thread=true),
keeps the same thread isolation, and removes the extra node entirely.
Claude-Session: https://claude.ai/code/session_01G4qmUwoQhFyHf6v2HgkeTf
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TfBuffer created its own internal node ("_tf_listener") with a dedicated executor/thread to keep TF flowing while the host node's executor is busy. But spawning a second node is an anti-pattern: it shows up in the ROS graph, inherits the global __node remap (causing duplicate-name collisions), and limits TfBuffer to one instance per host node.
Instead, create the /tf and /tf_static subscriptions on the host node under a dedicated MutuallyExclusive callback group (automatically_add_to_executor_with _node=false) and spin only that group on TfBuffer's executor/thread via add_callback_group. This mirrors tf2_ros::TransformListener(spin_thread=true), keeps the same thread isolation, and removes the extra node entirely.