中文总结
tf2 教程:使用 turtlesim 展示多机器人场景中的 tf2 功能
目标:通过运行 turtlesim 演示,展示在多机器人场景中 tf2 的强大功能。
教程难度:中级
时间:10 分钟
内容概览
- 安装演示环境
- 运行演示
- 演示过程解析
- tf2 工具使用
- 使用 view_frames
- 使用 tf2_echo
- rviz2 与 tf2 的结合使用
安装演示环境
首先,我们需要安装演示包及其依赖项。
Ubuntu 用户:
bash复制代码
sudo apt-get install ros-jazzy-rviz2 ros-jazzy-turtle-tf2-py ros-jazzy-tf2-ros ros-jazzy-tf2-tools ros-jazzy-turtlesim |
(注意:ros-jazzy-
前缀可能因 ROS 2 版本而异,请根据实际情况替换。)
运行演示
安装完成后,让我们运行演示。首先,打开一个新的终端并激活你的 ROS 2 安装,然后运行以下命令:
bash复制代码
ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py |
你将看到 turtlesim 启动并显示两只乌龟。
在第二个终端窗口中,输入以下命令:
bash复制代码
ros2 run turtlesim turtle_teleop_key |
现在,你可以使用键盘方向键在 turtlesim 中驾驶中间的乌龟。选择第二个终端窗口以确保你的按键输入被捕获以驱动乌龟。
你将看到一只乌龟持续移动以跟随你驾驶的乌龟。
演示过程解析
此演示使用 tf2 库创建了三个坐标框架:世界框架、turtle1 框架和 turtle2 框架。本教程使用 tf2 广播器发布乌龟坐标框架,并使用 tf2 监听器计算乌龟框架之间的差异,并移动一只乌龟以跟随另一只。
tf2 工具使用
现在,让我们看看 tf2 是如何在这个演示中使用的。我们可以使用 tf2 工具来查看 tf2 在后台的操作。
1. 使用 view_frames
view_frames 创建一个由 tf2 通过 ROS 广播的框架的图表。请注意,此实用程序仅在 Linux 上有效;如果你使用的是 Windows,请跳至下面的“使用 tf2_echo”。
bash复制代码
ros2 run tf2_tools view_frames |
你将看到 tf2 监听器正在监听通过 ROS 广播的框架,并绘制一个表示框架如何连接的树。要查看树,请使用你喜欢的 PDF 查看器打开生成的 frames.pdf。
在这里,我们可以看到 tf2 广播的三个框架:world、turtle1 和 turtle2。world 框架是 turtle1 和 turtle2 框架的父框架。view_frames 还报告了一些诊断信息,包括最早和最近接收到的框架变换的时间,以及为了调试目的,tf2 框架发布到 tf2 的速度。
2. 使用 tf2_echo
tf2_echo 报告通过 ROS 广播的任何两个框架之间的变换。
用法:
bash复制代码
ros2 run tf2_ros tf2_echo [source_frame] [target_frame] |
让我们查看 turtle2 框架相对于 turtle1 框架的变换,这相当于:
bash复制代码
ros2 run tf2_ros tf2_echo turtle2 turtle1 |
你将看到 tf2_echo 监听器接收通过 ROS 2 广播的框架时显示的变换。
当你驾驶乌龟移动时,你会看到两个乌龟相对移动时变换发生变化。
rviz2 与 tf2 的结合使用
rviz2 是一个可视化工具,对于检查 tf2 框架非常有用。让我们使用 rviz2 和配置文件(使用 -d 选项)查看我们的乌龟框架:
bash复制代码
ros2 run rviz2 rviz2 -d $(ros2 pkg prefix --share turtle_tf2_py)/rviz/turtle_rviz.rviz |
在侧边栏中,你将看到 tf2 广播的框架。当你驾驶乌龟移动时,你将在 rviz 中看到框架移动。
详细中文总结:
本教程通过运行 turtlesim 演示展示了 tf2 在多机器人场景中的功能。我们安装了必要的 ROS 2 包,并运行了一个包含两只乌龟的演示。通过键盘控制其中一只乌龟移动,另一只乌龟会自动跟随。这背后,tf2 库创建了三个坐标框架,并使用 tf2 广播器和监听器来处理框架之间的变换。我们还学习了如何使用 tf2 工具(如 view_frames 和 tf2_echo)来查看和分析这些变换。最后,我们展示了如何使用 rviz2 可视化工具来查看乌龟框架的实时移动。
练习题
单选题
-
在 tf2 的 turtlesim 演示中,通过哪个命令可以运行乌龟的遥控操作?
A.ros2 run turtlesim turtle_teleop_key
B.ros2 run turtlesim turtle_sim
C.ros2 run tf2_ros tf2_echo
D.ros2 run rviz2 rviz2
答案:A
-
在 tf2 演示中,哪个工具可以用来创建框架之间的变换关系的图表?
A.tf2_echo
B.view_frames
C.rviz2
D.turtle_teleop_key
答案:B
-
在 ROS 2 环境中,tf2 演示包通常安装在哪个前缀下?(注意:这里以一般形式提问,不特定于某个版本)
A.ros-<distro>-
B.ros2-<distro>-
C.ros-turtle-
D.tf2-
答案:B(其中
<distro>
代表具体的 ROS 2 发行版,如foxy
,galactic
等)哈哈哈 -
在 tf2 演示中,哪个文件用于在 rviz2 中配置乌龟框架的可视化?
A.turtle_tf2_demo.launch.py
B.turtle_rviz.rviz
C.tf2_echo.py
D.view_frames.py
答案:B
-
当使用
tf2_echo
查看两个框架之间的变换时,变换数据是如何通过 ROS 系统传输的?
A. 使用 TCP/IP 协议
B. 使用 ROS 话题(Topics)
C. 使用 ROS 服务(Services)
D. 使用文件系统答案:B
多选题
-
在 tf2 的 turtlesim 演示中,以下哪些工具或命令被用于演示和分析?
A.ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py
B.view_frames
C.turtle_teleop_key
D.ros2 run rviz2 rviz2
答案:A, B, C, D
-
在使用 tf2 时,以下哪些信息可以通过
view_frames
工具获得?
A. 框架之间的变换关系
B. 最早和最近接收到的框架变换的时间
C. 框架发布到 tf2 的速度
D. 乌龟的当前位置答案:A, B, C(D 选项关于乌龟的当前位置不是
view_frames
直接提供的信息)
判断题
-
在 tf2 的 turtlesim 演示中,只能看到一只乌龟在移动。( )
答案:错(实际上,可以看到两只乌龟,其中一只由用户控制移动,另一只根据 tf2 的变换关系自动跟随)
-
tf2_echo
工具可以用于查看任何两个框架之间的静态变换关系,但不能用于查看动态变化的变换。( )答案:错(
tf2_echo
可以实时查看两个框架之间的动态变换关系)