ROS Nodehandle句柄


轉:https://blog.csdn.net/lyx_323/article/details/86504407

1、句柄可以讓你通過構造函數指定命名空間

ros::NodeHandle nh("my_namespace");

這使得使用該句柄的任何相對名字都是相對<node_namespace>/my_namespace,而不是只相對<node_namespace>

你也可以指定一個父句柄和追加的命名空間

ros::NodeHandle nh1("ns1");

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

這將把nh2放入到<node_namespace>/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

 


免責聲明!

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



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