tf话题和常用的tf命令

TF发布的话题一般有两种: tftf_static

tf是只要有节点发布就会有消息, tf_static是在已知的坐标发生变化或有新的节点订阅的时候才会发布新的消息

tf 话题

录制数据集时一定要录这个话题

tf_static 话题

tf_static是静态转换, 和tf的格式一样, any transform on this topic can be considered true for all time. Internally any query for a static transform will return true.

tf_static的发布者使用latched topics, the tf2_ros static_transform_publisher does this correctly. Note: avoid multiple latched static transform publishers on /tf_static in the same process, because with multiple latched publishers within the same node only one will latch correctly.

比如这样的,echo只有这一条结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
transforms: 
-
header:
seq: 0
stamp:
secs: 1652186247
nsecs: 41763935
frame_id: "base_link"
child_frame_id: "move_link"
transform:
translation:
x: 0.0
y: 0.0
z: 0.0
rotation:
x: 0.0
y: 0.0
z: 0.0
w: 1.0
-
header:
seq: 0
stamp:
secs: 1652186247
nsecs: 41846600
frame_id: "base_link"
child_frame_id: "shelf_link"
transform:
translation:
x: 0.0
y: 0.0
z: 0.0
rotation:
x: 0.0
y: 0.0
z: 0.0
w: 1.0
---

  1. rosrun tf view_frames

当启动ROS程序后,如果想查看存在的所有坐标系转换关系,可以使用命令rosrun tf view_frames,结果会在当前目录生成pdf文件:

顺便说一下,打开pdf的命令为evince frames.pdf

  1. rosrun rqt_tf_tree rqt_tf_tree

跟上一个命令差不多,区别是直接打开一个pdf文件,但不会保存

在仿真环境下,使用rostopic hz tf,发现tf的频率是40Hz左右,这个数值是各个tf变化叠加的结果,使用rqt_tf_tree可以看到
11-01__105511.png

有些转换可能显示average rate有数值,但是buffer 和 recent transform都是0,这种其实没有发生tf,所以不能算数。



左上角还有一个clear buffer按钮,Buffer length会清零
Buffer length表示tf buffer中有几秒的数据可使用,rqt_tf_tree中是10秒,view frames大约5秒

  1. tf_echo

本命令用来查看两个坐标系之间的实时转换,需要5秒钟:

1
rosrun tf tf_echo /turtle1 /turtle2   //turtle1是parent坐标系, turtle2是child

  1. rqt_tf_tree

rosrun rqt_tf_tree rqt_tf_tree显示一个带界面的tf图显示工具,不必等待,然后可以另存为svg,png等格式
结果发现刷新按钮不好用,当tf树改变后,刷新有时没有改变显示,有时工具无法响应了

  1. launch文件中的应用

如果要让两个坐标系建立转换关系,常常在launch文件中添加

1
<node args="-0.24 0 0.295 1.571 0 -1.571 /base_link /camera 10" pkg="tf" name="base_link_to_camera" type="static_transform_publisher"/>

这个节点就是以base_link为parent坐标系,向camera转换的欧拉角形式。前三个参数是x,y,z三个方向的位移,之后的三个参数是yaw,pitch,roll,然后是parent坐标系和child坐标系,最后是隔多长时间发送一次变换,一般取100(ms)。另一种形式就是四元数形式,也就是将第4~6参数换为qx,qy,qz,qw。