Have you reviewed the material in: https://github.com/ros2/ros2/wiki/About-Quality-of-Service-Settings? ROS2 has a limited set of options for setting QoS.
You might have more success by setting the QoS policies in your DDS application to match the settings in ROS2. (BTW, this is a place where RTI Admin Console makes things a lot easier; it immediately reveals any QoS mismatches between the participants).
The DDS QoS settings I've used to get DDS/ROS2 interoperability include:
- If using ROS2 'Ardent':
- use a DDS partition named "rt" (set in QoS file under
<publisher_qos>
)
- If using ROS2 'Bouncy':
- Prefix the topic names with "rt/"
- Suppress typeCode sending (set in QoS file under
<participant_qos><resource_limits>
the max_serialized_length for type_code and type_object == 0)
- For either release:
- May need to include support for unbounded strings and sequences.
- May need to include UDPv6 and disable SHMEM transports
There are not many QoS settings made in the ROS2 RMW code; the Connext libs will look for a source of user QoS settings using the normal search order (detailed here) - meaning you can provide your own QoS settings to the Connext libs under ROS2, using a variety of methods. Here's what I did:
- To disable multicast in ROS2, create a file named "NDDS_DISCOVERY_PEERS" in a directory from which your ROS2 application(s) will be launched (directory where the ros2 command is entered and run). Place in this file a list of the initial peers for discovery (make sure to exclude multicast and shmem) format as detailed here.
- My file had: localhost,192.168.1.44
- For other QoS settings, place in the same directory as above a "USER_QOS_PROFILES.xml" file containing the QoS settings you'd like to use in ROS2. These settings will affect the ROS2 applications launched from that directory.