🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 8.2 TF消息 ### 8.2.1 TransformStamped.msg ![](https://img.kancloud.cn/d5/e3/d5e343152cd965edd66ca66e876a66fd_1920x1080.png) 上一节在介绍ROS中的TF时候我们已经初步的认识了TF和TF树,了解了在每个frame之间都会有broadcaster来发布消息维系坐标转换.那么这个消息到底是什么样子的呢?这个消息TransformStampde.msg,它就是处理两个frame之间一小段tf的数据格式. ### 8.2.2 格式规范 TransformStamped.msg的格式规范如下: ``` std_mags/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 ``` 观察标准的格式规范,首先header定义了序号,时间以及frame的名称.接着还写了child\_frame,这两个frame之间要做那种变换就是由geometry\_msgs/Transform来定义.Vector3三维向量表示平移,Quaternion四元数表示旋转.像下图TF树中的两个frame之间的消息,就是由这种格式来定义的.odom就是frame\_id,baselink\_footprint就是child\_frame\_id.我们知道,一个topic上面,可能会有很多个node向上面发送消息。如图所示,不仅有我们看到的frame发送坐标变换个tf,还有别的frame也在同样的向它发送消息。最终,许多的TransformStamped.msg发向tf,形成了TF树。 ![](https://img.kancloud.cn/7d/21/7d21112aa0b530b172dc067235b50e9a_346x691.jpg) ### 8.2.3 TF树的数据类型 上面我们讲了,TF tree是由很多的frame之间TF拼接而成。那么TF tree是什么类型呢?如下: * tf/tfMessage.msg * tf2_msgs/TFMessage.msg 这里TF的数据类型有两个,主要的原因是版本的迭代。自ROS Hydro以来,tf第一代已被“弃用”,转而支持tf2。tf2相比tf更加简单高效。此外也添加了一些新的功能。 由于tf2是一个重大的变化,tf API一直保持现有的形式。由于tf2具有tf特性的超集和一部分依赖关系,所以tf实现已经被移除,并被引用到tf2下。这意味着所有用户都将与tf2兼容。官网建议新工作直接使用tf2,因为它有一个更清洁的界面,和更好的使用体验。 如何查看自己使用的TF是哪一个版本,使用命令`rostopic info /tf`即可。 ### 8.2.4 格式定义 tf/tfMessage.msg或tf2_msgs/TFMessage标准格式规范如下: ``` 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 ``` 如上,一个TransformStamped数组就是一个TF tree。