1

I am interfacing ROS2 with native RTI DDS using xml app creation i.e. means all the QoS settings are in this xml file.

Now, for the native DDS application, I can set this .xml file but how can I set a similar sort of a configuration file for a ROS2 based function ?

Baum mit Augen
  • 49,044
  • 25
  • 144
  • 182
Vishal Rawat
  • 325
  • 1
  • 3
  • 19
  • I suggest you to go to https://community.rti.com/static/documentation/connext-dds/5.2.0/doc/manuals/connext_dds/html_files/RTI_ConnextDDS_CoreLibraries_UsersManual/Content/UsersManual/How_to_Load_XML_Specified_QoS_Settings.htm and have a look at https://github.com/ros2/rmw_connext/blob/e8e50e12ea4a8f48201fe6947ed1cb7df8acce22/rmw_connext_shared_cpp/src/qos.cpp to update the default configuration – Stoogy Sep 04 '18 at 10:43
  • @Stoogy : sorry but i still could not figure it out. Is it possible to give a bit detailed description ? – Vishal Rawat Sep 04 '18 at 15:02

1 Answers1

2

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.
neil-rti
  • 46
  • 4
  • Yes I already read the ROS supported QoS settings. The problem is that how do I let ROS2 know, not to use Multicasting or shared memory ? I have already applied these settings to the native DDS application but does this mean that i do not need to implement on the ROS2 side ? i.e. setting up in only one participant is sufficient ? – Vishal Rawat Sep 06 '18 at 17:06
  • this was the exact answer i was looking for. Thank you. I will try this out and come back to you again :) – Vishal Rawat Sep 07 '18 at 07:53