ros2 / domain_bridge

Bridge communication across different ROS 2 domains.
Apache License 2.0
55 stars 11 forks source link

Automatically match QoS settings across the bridge #5

Closed jacobperron closed 3 years ago

jacobperron commented 3 years ago

I've updated the design doc to reflect the implementation.

Specifically, this change introduces a WaitForQosHandler class used for deferring topic bridge creation. It creates a thread for each topic bridge to wait for at least one publisher to be available. Once a publisher is available it signals to the domain bridge via a callback, and a topic bridge is created.

In the special case of more than one publisher with different QoS settings, I've adopted a similar approach as rosbag2 for selecting a QoS that is compatible with most of the available publishers. Note, we could factor out this logic following https://github.com/ros2/rosbag2/issues/601 and/or https://github.com/ros2/rmw/issues/304.

jacobperron commented 3 years ago

So, the logic introduced in c62b3a1 uncovered an integer overflow bug in rclcpp::Duration. This PR depends on https://github.com/ros2/rclcpp/pull/1584 for QoS matching to work properly. Specifically, setting a deadline (or lifespan) with a value larger than INT32_MAX (which is the default value) doesn't work.