-
Notifications
You must be signed in to change notification settings - Fork 37
Description
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.