介绍``tf2`` [5813]

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

教程级别: 中级 [16770]

时间: 10分钟 [16421]

安装演示程序 [5015]

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

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

运行演示 [5816]

既然我们已经安装了``turtle_tf2_py``教程包,让我们来运行演示。首先,打开一个新的终端并:doc:配置你的ROS 2环境,这样``ros2``命令就能正常工作了。然后运行以下命令: [5817]

ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py

你将看到turtlesim启动并有两只海龟。 [5818]

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

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

ros2 run turtlesim turtle_teleop_key

一旦turtlesim启动,你可以使用键盘的箭头键驱动中央的海龟在turtlesim中移动,选择第二个终端窗口,这样你的按键操作将被捕捉到来驱动海龟。 [5820]

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

你会看到一只海龟不断地跟随着你驱动的海龟移动。 [5821]

发生了什么事? [5822]

此演示使用tf2库创建了三个坐标系:``world``坐标系、``turtle1``坐标系和``turtle2``坐标系。本教程使用tf2广播器发布乌龟坐标系,并使用tf2监听器计算乌龟坐标系之间的差异,并使一只乌龟跟随另一只乌龟移动。 [5823]

tf2工具 [5824]

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

1 使用view_frames [5826]

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

ros2 run tf2_tools view_frames

您将看到: [5828]

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

这里有一个 tf2 监听器在监听通过 ROS 广播的帧,并绘制连接帧的树形结构。要查看树形结构,请使用您喜欢的 PDF 查看器打开生成的“frames.pdf”文件。 [5829]

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

这里我们可以看到由 tf2 广播的三个帧:worldturtle1``和``turtle2world 是``turtle1``和``turtle2``帧的父级。``view_frames``还报告了一些诊断信息,包括接收到的最旧和最新帧变换的时间以及用于调试目的将 tf2 帧发布到 tf2 的速度。 [5830]

2 使用 tf2_echo [5831]

tf2_echo 报告了在 ROS 上广播的任意两个帧之间的变换。 [5832]

用法: [5833]

ros2 run tf2_ros tf2_echo [source_frame] [target_frame]

让我们看看“turtle2”相对于“turtle1”帧的变换,它等同于: [5834]

ros2 run tf2_ros tf2_echo turtle2 turtle1

当“tf2_echo”监听器接收到在ROS 2上广播的帧时,您将看到变换显示出来。 [5835]

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]

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

rviz和tf2 [5837]

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

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

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