Description
Currently, all of the QoS settings for ROS 2 publishers and subscriptions created in Gazebo plugins are hardcoded (ie. cannot be changed by the user). In particular, many sensor plugins use the "SensorDataQoS" profile introduced in #926. This QoS profile is generally good for sensor data, using best effort for the reliability setting. But, there are cases where applications would like to ensure the arrival of sensor data and use reliable reliability.
IMO, gazebo_ros_pkgs should allow for the QoS settings to be entirely configurable so that users can mimic their real ROS 2 drivers accurately (e.g. maybe they have a camera driver that uses the reliable setting).
Implementation considerations
ROS 2 does not officially support a way to configure QoS settings at runtime. Therefore, it is up to the node developer to enable this1. In any case, gazebo_ros_pkgs plugins and their parameters are already defined in SDF, so I think it makes sense to add SDF tags for setting various QoS settings for ROS 2 entities in a plugin. I propose introducing a new helper class for parsing QoS SDF tags and returning a rclcpp::QoS that can be used by the plugins.
I'm willing to do the work, but I'm looking for some feedback before I go ahead.
1 I think there should be a standard mechanism builtin to ROS 2 to opt-in to configurable QoS settings as a node developer, but this is a separate discussion.
Description
Currently, all of the QoS settings for ROS 2 publishers and subscriptions created in Gazebo plugins are hardcoded (ie. cannot be changed by the user). In particular, many sensor plugins use the "SensorDataQoS" profile introduced in #926. This QoS profile is generally good for sensor data, using best effort for the reliability setting. But, there are cases where applications would like to ensure the arrival of sensor data and use reliable reliability.
IMO, gazebo_ros_pkgs should allow for the QoS settings to be entirely configurable so that users can mimic their real ROS 2 drivers accurately (e.g. maybe they have a camera driver that uses the reliable setting).
Implementation considerations
ROS 2 does not officially support a way to configure QoS settings at runtime. Therefore, it is up to the node developer to enable this1. In any case, gazebo_ros_pkgs plugins and their parameters are already defined in SDF, so I think it makes sense to add SDF tags for setting various QoS settings for ROS 2 entities in a plugin. I propose introducing a new helper class for parsing QoS SDF tags and returning a
rclcpp::QoSthat can be used by the plugins.I'm willing to do the work, but I'm looking for some feedback before I go ahead.
1 I think there should be a standard mechanism builtin to ROS 2 to opt-in to configurable QoS settings as a node developer, but this is a separate discussion.