Yaskawa-Global / motoros2

ROS 2 (rcl, rclc & micro-ROS) node for MotoPlus-compatible Yaskawa Motoman robot controllers
101 stars 21 forks source link

Publish `flange`->`tool0` on `tf_static` #20

Open gavanderhoorn opened 1 year ago

gavanderhoorn commented 1 year ago

Low-priority, but technically, static transforms (ie: those that do not change over time) should be published on the /tf_static topic.

The QoS of that topic is also supposed to be different, mimicking a ROS 1 'latched' topic (ie: late joiners always receive the last published msg(s), even if they were published in the past). I believe that would be KEEP_ALL and TRANSIENT_LOCAL (but we'd have to check).

In regular ROS 2, this is all handled by the TF BroadCaster class, but we don't have that in RCLC.

To address this issue, we'd need to add an additional publisher, on topic /tf_static, with the correct QoS, and use it to publish flange->tool0 on that publisher alone -- once. (Micro-XRCE-)DDS will then take care of 'republishing' it for us if/when nodes require it.

The main benefit is reduced network traffic and less msg callbacks on the receiving side (as static transforms are only published once).

gavanderhoorn commented 1 year ago

Might be nice to create a sort-of RCLC implementation of the StaticTransformBroadcaster (instead of just adding more publishers and custom QoS settings).

See tf2_ros for the rclcpp implementation. It isn't really a lot of code (in C++ that is).

Refer to include/tf2_ros/qos.hpp for the custom QoS it uses (transient local mostly).