[ros-users] Node Handle details

Jack O'Quin jack.oquin at gmail.com
Tue Dec 21 19:04:53 UTC 2010


These are good questions and good answers, maybe worth adding to the
wiki somewhere:

On Tue, Dec 21, 2010 at 12:06 PM, Jeremy Leibs <leibs at willowgarage.com> wrote:
>
>
> On Tue, Dec 21, 2010 at 8:46 AM, joan_perez <jnperez at iri.upc.edu> wrote:
>>
>> Hi all,
>>
>> I have a few questions related to node handles which I believe have not
>> been
>> asked before. For what I have seen, there are many different ways of using
>> node handles. I could not find the answers in the
>> http://www.ros.org/wiki/roscpp/Overview/NodeHandles wiki  nor in any
>> previous topic.
>>
>> 1- It is better to have a single node handle for all topics in a node, or
>> it
>> is more appropriate to use a node handle per topic?
>
> Generally, a single node handle is fine.  The only time people typically
> want to create extra nodehandles is to push a group of topics into a
> namespace.  e.g. all the outgoing image topics into a "camera" namespace.
>  But even then, all topics in the same namespace can make use of the same
> nodehandle.
>
>>
>> 2- Related to these question, should I declare node handles as member
>> class
>> attributes or just as function variables? I have even seen node handles
>> created on a function call.
>
> In the grand scheme of things, nodehandles, are fairly cheap, but they are
> certainly not free to create.  Member class attributes is almost certainly
> the way to go.  I would avoid creating a new node handle in any function
> that is called in a loop.  But if the function is only being called once by
> your main function, there's no reason the node handle has to be part of a
> class.
>
>>
>> 3- Should I better use node handle's namespace rather than node namespace?
>>
>
> I'm not sure what you mean by this.  The default nodehandle is in the
> namespace of the node. Nodehandle namespaces should only be used to push
> things down further.
>
>>
>> 4- Which is the main purpose of the private node handle (the one with
>> private namespace "~")? It is meant to be used only for the parameter
>> server?
>
> This has never been terribly well specified, and different people will give
> you different opinions.  The rule of thumb has been to use the node private
> namespace for very specific things that are only relevant to your node.
>  Configuration parameters is one of the best examples of this.  You can, of
> course, publish topics there, but it doesn't fit well within the notion of
> "anonymous publish-subscribe" since it means any subscriber needs to know
> the name of your node to listen to it.  The key here is that nodes should
> really never be looking inside the private namespace of another node.
>
>>
>> 5- Is there any additional feature (apart from queuing relative namespace)
>> for specifying a node handle as child from the other?
>
> Managing relative namespaces is all that nodehandles are good for.  When you
> make one nodehandle the child of another, all it does is append its
> namespace onto the namespace of its parent.


-- 
 joq



More information about the ros-users mailing list