I'll just add to what Dirk said, by saying that I don't know of a "best" solution for multi-robot as the use cases in that category vary quite a bit. In my experience working on the capability_server with the Rocon project:
I found that a lot of what was lacking was functionality in the middleware for partitioning and dynamically adjusting the robots communications during runtime. Now, whether or not that partitioning needed to be virtually/logically separated (discovery is shared, but communication is logically segmented) or physically separated (the two parts of the system talk on different ports but there is some extra-middleware coordination between the physical groups) is not clear to me. I think the physically separated groups made since for the applications of the ROCON project, but for other projects you might want discovery between robots to be shared, but communication logically partitioned.
If you go with physically partitioning the systems, then you have to figure out how to relay information between the groups. ROS 1 didn't make this easy because you could not have two nodes in a single process much less two nodes in a process, each on a different physical network. In ROS 2 you'll be able to have two nodes in a single process, one node on each physically separated network that share information between each other in the processes' memory. But even that strategy may not be preferred, which is part of the problem (it's not clear what is the best way).
If you use logical partitioning, then you have a few ways of organizing that. In ROS 1 you'd do it with namespaces, but with DDS you also have the option of using "keyed" data. I believe that you can accomplish anything with one that you can the other, but there might be implications about the intuitiveness of the design and introspection or implications to do with performance which might make you prefer one over the other. We don't expose the keyed data feature in ROS 2 yet, but it would be interesting to figure out if it is needed for multi-robot applications.
Whether you're physically or logically separating the parts of the multi-robot system, you need to pass some information between parts of the system. I found it frustrating that I could not dynamically remap a topic or alias a topic to another name after a node was running. This was a desirable feature in the ROCON system because apps which used the robots started after the robot was started. And services, like navigation, could be used by multiple other things simultaneously which lead to the need to be flexible with routing of information within the robot and without. Without these features, you had to change the application code or restart the navigation processes, or in some situations you could not resolve the conflict. I think that some of these flexibilities which we want to have in ROS 2 will help with this. On the other hand, there are almost certainly systems where the flexibility is a liability not a feature and so, as I said a few times now, there is no clear best solution. So instead, I'm just trying to identify pain points from experience and talking with people and then address them in the design of ROS 2.
Not sure that gives you any helpful direction, but that's how I see the issue. Trying to address symptoms to support a variety of solutions.