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 ::サブスクライバサブ = nh.subscribe(" my_private_topic "、....)。


上記の例では、サブスクライブします<node_nameの> / my_private_namespace / my_private_topic

注:上記のマークされた箇所の焦点を理解する上で、node_namespaceとNODE_NAMEは、二つの異なるものです!

NODE_NAME = node_namespace +ノード名

補足デモ

// 起動ファイル== nsの"node_namespace" 

ROS ::のinit(argcの、ARGV、" NODE_NAME "); // ノード名

ROS :: NodeHandle N-; // n型のネームスペース/ node_namespace 

ROS :: NodeHandle N1(" サブ"); // N1名前空間/ node_namespace /サブ

ROS :: NodeHandle N2(N1、" SUB2 "); // N2名前空間/ node_namespace /サブ/ SUB2 

ROS :: NodeHandle PN1(" "); // PN1名前空間/ node_namespace / node_nameの

ROS :: NodeHandle PN2(" 〜サブ");//PN2の名前空間/ node_namespace / node_nameの/サブ

ROS :: NodeHandle PN3(" 〜/サブ"); // PN3名前空間/ node_namespace / node_nameの/サブ

ROS :: NodeHandle GN(" /グローバル"); // GN名前空間/グローバル

 

おすすめ

転載: www.cnblogs.com/kerngeeksund/p/11184398.html