"ros::NodeHandle"的用法
1. 自動啟動和結束
ros::NodeHandle
管理着一個內部引用數,使得開啟和結束一個節點(node)可以簡單地按照下面一行代碼完成:
ros::NodeHandle nh;
2. 命名空間(Nnamespaces)
NodeHandles
可以指定一個命名空間給它的構造函數:
ros::NodeHandle nh("my_namespace");
這行代碼將創建一個相對於NodeHandle
的域名,<node_namespace>/my_namespace
,而不是直接地表示為<node_namespace>
。
你也可以指定一個父節點的NodeHandle和命名空間,后面可以跟子節點的NodeHandle和命名空間:
ros::NodeHandle nh1("ns1");
ros::NodeHandle nh2(nh1, "ns2");
這將會把nh2
放在<node_namespace>/ns1/ns2
的命名空間下。
全局域名(Global Names)
如果確實需要,你可以指定一個全局域名:
ros::NodeHandle nh("/my_global_namespace");
這樣的方式通常不是很推薦,因為它會阻止節點被放進命名空間(如使用roslaunch
)。但是,有時候,在代碼中使用全局命名空間也會很有用。
私有域名(Private Names)
使用私有域名比起直接調用一個帶有私有域名("~name")的NodeHandle
函數要麻煩一點。相反,你必須創建一個新的位於私有命名空間的NodeHandle
:
ros::NodeHandle nh("~my_private_namespace");
ros::Subscriber sub = nh.subscribe("my_private_topic", ...);
上面這個例子將會訂閱話題<node_name>/my_private_namespace/my_private_topic
。