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 pkg executables turtlesim

上面的命令应该返回 turtlesim 的可执行文件列表:

turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node

2 启动 turtlesim

要启动 turtlesim,在终端输入以下命令:

ros2 run turtlesim turtlesim_node

模拟器窗口将出现,中间随机出现一只海龟。

../../_images/turtlesim.png

在命令下的终端中,您将看到来自该节点的消息:

[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*

运行 rqt:

rqt

5 使用 rqt

第一次运行 rqt 后,窗口将为空。不用担心;只需从顶部的菜单栏中选择 Plugins > Services > Service Caller 即可。

注解

rqt 本身可能需要一些时间来定位所有的插件。如果你点击了 Plugins,但是没有看到 Services 或任何其他选项,你应该关闭 rqt,在终端输入命令 rqt --force-discover

../../_images/rqt.png

使用 Service 下拉列表左侧的刷新按钮,以确保 turtlesim 节点的所有服务都可用。

点击 Service 下拉列表查看 turtlesim 的服务,并选择 /spawn 服务。

5.1 尝试刷出服务

让我们使用 rqt 来调用 /spawn 服务。你可以从它的名字猜到 /spawn 将在 turtlesim 窗口中创建另一只海龟。

通过在 Expression 列的空单引号之间双击,为新海龟指定一个唯一的名称,如 turtle2。您可以看到这个表达式对应于 name 值,并且是 string 类型的。

输入海龟刷出的新坐标,如 x = 1.0y = 1.0

../../_images/spawn1.png

注解

如果你试图生成一个与现有海龟同名的新海龟,比如默认的 turtle1,你会在运行 turtlesim_node 的终端中得到一个错误消息:

[ERROR] [turtlesim]: A turtle named [turtle1] already exists

要生成 turtle2,您必须通过单击 rqt 窗口右上角的 call 按钮来调用服务。

你会在你输入的 xy 坐标处看到一只新的海龟(同样是随机设计的)。

如果您刷新 rqt 中的服务列表,您还将看到现在除了 /turtle1/… 之外,还有与新的 turtle 相关的服务,/turtle2/…

5.2 尝试使用 set_pen 服务

现在让我们使用 /set_pen 服务给 turtle1 一个唯一的笔:

../../_images/set_pen.png

rgb 的值在 0 到 255 之间,将设置 turtle1 画笔绘制的颜色,width 设置线条的粗细。

要让 turtle1 用清晰的红线绘制,请将 r 的值更改为 255,将 width 的值更改为 5。不要忘记在更新值之后 call 服务。

如果您返回 turtle_teleop_node 运行的终端并按下方向键,您将看到 turtle1 的钢笔已经更改。

../../_images/new_pen.png

你可能已经注意到海龟是无法移动的。可以通过将 turtle1cmd_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

../../_images/remap.png

7 关闭 turtlesim

turtlesim_node 终端输入 Ctrl + C,在 teleop 终端输入 q,可以停止模拟。

小结

使用 turtlesim 和 rqt 是学习 ROS 2 核心概念的一个好方法。

下一步

现在你已经启动并运行了 turtlesim 和 rqt,并了解了它们的工作原理,让我们通过下一个教程深入了解 ROS 2 的第一个核心概念,理解 ROS2 节点