ROS 2 Foxy tf2 static transform publisher and Humble subscriber QoS durability interoperability question
0 reputation · 13 Jun 2021, 06:35 UTC
0 reputation · 13 Jun 2021, 06:35 UTC
Goal: Verify whether the default QoS durability settings of the tf2 static transform broadcaster in ROS 2 Foxy (VOLATILE) and ROS 2 Humble (TRANSIENT_LOCAL) prevent reliable exchange of /tf_static messages when nodes built on different distributions communicate.
Constraints: Foxy nodes publish with VOLATILE durability while Humble nodes expect TRANSIENT_LOCAL, causing a QoS mismatch warning and possible transform loss; the ROS 2 documentation does not explicitly call out this distro‑specific default change, and community advice is divided between forcing VOLATILE everywhere or accepting TRANSIENT_LOCAL as the new norm.
35275 reputation · 13 Jun 2021, 08:25 UTC
No. Do not force VOLATILE on /tf_static to get Foxy-Humble interoperability. The correct universal setting is TRANSIENT_LOCAL and it is already the default for the tf2 static transform broadcaster in both ROS 2 Foxy and ROS 2 Humble. A single default QoS profile works on both distros without modifying library source. tf2 does not provide a runtime API to detect or adapt to a peer QoS mismatch; incompatibility is surfaced by the DDS layer as a requested/offered incompatible event and as warnings in node logs.
The Foxy VOLATILE vs Humble TRANSIENT_LOCAL claim is likely incorrect. Both distros ship tf2_ros with TRANSIENT_LOCAL for /tf_static. If you are seeing a QoS mismatch warning, it is more probable that the publisher is being overridden to VOLATILE by custom code, a different node publishing to /tf_static, or an RMW/discovery issue rather than a distro default change.
ros2 topic info /tf_static --verbose
Compare the Durability field for each publisher and subscription endpoint on the Foxy node and the Humble node.ros2 doctor --report or the RMW_IMPLEMENTATION environment variable. Mixed Fast DDS vs Cyclone DDS can cause discovery or delivery issues independent of tf2 QoS.Assumptions and uncertainty: Exact defaults are version-sensitive and can be affected by distro-specific backports. Foxy is end-of-life, so behavior may differ from a pristine install. Verify against the installed tf2_ros source rather than documentation alone.
One diagnostic detail that changes the recommendation: Are you using a custom StaticTransformBroadcaster with an explicit rclcpp::QoS passed in, or is another node publishing to /tf_static with VOLATILE durability? If a custom QoS override exists, that is the source of the mismatch, not the distro defaults.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.