介绍``tf2``

目标: 运行一个turtlesim演示,并在使用turtlesim的多机器人示例中展示tf2的部分功能。

教程级别: 中级

时间: 10分钟

安装演示程序

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

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

运行演示

既然我们已经安装了``turtle_tf2_py``教程包,让我们来运行演示。首先,打开一个新的终端并:doc:配置你的ROS 2环境,这样``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库创建了三个坐标系:``world``坐标系、``turtle1``坐标系和``turtle2``坐标系。本教程使用tf2广播器发布乌龟坐标系,并使用tf2监听器计算乌龟坐标系之间的差异,并使一只乌龟跟随另一只乌龟移动。

tf2工具

现在让我们看看tf2是如何用于创建这个演示的。我们可以使用``tf2_tools``来查看tf2在幕后的工作。

1 使用view_frames

``view_frames``会创建一个图示,显示tf2通过ROS广播的坐标系。

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 广播的三个帧:worldturtle1``和``turtle2world 是``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 1622031731.625364060
- Translation: [2.796, 1.039, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.202, 0.979]
At time 1622031732.614745114
- Translation: [1.608, 0.250, 0.000]
- Rotation: in Quaternion [0.000, 0.000, 0.032, 0.999]

当您驱动乌龟移动时,您将看到变换随着两只乌龟相对移动而改变。

rviz和tf2

“rviz”是一个可用于检查tf2帧的可视化工具。让我们使用rviz来查看我们的乌龟帧。使用“-d”选项,启动“rviz”,并使用“turtle_rviz.rviz”配置文件:

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

在侧边栏中,您将看到tf2广播的帧。当您驱动乌龟时,您将看到这些帧在rviz中移动。