为了支持多个“相似”的机器人,tf使用tf_prefix参数。没有tf_prefix参数,帧名base_link
将解析为/base_link
如果tf_prefix参数设置为robot1
,base_link
将解析为/robot1/base_link
。这在运行多机器人时是最有用的,否则这些机器人将在其frame_ids中具有名称冲突。
源码其实很简单:1
2
3
4
5
6
7
8
9
10inline std::string getPrefixParam(ros::NodeHandle & nh)\
{
std::string param;
if (!nh.searchParam("tf_prefix", param))
return "";
std::string return_val;
nh.getParam(param, return_val);
return return_val;
}
一般用法是:1
2
3
4<group ns="robot_1">
<param name="tf_prefix" value="robot_1"/>
......
</group>
tf2不再支持tf_prefix
. my_frame
和/my_frame
是不同的坐标系名称, tf2不接受以/
开头的坐标系名称,否则会报tf2::InvalidArgument exception