ROS Nodehandle控制代碼

2021-07-31 04:00:42 字數 1526 閱讀 7899

1、控制代碼可以讓你通過建構函式指定命名空間

ros::nodehandle nh("my_namespace");

這使得使用該控制代碼的任何相對名字都是相對<

node_namespace>/my_namespace,而不是只相對

你也可以指定乙個父控制代碼和追加的命名空間

ros::nodehandle nh1("ns1");

ros::nodehandle nh2(nh1,"ns2");

這將把nh2放入到/ns1/ns2命名空間

2、也可以指定全域性名字

ros::nodehandle nh("/my_global_namespace");

這種做法並不推薦,因為這樣會使得節點無法被放入別的命名空間。只是有時在**中使用全域性名字有用。

3、私有名字

使用私有名字比直接呼叫有私有名的控制代碼方法更有技巧,你可以在乙個私有命名空間中直接建立乙個新的控制代碼。

ros::nodehandle nh("~my_private_namespace");

ros::subscriber sub = nh.subscribe("my_private_topic",....);

以上例子會訂閱<

node_name

>/my_private_namespace/my_private_topic

注意:理解的重點上文中紅色標註的部分,

node_namespace

和node_name

是兩回事!

node_name = node_namespace + nodename

補充demo

// launch 檔案中 ns=="node_namespace"

ros::init(argc, argv, "node_name"); // node name

ros::nodehandle n; //n 命名空間為/node_namespace

ros::nodehandle n1("sub"); // n1命名空間為/node_namespace/sub

ros::nodehandle n2(n1,"sub2");// n2命名空間為/node_namespace/sub/sub2

ros::nodehandle pn1("~"); //pn1 命名空間為/node_namespace/node_name

ros::nodehandle pn2("~sub"); //pn2 命名空間為/node_namespace/node_name/sub

ros::nodehandle pn3("~/sub"); //pn3 命名空間為/node_namespace/node_name/sub

ros::nodehandle gn("/global"); // gn 命名空間為/global

ros NodeHandle與命名空間的那些事兒

首先,它提供簡單的啟動和關閉roscpp程式內部節點。其次,它提供了額外的命名空間解析層,可以使編寫子元件更容易。ros nodehandle管理內部引用計數,以便啟動和關閉節點,如下所示 ros nodehandle nh 在建立時,如果內部節點尚未啟動,則ros nodehandle將啟動該節點...

控制代碼 控制代碼工具 VC 獲取控制代碼

控制代碼 handle 是乙個用來標識物件的識別符號。windows之所以要設立控制代碼,根本上源於記憶體管理機制的問題,即虛擬位址。簡而言之資料的位址需要變動,變動以後就需要有人來記錄 管理變動,因此系統用控制代碼來記載資料位址的變更。在程式設計中,控制代碼是一種特殊的智慧型指標,當乙個應用程式要...

控制代碼和偽控制代碼

控制代碼的由來 從visual c 的標頭檔案來看,handle被typedef為void的指標,那是指向未確定資料結構的指標 typedef void handle 但是這並不說明任何問題,因為控制代碼遠遠不只是指向任意資料型別的指標。它是指向資料物件指標的指標。控制代碼的使用 於早期的windo...