警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

介绍 tf2

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

辅导水平: 中级

时间 10 分钟

安装演示版

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

sudo apt-get install ros-galactic-turtle-tf2-py ros-galactic-tf2-tools ros-galactic-tf-transformations

运行演示

现在我们已经安装了 乌龟_tf2_py 教程包,让我们运行演示。首先,打开一个新终端,然后 为您的 ROS 2 安装提供源代码 以便 玫瑰2 命令即可。然后运行以下命令:

ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py

您会看到乌龟模拟游戏从两只乌龟开始。

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

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

ros2 run turtlesim turtle_teleop_key

启动海龟模拟器后,您可以使用键盘上的方向键在海龟模拟器中驱动中央海龟,选择第二个终端窗口,这样就可以捕捉到您驱动海龟的按键。

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

你可以看到,一只乌龟不断移动,跟着你驾驶的乌龟转圈。

发生了什么事?

该演示使用 tf2 库创建了三个坐标框架:a 世界 帧,一个 乌龟1 框架,以及一个 乌龟2 帧。本教程使用 tf2 广播器发布海龟坐标帧,并使用 tf2 监听器计算海龟帧的差异,然后移动一只海龟跟随另一只海龟。

tf2 工具

现在让我们来看看如何使用 tf2 制作这个演示。我们可以使用 tf2 工具 来看看 TF2 在幕后做了些什么。

1 使用视图框架

视图框架 创建 tf2 通过 ROS 广播帧的示意图。

ros2 run tf2_tools view_frames

你会看到

在 5 秒钟内监听 tf 数据...
在 frames.pdf 文件中生成图形...

在这里,tf2 监听器正在监听通过 ROS 广播的帧,并绘制帧之间的连接树。要查看树状图,请打开生成的 框架.pdf 使用您最喜欢的 PDF 阅读器。

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

在这里,我们可以看到 tf2 广播的三个帧: 世界, 乌龟1乌龟2.......。 世界 这里是 乌龟1乌龟2 镜框 视图框架 也会报告一些诊断信息,如何时接收到最早和最近的帧变换,以及 tf2 帧发布到 tf2 的速度,以便调试。

2 使用 tf2_echo

tf2_echo 报告通过 ROS 广播的任意两个帧之间的转换。

使用方法

ros2 运行 tf2_ros tf2_echo [reference_frame] [target_frame] [target_frame

让我们来看看 乌龟2 帧相对于 乌龟1 帧,相当于

ros2 run tf2_ros tf2_echo turtle2 turtle1

您将看到变换显示为 tf2_echo 监听器接收通过 ROS2 广播的帧。

时间 1622031731.625364060
- 翻译: [2.796, 1.039, 0.000][2.796, 1.039, 0.000]
- 旋转:以四元数 [0.000, 0.000, 0.202, 0.979] 表示
时间 1622031732.614745114
- 翻译:[1.608, 0.250, 0.000]
- 旋转:以四元数 [0.000, 0.000, 0.032, 0.999] 表示

当您驾驶您的乌龟四处游动时,您会看到变换随着两只乌龟的相对移动而变化。

rviz 和 tf2

rviz 是一款可视化工具,对检查 tf2 帧非常有用。让我们使用 rviz 来查看我们的乌龟帧。 turtle_rviz.rviz 配置文件,使用-d选择:

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

在侧边栏中,您将看到 tf2 播放的帧。当你驾驶乌龟移动时,你会看到帧在 rviz 中移动。