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...