第 5 章 ROS多坐标系关系查看(自学二刷笔记)

重要参考:

课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ

讲义链接:Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

5.1.5 坐标系关系查看

在机器人系统中,涉及的坐标系有多个,为了方便查看,ros 提供了专门的工具,可以用于生成显示坐标系关系的 pdf 文件,该文件包含树形结构的坐标系图谱。

1.准备

首先调用 rospack find tf2_tools 查看是否包含该功能包,如果没有,请使用如下命令安装:

sudo apt install ros-noetic-tf2-tools
2.使用
2.1生成 pdf 文件

启动坐标系广播程序之后,运行如下命令:

rosrun tf2_tools view_frames.py

会产生类似于下面的日志信息:

[INFO] [1592920556.827549]: Listening to tf data during 5 seconds...
[INFO] [1592920561.841536]: Generating graph in frames.pdf file...

查看当前目录会生成一个 frames.pdf 文件

2.2查看文件

可以直接进入目录打开文件,或者调用命令查看文件:evince frames.pdf

内如如图所示:


另请参考:

5.1.7 TF2与TF

1.TF2与TF比较_简介
  • TF2已经替换了TF,TF2是TF的超集,建议学习 TF2 而非 TF

  • TF2 功能包的增强了内聚性,TF 与 TF2 所依赖的功能包是不同的,TF 对应的是 tf 包,TF2 对应的是 tf2 和 tf2_ros 包,在 TF2 中不同类型的 API 实现做了分包处理。

  • TF2 实现效率更高,比如:在TF2 的静态坐标实现、TF2 坐标变换监听器中的 Buffer 实现等

2.TF2与TF比较_静态坐标变换演示

接下来,我们通过静态坐标变换来演示TF2的实现效率。

2.1启动 TF2 与 TF 两个版本的静态坐标变换

TF2 版静态坐标变换:rosrun tf2_ros static_transform_publisher 0 0 0 0 0 0 /base_link /laser

TF 版静态坐标变换:rosrun tf static_transform_publisher 0 0 0 0 0 0 /base_link /laser 100

会发现,TF 版本的启动中最后多一个参数,该参数是指定发布频率

2.2运行结果比对

使用 rostopic 查看话题,包含 /tf 与 /tf_static , 前者是 TF 发布的话题,后者是 TF2 发布的话题,分别调用命令打印二者的话题消息

rostopic echo /tf :当前会循环输出坐标系信息

rostopic echo /tf_static :坐标系信息只有一次

2.3结论

如果是静态坐标转换,那么不同坐标系之间的相对状态是固定的,既然是固定的,那么没有必要重复发布坐标系的转换消息,很显然的,tf2 实现较之于 tf 更为高效