1. 广播transform变换关系,3步骤
// 1. 创建广播对象 transform_broadcaster
// 2. 创建变换关系 transform R_parent_child
// 3. 广播这个变换关系,并且告知tf树谁是parent,谁是child
究竟是谁到谁的变换,取决于第3步中你想把谁填在前面,填在后面,上面的步骤给出了一个变换例子。
参考:
2. 创建监听者,参见文献[1]
每个监听者都有一个缓冲区,用于存储来自不同广播者广播的变换关系。
3. 添加坐标系
3.1为什么要添加坐标系?
对于许多任务,更容易在局部坐标系思考,因此,我们只需要考虑相邻坐标系的变换,不同坐标系的变换由tf树内部计算得到!!!
3.2 在哪里添加坐标系
tf树建立了一个 树形坐标结构,它不允许在坐标系结构中出现闭环。这意味着一个坐标系仅仅只有一个父结点,但是可以有多个子结点。
3.3 如何添加坐标系
就像1中一样广播一个transform即可。
4. tf和Time
推荐使用ros::Time(0),这会自动等待获取最新帧变换,最新帧变换传过来需要几毫秒。
参考:
[2].浅析TF树中ros::Time(0)和ros::Time::now()_光头明明的博客-优快云博客_ros::time(0)
5. 未完待续。。。
1. 查看tf关系图
rosrun rqt_tf_tree rqt_tf_tree
2. 查看指定名称两个坐标系的变换关系
rosrun tf tf_echo /world /turtle1
上述输出的坐标变换,是R_world_turtle,依次类推