Hi, I fully agree with @tylerjw concerns.
This is similar to what we do internally.
The default ROS 2 settings are definitely unusable for networks with large number of robots.
Someone asked about LOCALHOST_ONLY.
The problem with that is that then a remote machine is not able to communicate with a robot (e.g. running ros2 topic list).
That’s why we also use DDS configuration files.
Both CycloneDDS and Fast-DDS allow to disable multicast discovery, while at the same time allowing unicast discovery from a remote machine.
This means that the debug station simply needs to know the IP address of the robot and then it will be able to communicate with it.
@alsora would you mind sharing your DDS config files here so that we can compile a better default for the community to reference?
So I have been testing on Humble and NetworkInterfaceAddress is now deprecated. Reading the documentation this is how I think one might update the configuration @tylerjw included in his first post, but I have done very limited testing with these setting.
This is the Fast-DDS configuration that I’m currently using with ROS 2 Galactic and Fast-DDS 2.3.3.
It’s made of two slightly different XMLs, one for the robot and one for the laptop.
The advantage of this approach is that the robot can be configured in an extremely generic way, because it does not need to know in advance the IP address of the remote machines it will interact with.
On the other hand on the laptop, where it’s usually easier to interact/change configurations and it is expected that you always know the IP address of the robot you want to communicate with, the IP address is specified.
Sure, can someone add it to the agenda? I’m not sure exactly what to put down for the agenda item, maybe just a general discussion? Is there a proposal?
@tomoyafujita responded to my feature request suggesting there be a discussion around vendor-agnostic general configuration. I requested a way to vendor-agnostic configure max participants as easy as you can configure the network adapter and multicast via ROS_LOCALHOST_ONLY
My Q is how far can we take “vendor-agnostic general configuration” before some of the variables conflict with each other (configuring localhost and max participants are thankfully orthogonal) and things get more complicated.
So I guess my Qs for a discussion would be
How far can we generalize DDS settings in a vendor agnostic way?
What should the format for ^ be (e.g. environment variables? a vendor agnostic xml file? either/both?)
How do we handle conflicting settings (e.g. just pass them onto the vendor and let them deal with it? or have some logic at this agnostic level to detect if LOCALHOST_ONLY and a multicast tweak are both used)?
How do the vendor-agnostic settings apply to non-DDS middlewares?
What should documentation look like for (1) abstracted DDS settings, (2) DDS vendor specific settings, and (3) non DDS vendor settings?