Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add design document on configuring QoS at startup time #280

Closed
jacobperron opened this issue Apr 22, 2020 · 4 comments
Closed

Add design document on configuring QoS at startup time #280

jacobperron opened this issue Apr 22, 2020 · 4 comments
Assignees
Labels
enhancement New feature or request

Comments

@jacobperron
Copy link
Member

jacobperron commented Apr 22, 2020

It is not uncommon to have a node provide a topic publisher or subscription that could be have different valid QoS settings depending on the application. In these situations, we see node authors offering ways to configure the QoS (typically in the form of a ROS parameter). For example,

ros-perception/image_pipeline#521
ros-drivers/ros2_ouster_drivers#26
ros-simulation/gazebo_ros_pkgs#1079

I think it would be valuable to have a common mechanism for configuring QoS at runtime. Having a consistent interface for node authors and integrators to use would hopefully make their lives easier.

See ros-simulation/gazebo_ros_pkgs#1079 for some early discussion.

(edit by @ivanpauno) Early discussion in ros2/rclcpp#239.

@ros-discourse
Copy link

This issue has been mentioned on ROS Discourse. There might be relevant details there:

https://discourse.ros.org/t/transport-priority-qos-policy-to-solve-ip-flow-ambiguity-while-requesting-5g-network-qos/15332/2

@gbiggs
Copy link
Member

gbiggs commented Jul 13, 2020

This is possibly something that can be done via a set of well-known parameters. Maybe have the node base implementation check for those parameters when it creates publishers and subscribers, and use the QoS values from them if they exist?

I strongly agree with this comment about whether nodes should allow overriding or not. The node author is responsible for defining the allowable range of behaviour of their node, and that includes what range of QoS values it can support. They need to be able to prevent certain values being set. This is also something that the parameters mechanism could be leveraged to support, with its ability to reject certain parameter values.

Although a dedicated API that hides how it is being done could be useful.

@ivanpauno ivanpauno added the enhancement New feature or request label Jul 28, 2020
@ivanpauno ivanpauno changed the title Add design document on configuring QoS at runtime Add design document on configuring QoS at startup time Jul 28, 2020
@ivanpauno
Copy link
Member

I've renamed the issue from runtime to startup time.
Re-configuring QoS profiles at runtime is much harder, and not what the original issue was aiming for (the three linked workarounds are for startup qos configuration).

The idea is to have a way to externally configure the QoS settings when reusing a node someone else has written.
For different use cases, different QoS profiles may be desired.

This also matches what DDS allows.

@jacobperron
Copy link
Member Author

A design doc was added in #300.
And subsequently implemented in ros2/rclcpp#1408 and ros2/rclpy#635

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants