tf_prefix和多机器人的应用

为了支持多个“相似”的机器人,tf使用tf_prefix参数。没有tf_prefix参数,帧名base_link将解析为/base_link

如果tf_prefix参数设置为robot1base_link将解析为/robot1/base_link。这在运行多机器人时是最有用的,否则这些机器人将在其frame_ids中具有名称冲突。

源码其实很简单:

1
2
3
4
5
6
7
8
9
10
inline 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