介绍“tf2”

目标: 运行 turtlesim 演示,并在使用 turtlesim 的多机器人示例中了解 tf2 的一些功能。

教程级别: 中级

时间: 10 分钟

安装演示

我们先安装演示包及其依赖项。

sudo apt-get install ros-rolling-rviz2 ros-rolling-turtle-tf2-py ros-rolling-tf2-ros ros-rolling-tf2-tools ros-rolling-turtlesim

运行演示

现在我们已经安装了 turtle_tf2_py 教程包,让我们运行演示。 首先,打开一个新终端并 source your ROS 2 installation,以便 ros2 命令可以正常工作。 然后运行以下命令:

ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py

您将看到 turtlesim 以两只海龟开始。

../../../_images/turtlesim_follow1.png

在第二个终端窗口中输入以下命令:

ros2 run turtlesim turtle_teleop_key

一旦启动了 turtlesim,您就可以使用键盘箭头键在 turtlesim 中驱动中央海龟, 选择第二个终端窗口,这样您的按键就会被捕获来驱动海龟。

../../../_images/turtlesim_follow2.png

您可以看到一只海龟不断移动以跟随您正在驾驶的海龟。

发生了什么?

此演示使用 tf2 库创建三个坐标系:一个“世界”框架、一个“海龟 1”框架和一个“海龟 2”框架。 本教程使用 tf2 广播器 发布海龟坐标系,并使用 tf2 监听器 计算海龟框架中的差异并移动一只海龟以跟随另一只海龟。

tf2 工具

现在让我们看看如何使用 tf2 创建此演示。 我们可以使用“tf2_tools”查看 tf2 在幕后所做的事情。

1 使用 view_frames

view_frames 创建 tf2 通过 ROS 广播的帧的图表。 请注意,此实用程序仅适用于 Linux;如果您使用的是 Windows,请跳至下面的“使用 tf2_echo”。

ros2 run tf2_tools view_frames

您将看到:

Listening to tf data during 5 seconds...
Generating graph in frames.pdf file...

这里,tf2 监听器正在监听通过 ROS 广播的帧,并绘制一棵树来表示帧的连接方式。 要查看这棵树,请使用您最喜欢的 PDF 查看器打开生成的“frames.pdf”。

../../../_images/turtlesim_frames.png

这里我们可以看到 tf2 广播的三个帧:“world”、“turtle1”和“turtle2”。 “world”帧是“turtle1”和“turtle2”帧的父帧。 “view_frames”还报告了一些诊断信息,包括何时收到最旧和最近的帧变换,以及 tf2 帧发布到 tf2 进行调试的速度。

2 使用 tf2_echo

“tf2_echo”报告通过 ROS 广播的任何两个帧之间的变换。

用法:

ros2 run tf2_ros tf2_echo [source_frame] [target_frame]

让我们看一下“turtle2”框架相对于“turtle1”框架的变换,它等同于:

ros2 run tf2_ros tf2_echo turtle2 turtle1

当“tf2_echo”监听器接收通过 ROS 2 广播的帧时,您将看到显示的转换。

At time 1683385337.850619099
- Translation: [2.157, 0.901, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.172, 0.985]
- Rotation: in RPY (radian) [0.000, -0.000, 0.345]
- Rotation: in RPY (degree) [0.000, -0.000, 19.760]
- Matrix:
  0.941 -0.338  0.000  2.157
  0.338  0.941  0.000  0.901
  0.000  0.000  1.000  0.000
  0.000  0.000  0.000  1.000
At time 1683385338.841997774
- Translation: [1.256, 0.216, 0.000]
- Rotation: in Quaternion [0.000, 0.000, -0.016, 1.000]
- Rotation: in RPY (radian) [0.000, 0.000, -0.032]
- Rotation: in RPY (degree) [0.000, 0.000, -1.839]
- Matrix:
  0.999  0.032  0.000  1.256
 -0.032  0.999 -0.000  0.216
 -0.000  0.000  1.000  0.000
  0.000  0.000  0.000  1.000

当你驾驶你的乌龟四处移动时,你会看到随着两个乌龟相对移动,变换也随之变化。

rviz2 和 tf2

rviz2 是一个可视化工具,可用于检查 tf2 帧。 让我们使用 rviz2 查看我们的乌龟帧,方法是使用 -d 选项启动配置文件:

ros2 run rviz2 rviz2 -d $(ros2 pkg prefix --share turtle_tf2_py)/rviz/turtle_rviz.rviz
../../../_images/turtlesim_rviz1.png

在侧边栏中,你会看到 tf2 广播的帧。 当你驾驶乌龟四处走动时,你会看到帧在 rviz 中移动。