You're reading the documentation for a development version. For the latest released version, please have a look at Galactic.
介绍 turtlesim 和 rqt
目标:安装和使用 turtlesim 包和 rqt 工具,为即将到来的教程做准备。
Tutorial level: Beginner
Time: 15 minutes
目录
背景
Turtlesim 是一个轻量级的学习 ROS 2 的模拟器。它说明了 ROS 2 在最基本的水平上的作用,让你对以后使用真实机器人或机器人模拟做什么有一个概念。
rqt 是 ROS2 的 GUI 工具。在 rqt 中完成的所有操作都可以在命令行上完成,但它提供了一种更简单、更用户友好的方式来操作 ROS 2 元素。
本教程涉及核心 ROS 2 概念,如节点、主题和服务的分离。所有这些概念将在后面的教程中详细阐述;现在,您只需设置这些工具并对它们有一些感觉。
先决条件
前面的教程,配置 ROS 2 环境,向您展示如何设置您的环境。
任务
1 安装 turtlesim
像往常一样,首先在一个新的终端中激活 setup 文件,如 上一节教程 中所述。
为您的 ROS 2 发行版安装 turtlesim 包:
sudo apt update
sudo apt install ros-xin-turtlesim
只要您从 ROS2 中安装的归档文件包含 ros_tutorials
存储库,就应该已经安装了 turtlesim
。
只要您从 ROS2 中安装的归档文件包含 ros_tutorials
存储库,就应该已经安装了 turtlesim
。
检查安装包:
ros2 pkg executables turtlesim
上面的命令应该返回 turtlesim
的可执行文件列表:
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
2 启动 turtlesim
要启动 turtlesim
,在终端输入以下命令:
ros2 run turtlesim turtlesim_node
模拟器窗口将出现,中间随机出现一只海龟。
在命令下的终端中,您将看到来自该节点的消息:
[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
这里你可以看到你的默认海龟的名字是 turtle1
,以及它生成的默认坐标。
3 使用 turtlesim
再次打开一个新的终端和 source ROS 2。
现在你要运行一个新节点来控制第一个节点中的 turtle
:
ros2 run turtlesim turtle_teleop_key
此时,您应该打开了三个窗口:一个运行 turtlesim_node
的终端、一个运行 turtle_teleop_key
的终端和 turtlesim 窗口。安排这些窗口,以便您可以看到 turtlelesim 窗口,但也让终端运行 turtle_teleop_key
活动,以便您可以在 turtlelesim
中控制 turtle。
使用键盘上的方向键来控制海龟。它将在屏幕上移动,使用它所附的“笔”来绘制到目前为止它所遵循的路径。
注解
按下箭头键只会使海龟移动一小段距离,然后停止。这是因为,实际上,如果操作员失去了与机器人的连接,你不会希望机器人继续执行指令。
您可以使用 list
命令查看节点及其相关的服务、主题和操作:
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
在接下来的教程中,您将学习更多关于这些概念的知识。由于本教程的目标只是对 turtlesim
进行总体概述,我们将使用 rqt
(ROS 2 的图形用户界面)来更近距离地了解服务。
4 安装 rqt
打开一个新的终端安装 rqt
和它的插件:
sudo apt update
sudo apt install ~nros-xin-rqt*
sudo apt update
sudo apt install ros-xin-rqt*
在 macOS 上安装 ROS 2 的标准档案包含 rqt
及其插件,所以你应该已经安装了 rqt
。
在 Windows 上安装 ROS 2 的标准档案包含 rqt
及其插件,所以你应该已经安装了 rqt
。
运行 rqt:
rqt
5 使用 rqt
第一次运行 rqt
后,窗口将为空。不用担心;只需从顶部的菜单栏中选择 Plugins > Services > Service Caller 即可。
注解
rqt 本身可能需要一些时间来定位所有的插件。如果你点击了 Plugins,但是没有看到 Services 或任何其他选项,你应该关闭 rqt
,在终端输入命令 rqt --force-discover
。
使用 Service 下拉列表左侧的刷新按钮,以确保 turtlesim
节点的所有服务都可用。
点击 Service 下拉列表查看 turtlesim
的服务,并选择 /spawn
服务。
5.1 尝试刷出服务
让我们使用 rqt
来调用 /spawn
服务。你可以从它的名字猜到 /spawn
将在 turtlesim 窗口中创建另一只海龟。
通过在 Expression 列的空单引号之间双击,为新海龟指定一个唯一的名称,如 turtle2
。您可以看到这个表达式对应于 name
值,并且是 string
类型的。
输入海龟刷出的新坐标,如 x = 1.0
和 y = 1.0
。
注解
如果你试图生成一个与现有海龟同名的新海龟,比如默认的 turtle1
,你会在运行 turtlesim_node
的终端中得到一个错误消息:
[ERROR] [turtlesim]: A turtle named [turtle1] already exists
要生成 turtle2
,您必须通过单击 rqt
窗口右上角的 call
按钮来调用服务。
你会在你输入的 x
和 y
坐标处看到一只新的海龟(同样是随机设计的)。
如果您刷新 rqt
中的服务列表,您还将看到现在除了 /turtle1/…
之外,还有与新的 turtle
相关的服务,/turtle2/…
。
5.2 尝试使用 set_pen
服务
现在让我们使用 /set_pen
服务给 turtle1
一个唯一的笔:
r、g 和 b 的值在 0 到 255 之间,将设置 turtle1
画笔绘制的颜色,width
设置线条的粗细。
要让 turtle1
用清晰的红线绘制,请将 r
的值更改为 255
,将 width
的值更改为 5
。不要忘记在更新值之后 call 服务。
如果您返回 turtle_teleop_node
运行的终端并按下方向键,您将看到 turtle1
的钢笔已经更改。
你可能已经注意到海龟是无法移动的。可以通过将 turtle1
的 cmd_vel
主题重新映射到 turtle2
来实现这一点。
6 重新映射
在一个新的终端中,source ROS 2,并运行:
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
现在,您可以在这个终端激活时移动 turtle2
,在运行 turtle_teleop_key
的另一个终端激活时移动 turtle1
。
7 关闭 turtlesim
在 turtlesim_node
终端输入 Ctrl + C
,在 teleop
终端输入 q
,可以停止模拟。
下一步
现在你已经启动并运行了 turtlesim 和 rqt,并了解了它们的工作原理,让我们通过下一个教程深入了解 ROS 2 的第一个核心概念,理解 ROS2 节点。