本文主要内容参考自ROS wiki,在加入了自己的一些理解的同时,也对原文进行了适当的修改。原文使用Creative Commons Attribution 3.0,本文使用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议协议,若使用本文,请自觉遵守相关协议。
tf是一个可以让用户实时追踪多个坐标系的功能包。tf通过一个实时缓存的树结构来维护坐标系之间的关系,可以让用户任何时间点完成两个坐标系之间点、向量之间的转换。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aYqxrdfk-1576511671255)(http://wiki.ros.org/tf?action=AttachFile&do=get&target=frames2.png)]
主要功能
一个典型的机器人系统通常会有许多随着时间改变的3D坐标系,例如世界坐标系、基座坐标系、抓手坐标系、头部坐标系等等。tf会实时追踪所有的这些坐标系,并且可以解决类似于下面的这些问题:
- 头部坐标系在5秒之前相对于世界坐标系的位置是什么?
- 抓手对象相对于基座的位姿是什么?
- 目前极坐标系在地图中的位姿是什么?
NOTE:位姿是指机器人的位置和姿态信息,位置通常使用欧拉坐标x、y、z表示,而姿态信息通常使用r(roll)、p(pitch)、y(yaw),即分别在x、y、z旋转的角度,有时为了方便计算机处理也使用四元数(x,y,z,w)来表示。
tf可以运行在分布式系统中。这就意味着关于机器人坐标系的所有信息对于系统中所有ROS组件都是可见的。也就是说在转换系统中不存在中心服务器,任何一个节点都可发布转换关系。
在导航功能包中的应用
导航功能包需要知道传感器、轮子和关节的位置,因为机器人在导航过程中需要计算其各个组件与墙壁等障碍物的相对位置,这样的话才可以避免碰撞。在ROS中,我们可以使用tf功能包来完成这部分工作。正如上面所说的,它可以帮助我们管理坐标系,在机器人导航的过程中,tf会为我们处理这些坐标系的关系。
本文迁移自我的csdn博客:https://blog.csdn.net/github_30605157/article/details/71250106
参考资料
- ROS.org:tf
- ROS机器人程序设计,机械工业出版社