[ros-users] Transport statistics?

Karan, Cem F USA CIV (US) cem.f.karan.civ at mail.mil
Wed Oct 26 20:26:43 UTC 2011


Since both Nick and Lorenzo replied, I'm going to reply to both.  Nick,
I have an API suggestion at the end, please have a look at it.

> We're working on network health monitoring for inclusion in the next
> release (Fuerte). ("we" being the ROS SIGs for IPC and multirobot) It
> would be helpful to know more about your use case: what transport
> statistics you think would be useful, and what nodes would modify
> behavior as a result.
>
> Thanks!
> -Nick

Thanks for working on this Nick!  My use case is that I have a group of
robots that are connected wirelessly, wandering around and exploring an
indoor environment.  Since the environment pretty much guarantees that
they will not be able to communicate with the base station directly,
we've got a multi-hop protocol that we're putting together that relays
the messages from the base station to the lead robot and back again. The
reason I want to know about network health is so that intermediate
robots that are acting autonomously can be tasked with moving to
maintain communications.  To determine if a robot is in danger of losing
communications, we need to know the following:

- Latency between any pair of robots.

- Throughput between any pair of robots.

- Message loss rate; we all know that TCP tries to hide lost packets,
but we really need to know how many messages are lost to get an idea of
which robots are losing communications.

- At a much lower level, any information that the radio can provide; the
power it is transmitting at, the power that it is receiving from each of its
neighbors, etc.  I know that that could be a real headache as not all devices
are going to give you this information, but you asked what I wanted! :)

- If you choose to support multihop routing, then a routing list showing
the nodes that a message passed through, in the order that it passed
through them, and when it passed through them.  

The last point is what I'm working on right now. I'm writing an
application layer hack (NOT good enough for the general case!) that 
wraps the messages we're interested in in our own message that carries
this information along.  All nodes that relay a message along tack their
own names/timestamps onto the message, and all relays snoop on the     
information to update their own tables.  No idea if that will be good 
enough, but it is part of the information that I'd like to get hold of.

> Maybe this is slightly off topic, but it might be very useful to know
> the bandwidth usage of a single node, or even better if this bandwidth
> is split among topics/services (advanced feature?). This could be done
> e.g. by inserting a proxy node between the sender and the receiver,
> but other ways are possible.
>
> Lorenzo

That information would be useful to us as well, but to a lesser degree.

As for the API, I've always favored callbacks that permit any callable
to get passed in.  As a suggestion, pass in a dictionary to the callback
that contains any information of interest (e.g., if my callback is 'foo',
then the signature is 'foo(someDict)').  That way, if you need to add
more information later on, it is just a key/value pair away from being 
implemented.

Thanks,
Cem Karan


More information about the ros-users mailing list