以下の内容はhttps://graziegrazie.hatenablog.com/entry/2018/12/02/222227より取得しました。


コマンドライン中で指定したパラメータ名をノード中で取得する方法(C++)

結論から言うと、2種類の方法があります。

  1. ros::names::remap : 返り値としてremapされたパラメータ名が取得できます。
  2. resolveName : 返り値としてremapされたパラメータ名が取得できます。第二引数でremapが成功したかをboolで取得できます。
ros::names::remap

remapされた名前は返り値として返されます。また返された名前は、絶対パスで返されます。つまり、

std::string remapped_name = ros::names::remap("hoge")
std::cout << remapped_name << std::endl;

というコードがノード中に書いてあり、さらに

rosrun node node hoge:=fuga

を実行すると、

/fuga

が表示されます。これはros::names::remapがノードハンドルのメンバ関数ではないためと考えれます。

resolveName

remapされた値は、ノードハンドルのNameSpaceによって変化します。例えば
コード中に

ros::Nodehandle n;
bool resolve_result;
std::string remap = n.resolveName("hoge", resolve_result);
std::cout << remap << std::endl;

と書いてあり、

rosrun node node hoge:=fuga

を実行すると、

/fuga

が表示されます。また

ros::init(argc, argv, "node_name");
ros::Nodehandle n(~);
bool resolve_result;
std::string remap = n.resolveName("hoge", resolve_result);
std::cout << remap << std::endl;

と記載がある状態で

rosrun node node hoge:=fuga

を実行すると、

/node_name/fuga

が表示されます。こちらはノードハンドルのメンバ関数のため、ノードハンドルの持つNameSpaceの影響を受けることがわかります。

ご参考になりましたら幸いです。




以上の内容はhttps://graziegrazie.hatenablog.com/entry/2018/12/02/222227より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14