使用“turtlesim”、“ros2”和“rqt”

目标:安装并使用 turtlesim 包和 rqt 工具为即将到来的教程做准备。

教程级别:初学者

时间:15 分钟

背景

Turtlesim 是一个用于学习 ROS 2 的轻量级模拟器。

它说明了 ROS 2 在最基本的层面上的作用,让您了解以后将如何使用真实机器人或机器人模拟。

ros2 工具是用户管理、自省和与 ROS 系统交互的方式。

它支持针对系统及其操作的不同方面的多个命令。

人们可以使用它来启动节点、设置参数、监听主题等等。

ros2 工具是核心 ROS 2 安装的一部分。

rqt 是 ROS 2 的图形用户界面 (GUI) 工具。

在 rqt 中完成的所有操作都可以在命令行上完成,但 rqt 提供了一种更用户友好的方式来操作 ROS 2 元素。

本教程涉及核心 ROS 2 概念,如节点、主题和服务。 所有这些概念将在后面的教程中详细阐述;现在,您只需设置工具并体验一下它们。

先决条件

上一个教程 配置环境 将向您展示如何设置环境。

任务

1 安装 turtlesim

与往常一样,首先在新终端中获取您的安装文件,如 上一个教程 中所述。

为您的 ROS 2 发行版安装 turtlesim 包:

sudo apt update

sudo apt install ros-rolling-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]

您可以在那里看到默认海龟的名称和它生成的坐标。

3 使用 turtlesim

打开一个新终端并再次获取 ROS 2。

现在您将运行一个新节点来控制第一个节点中的乌龟:

ros2 run turtlesim turtle_teleop_key

此时,您应该打开三个窗口:一个运行 turtlesim_node 的终端、一个运行 turtle_teleop_key 的终端和一个 turtlesim 窗口。

排列这些窗口,以便您可以看到 turtlesim 窗口,但也要激活运行“turtle_teleop_key”的终端,以便您可以控制 turtlesim 中的乌龟。

使用键盘上的箭头键来控制乌龟。 它将在屏幕上移动,使用其附带的“笔”绘制它到目前为止所走的路径。

按下箭头键只会使乌龟移动一小段距离然后停止。 这是因为,实际上,如果操作员与机器人失去连接,您不会希望机器人继续执行指令。

您可以使用相应命令的“list”子命令查看节点及其相关主题、服务和操作:

ros2 node list
ros2 topic list
ros2 service list
ros2 action list

您将在接下来的教程中了解有关这些概念的更多信息。 由于本教程的目标只是对 turtlesim 有一个总体了解,因此您将使用 rqt 调用一些 turtlesim 服务并与 turtlesim_node 进行交互。

4 安装 rqt

打开一个新终端以安装“rqt”及其插件:

sudo apt update

sudo apt install '~nros-rolling-rqt*'

要运行 rqt:

rqt

5 使用 rqt

首次运行 rqt 时,窗口将为空白。 不用担心;只需从顶部的菜单栏中选择 插件 > 服务 > 服务调用者

Note

rqt 可能需要一些时间来找到所有插件。 如果您单击**插件**但没有看到**服务**或任何其他选项,您应该关闭 rqt 并在终端中输入命令 rqt --force-discover

../../../_images/rqt.png

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

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

5.1 尝试 spawn 服务

让我们使用 rqt 调用 ``/spawn``服务。

您可以从其名称中猜出 ``/spawn``将在 turtlesim 窗口中创建另一个海龟。

通过在**Expression**列中的空单引号之间双击,为新海龟指定一个唯一名称,如 turtle2

您可以看到此表达式对应于 name**的值,并且类型为 **string

接下来输入一些生成新海龟的有效坐标,如 x = 1.0``和 ``y = 1.0

../../../_images/spawn.png

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

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

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

如果服务调用成功,您应该会看到在您输入的 xy 坐标处生成一个新的海龟(再次采用随机设计)。

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

5.2 尝试 set_pen 服务

现在让我们使用 ``/set_pen``服务为 ``turtle1``提供一支独特的笔:

../../../_images/set_pen.png

rgb 的值介于 0 和 255 之间,用于设置 turtle1 绘制的笔的颜色, width 用于设置线条的粗细。

要让“turtle1”绘制一条清晰的红线,请将 **r**的值更改为 255,将 **width**的值更改为 5。

更新值后,不要忘记调用服务。

如果您返回到运行 turtle_teleop_key 的终端并按下箭头键,您将看到 ``turtle1``的笔已更改。

../../../_images/new_pen.png

您可能还注意到无法移动“turtle2”。 这是因为“turtle2”没有 teleop 节点。

6 重新映射

您需要第二个 teleop 节点来控制 turtle2。 但是,如果您尝试运行与之前相同的命令,您会注意到该命令还控制 turtle1。 更改此行为的方法是重新映射 cmd_vel 主题。

在新的终端中,获取 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,在 turtle_teleop_key``终端中输入 ``q

摘要

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

下一步

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

相关内容

turtlesim 包可在 ros_tutorials repo 中找到。

此社区贡献的视频 演示了本教程中涵盖的许多项目。