コマンドライン中で指定したパラメータ名をノード中で取得する方法(C++)
結論から言うと、2種類の方法があります。
- ros::names::remap : 返り値としてremapされたパラメータ名が取得できます。
- 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の影響を受けることがわかります。
ご参考になりましたら幸いです。