[ros-users] Multi-robot communication

Gonçalo Cabrita goncabrita at gmail.com
Mon Jul 19 09:36:51 UTC 2010

First of all, big thanks to everyone that contributed with ideas and

We finally finished our multi-robot communication ROS node which we now call

As Blaise suggested we used foreign_relay to open a communication channel
between robots.

We also took a look at the code Aggeliki from Brown pointed us at from which
we took allot of ideas. We ended up integrating not BATMAN but olsrd since
we had previous experience with it.

Finally we listened to Brian and we managed to stay away from opaque
messages :) We open a foreign_relay for each topic we want to share. We
started to right a wifi_comm_node with an opaque msg but we never finished,
although we chose to leave the code there.

So to sum things up we start olsrd, we then star the wifi_discovery_node
which broadcasts a list of available ips, and then we did a library which we
use to open the foreign_relays and exchange data. Along with the code we
included an Hello World example. We hope the code is modular and flexible
enough so that when roscore-multi-master becomes available we
can easily change our node accordingly.

You can find the node at the following link:


We've just started our google code webpage so it's still quite empty at the
time :)


Gonçalo Cabrita
ISR - University of Coimbra

On Mon, Jul 12, 2010 at 9:28 PM, Brian Gerkey <gerkey at willowgarage.com>wrote:

> hi Gonçalo,
> I think that in this case, you really want the masters on the robots
> to share topic and service registration information.  We've talked
> about several ways of doing this, including a kind of NFS-like
> "mount," but haven't seriously implemented anything yet.
> I know that the folks at Penn have hacked roscore so that multiple
> masters find each other via DNS-SD (aka Bonjour) and then exchange
> information about certain publishers and subscribers.
> When the masters communicate, you don't need any relays; nodes
> associated with one master connect directly to nodes associated with
> another master.
>        brian.
> 2010/7/12 Gonçalo Cabrita <goncabrita at gmail.com>:
> > Hi Brian,
> > Thanks for your feedback.
> > I see what you mean... So is there any other way of doing this? Right now
> > this is what we've come up with...
> > We use olsr (http://www.olsr.org/) to get to know which robots are in
> our
> > network. This information is published as a msg over ROS. So each robot
> now
> > knows who is online. We then use foreign_relay to send ROS msgs from one
> > robot to the other.
> > I'm taking care of this part and I though it would be nice if I could
> write
> > up a ROS srv that has as inputs the ip (or ips) of the robot to send a
> msg
> > to and then an opaque msg where you can send anything. The srv would then
> > encapsulate the desired msg along with the ip of the sender and publish
> it
> > over foreign_relay. The receiving robot would then get the message and
> know
> > who it came from. I was aiming for a flexible node, easy to use.
> > However if we are to use defined types how can we accomplish this? Should
> we
> > open a foreign_relay for each topic we want to use between each 2 robots?
> > Thanks for the help,
> > Gonçalo Cabrita
> > ISR - University of COoimbra
> > Portugal
> > On Mon, Jul 12, 2010 at 5:57 PM, Brian Gerkey <gerkey at willowgarage.com>
> > wrote:
> >>
> >> 2010/7/12 Gonçalo Cabrita <goncabrita at gmail.com>:
> >> > We've been working on our comm node and we have encountered a problem.
> >> > We are thinking about creating a ROS msg to send over foreign_relay
> that
> >> > looks like this:
> >> > int robot_id
> >> > ShapeShifter msg
> >> > We would like to know if ShapeShifter can be used to hold any message
> we
> >> > might want to send and if we need an extra field like msg_type or not.
> >>
> >> No, ShapeShifter is not a ROS message.  It's a a C++ class that is
> >> used by certain tools to handle messages without knowing their types
> >> (and it's a pretty hacky way of doing that).  All ROS messages are
> >> explicitly typed when sent over the wire.  If you really want to send
> >> an opaque blob of data (not recommended, as you'd be circumventing the
> >> ROS marshaling support, and would lose the ability to introspect
> >> messages), then you can do something like:
> >>
> >> uint8[] msg
> >>
> >>        brian.
> >> _______________________________________________
> >> ros-users mailing list
> >> ros-users at code.ros.org
> >> https://code.ros.org/mailman/listinfo/ros-users
> >
> >
> > _______________________________________________
> > ros-users mailing list
> > ros-users at code.ros.org
> > https://code.ros.org/mailman/listinfo/ros-users
> >
> >
> _______________________________________________
> ros-users mailing list
> ros-users at code.ros.org
> https://code.ros.org/mailman/listinfo/ros-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ros.org/pipermail/ros-users/attachments/20100719/ee022ffa/attachment-0003.html>

More information about the ros-users mailing list