介绍“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
sudo dnf install ros-rolling-rviz2 ros-rolling-turtle-tf2-py ros-rolling-tf2-ros ros-rolling-tf2-tools ros-rolling-turtlesim
git clone https://github.com/ros/geometry_tutorials.git -b ros2
运行演示
现在我们已经安装了 turtle_tf2_py
教程包,让我们运行演示。
首先,打开一个新终端并 source your ROS 2 installation,以便 ros2
命令可以正常工作。
然后运行以下命令:
ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py
您将看到 turtlesim 以两只海龟开始。
在第二个终端窗口中输入以下命令:
ros2 run turtlesim turtle_teleop_key
一旦启动了 turtlesim,您就可以使用键盘箭头键在 turtlesim 中驱动中央海龟, 选择第二个终端窗口,这样您的按键就会被捕获来驱动海龟。
您可以看到一只海龟不断移动以跟随您正在驾驶的海龟。
发生了什么?
此演示使用 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”。
在这里我们可以看到 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 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]
当你驾驶你的乌龟四处移动时,你会看到随着两个乌龟相对移动,变换也随之变化。
rviz2 和 tf2
rviz2
是一个可视化工具,可用于检查 tf2 帧。
让我们使用 rviz2
查看我们的乌龟帧,方法是使用 -d
选项启动配置文件:
ros2 run rviz2 rviz2 -d $(ros2 pkg prefix --share turtle_tf2_py)/rviz/turtle_rviz.rviz
for /f "usebackq tokens=*" %a in (`ros2 pkg prefix --share turtle_tf2_py`) do rviz2 -d %a/rviz/turtle_rviz.rviz
在侧边栏中,你会看到 tf2 广播的帧。 当你驾驶乌龟四处移动时,你会看到帧在 rviz 中移动。