"ros::NodeHandle"的用法:全局vs.私有


"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

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM