Skip to content

transport_priority QoS Policy #188

@copilot-fy-175

Description

@copilot-fy-175

Hi there,

Problem Statement:

I am working on a research project where two devices are connected over a lossy, low bandwidth link and are communicating via ROS2. The two devices will be accessible via experimenters who will be able to run arbitrary ROS2 code using a common Docker image. The issue with this is that I have a command & control stream that needs absolute precedence. This command & control stream could be downed out by experimenter algorithms if they are bandwidth intensive, resulting in a system failure.

I have a license for Connext and have been able to use RTI Routing Service to modify the DSCP value of ros2 topic messages using the transport_priority datafield. This lets me give the command & control stream hardware level priority over others, since I have a smart radio that can drop packets based on it's DiffServe value.

The issue with using routing service is that it adds overhead and latency, so I was potentially looking at modifying the rmw_connectdds layer to forcefully enforce QoS policies for end users and manually modify the transport priority field of select command & control topics so they are prioritized over experimental data.

I understand that rmw_connectdds does not support transport priority, but I see a couple areas in the rmw_connextdds_common where I could modify code slightly to set lower level DDS settings. I was wondering if any engineers had suggestions for the best place in this repo to implement this functionality.

I am currently looking at adding source code here dds_api_ndds.cpp to manually override QoS policies and set the DSCP field for select topics. Does this seem like a logical place, or is there a totally different/easier solution that I am missing?

I am using Connext 6.1.2 & ROS2 Humble. RTI Support was telling me that these two are compatible - any different opinions?

Any help is appreciated! Thank you.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions