結論から言うと、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の影響を受けることがわかります。
ご参考になりましたら幸いです。