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 wrote: > > > On Tue, Dec 21, 2010 at 8:46 AM, joan_perez 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