[ros-users] Nodelets and figuring out a publisher's source name
Tully Foote
tfoote at willowgarage.com
Mon Dec 27 21:13:48 UTC 2010
Hi François,
If the identity of the sender must be known I believe your use case
would be better handled by using separate topics. If the callback is
going to be switching on the callerid, it would be just as easy to
create different callbacks(aka different topics) for each case. You
can do this by parameterizing both the publisher and subscriber on
namespaces rather than callerids. This is significantly cleaner than
breaking the anonymous publish subscribe model of topics.
Here are a few advantages of this approach:
* being able to introspect each different channel w/ standard tools (aka
no network within a network requiring another set of routings and
debugging tools)
* being able to put throttle or relay nodes in between in case of a
changing system architecture (if you end up changing your layout of your
network or something it may be desirable to have relays or throttling of
messages)
* no hard coded node names in executables which would break operation of
different node if a node's name is remapped, which break w/o visibility
(whereas if a topic doesn't match up you will see it in rostopic and it
can be remapped with standard tools.)
* you can use multiple senders and receivers in the same process (aka
this can be used by both libraries and dynamically loaded libraries such
as nodelets)
Tully
On 12/27/2010 12:02 PM, Josh Faust wrote:
> Relying on the callerid to do anything programmatic is usually a bad
> idea. It's not just nodelets you'll have a problem with, it's any
> node with multiple publishers to the same topic. It's possible some
> identifying information will be added for each publisher at some point
> in the future, but not near-term.
>
> What exactly are you trying to do that requires a unique identifier
> per publisher?
>
> Josh
>
> On Mon, Dec 27, 2010 at 11:51 AM, François Ferland
> <francoisferland at francoisferland.com
> <mailto:francoisferland at francoisferland.com>> wrote:
>
> Hi,
>
> I'm currently porting some code over to a new Nodelet setup and
> I'm running into a small issue. We're using MessageEvent
> subscribers to find out from where some messages come from on
> topics with multiple publishers. The thing is, when these
> publishers are from nodelets, they all appear to come from the
> nodelet manager's node. From what I can figure out, this comes
> from the fact that ros::this_node::getName() is used to fill out
> message headers. Since this seems to be attached to the process
> itself, it
> won't contain the name of the ros::NodeHandle from which the
> publication was created.
>
> We do have have a workaround: running these specific nodelets as
> standalone, but it somewhat beats the whole point of writing them
> as nodelets. I do realize that changing the "callerid" header
> field behavior might have some important repercussions over the
> whole API, but would it be possible in a future revision ? Does
> anyone have a better workaround idea ?
>
> Thanks,
>
> François Ferland
> IntRoLab - Université de Sherbrooke, Canada
> http://introlab.gel.usherbrooke.ca
>
> _______________________________________________
> ros-users mailing list
> ros-users at code.ros.org <mailto: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/20101227/1dd9a4af/attachment-0003.html>
More information about the ros-users
mailing list