ros2 / rosbag2

Apache License 2.0
285 stars 252 forks source link

[Feature Request] Add getters to the python binding of rclcpp::QoS #1770

Closed authaldo closed 3 months ago

authaldo commented 3 months ago

Description

In ROS2 iron and lower the TopicMetadata structure offered the available QoS profiles as string, thus, allowing the user to check e.g. for certain settings. In my case I am mostly interested in identifying topics with 'transient local' durability as these have to be treated differently in the post processing of rosbags.

With Jazzy the TopicMetadata structure now returns the python binded equivalent of std::vector<rclcpp::QoS> (introduced in abdc408). An overview of the python QoS structure can be found here while the pybind implementation is located here. As far as I can tell this binding only offers setters to create QoS structures with certain settings. Hence, the request to extend the binding with the corresponding getters in order to allow users a better interaction with the QoS structure.

Alternate ways I considered: TopicMetadata offers a comparison method but after digging into the implementation it turns out that this comparison considers everything except the offered QoS profiles.

Related Issues

No related issues (as far as I can tell).

Completion Criteria

Addition of some getter functions for accessing the QoS settings. As a concrete example I would like to be able to check whether the durability setting of the offered QoS profile is set to 'transient local'. However, accessing the remaining settings is of course desired as well.

Implementation Notes / Suggestions

The rclpy equivalent of the QoS structure may be helpful as reference.

Testing Notes / Suggestions

clalancette commented 3 months ago

https://github.com/ros2/rosbag2/pull/1648 may be related.

authaldo commented 3 months ago

Thanks for bringing this up, a conversion to the python equivalent would indeed be enough to fix this issue.

ahcorde commented 3 months ago

PR is merged, feel free to reopen the issue if the feature is not complete or you miss something