ROS学习笔记(十三) TF介绍(一)

TF介绍(一)

TF:机器人不停部位之间的坐标转换。坐标转换包括位置和姿态两方面,ROS中的tf是一个让用户随时记录多个坐标系的软件包。tf保持缓存的树形结构中的坐标系之间的关系,并允许用户在任何期望的时间点在任何两个坐标系之间转换点、矢量等。

tf可以被当做是一种标准规范,定义了坐标转换的数据格式和数据结构。tf本质是树状的数据结构(通常称之为tf tree),可以看成是一个topic:/tf,message保存的是tf tree的数据结构格式,维护了整个机器人(甚至是地图)的坐标转换关系。也可以看做package,包含了很多工具,比如可视化、查看关节的tf、debug tf等。tf含有一部分的接口(rospy、roscpp关于tf的API),可看成话题转换的标准、话题、工具、接口。
ROS学习笔记(十三) TF介绍(一)_第1张图片
ROS中机器人包含大量部件,称之为link,每一个link上面对应这一个frame(即一个坐标)。许多frame错综复杂地铺在机器人的各个link上,tf tree维护各个坐标系之间的关系、联通。

TF树:
ROS学习笔记(十三) TF介绍(一)_第2张图片

圆圈代表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四元数表示旋转)。

ROS学习笔记(十三) TF介绍(一)_第3张图片
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。

你可能感兴趣的:(ROS学习笔记,linux)