TF介绍(一)
TF:机器人不停部位之间的坐标转换。坐标转换包括位置和姿态两方面,ROS中的tf是一个让用户随时记录多个坐标系的软件包。tf保持缓存的树形结构中的坐标系之间的关系,并允许用户在任何期望的时间点在任何两个坐标系之间转换点、矢量等。
tf可以被当做是一种标准规范,定义了坐标转换的数据格式和数据结构。tf本质是树状的数据结构(通常称之为tf tree),可以看成是一个topic:/tf,message保存的是tf tree的数据结构格式,维护了整个机器人(甚至是地图)的坐标转换关系。也可以看做package,包含了很多工具,比如可视化、查看关节的tf、debug tf等。tf含有一部分的接口(rospy、roscpp关于tf的API),可看成话题转换的标准、话题、工具、接口。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020080409444558.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDY4Mjk2NQ==,size_16,color_FFFFFF,t_70)
ROS中机器人包含大量部件,称之为link,每一个link上面对应这一个frame(即一个坐标)。许多frame错综复杂地铺在机器人的各个link上,tf tree维护各个坐标系之间的关系、联通。
TF树:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200804094915929.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDY4Mjk2NQ==,size_16,color_FFFFFF,t_70)
圆圈代表frame,对应机器人上的一个link,任意两个frame必须是联通的,若出现某一环节的断裂,就会error报错,故完整的tf tree不能有任何断层的地方。每两个frame之间都有一个broadcaster,为了令两个frame之间能正常连接,中间会有一个node来发布消息来broadcaster。如果没有node发布消息维护连通,那么两个frame之间的连接就会断掉。broadcaster是一个publisher,若两个frame之间发生了相对运动,broadcaster就会发布相关消息,broadcaster发布的消息就是TransformStampede.msg
TransformStampede.msg:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/Transfrom transform
geometry_msgs/Vector3 translation
float64 x
float64 y
float64 z
geometry_msgs/Quaternion rotation
float64 x
float64 y
float64 z
float64 w
header定义了序号、时间和frame名称,又写了child_frame,这两个frame之间的坐标变换由geometry_msgs/Transform定义(Vector3三维向量表示平移,Quaternion四元数表示旋转)。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200804102115792.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDY4Mjk2NQ==,size_16,color_FFFFFF,t_70)
odom就是frame_id,base0link_footprint就是child_frame_id,向tf发送消息。很多个TransformStampede.msg向tf发送坐标变换信息,形成tf tree。
TF树的数据类型
TFtree是由很多frame之间的TF拼接而成,TF tree类型:
tf/tfMessage.msg
tf2_msgs/TFMessage.msg
这里TF的数据类型有两个,主要的原因是版本的迭代。
上面我们讲了,TF tree是由很多的frame之间TF拼接而成。那么TF tree是什么类型呢?如下:
tf/tfMessage.msg
tf2_msgs/TFMessage.msg
tf/tfMessage.msg或tf2_msgs/TFmesasge.msg准格式规范:
geometry_msgs/TransformStamped[] transforms
std_msgs/Header header
uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/Transform transform
geometry_msgs/Vector3 translation
float64 x
float64 y
float64 z
geometry_msgs/Quaternion rotation
float64 x
float64 y
flaot64 z
float64 w
一个TransformStampede数组就是一个TF tree。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)