> 文章列表 > 【ROS2指南-2】入门 turtlesim 和 rqt

【ROS2指南-2】入门 turtlesim 和 rqt

【ROS2指南-2】入门 turtlesim 和 rqt

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

教程级别:初学者

时间: 15分钟

内容

  • 背景

  • 先决条件

  • 任务

    • 1 安装turtlesim

    • 2 启动turtlesim

    • 3 使用turtlesim

    • 4 安装rqt

    • 5 使用 rqt

    • 6 重新映射

    • 7 关闭turtlesim

  • 概括

  • 下一步

  • 相关内容

背景

Turtlesim 是一个用于学习 ROS 2 的轻量级模拟器。它说明了 ROS 2 在最基本的层面上做了什么,让你了解你以后将用真实的机器人或机器人模拟做什么。

rqt 是 ROS 2 的 GUI 工具。在 rqt 中所做的一切都可以在命令行上完成,但它提供了一种更简单、更用户友好的方式来操作 ROS 2 元素。

本教程涉及核心 ROS 2 概念,例如节点、主题和服务的分离。所有这些概念将在后面的教程中详细说明;现在,您只需设置工具并感受一下。

先决条件

之前的教程,配置您的 ROS 2 环境,将向您展示如何设置您的环境。

任务

1 安装turtlesim

与往常一样,首先在新终端中获取设置文件,如上一教程中所述。

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

sudo apt updatesudo apt install ros-dashing-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

打开一个新终端,现在您将运行一个新节点来控制第一个节点中的海龟:

ros2 run turtlesim turtle_teleop_key

此时您应该打开三个窗口:一个正在运行的终端turtlesim_node、一个正在运行的终端turtle_teleop_key和 turtlesim 窗口。排列这些窗口,以便您可以看到 turtlesim 窗口,但也可以激活终端运行,turtle_teleop_key以便您可以在 turtlesim 中控制海龟。

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

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

您可以使用以下命令查看节点及其关联的服务、主题和操作list

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

您将在接下来的教程中了解有关这些概念的更多信息。由于本教程的目标只是获得 turtlesim 的一般概述,我们将使用 rqt(ROS 2 的图形用户界面)更仔细地查看服务。

4 安装rqt

打开一个新的终端来安装rqt及其插件:

sudo apt updatesudo apt install ros-dashing-rqt*

运行 rqt:

rqt

5 使用 rqt

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

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

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

单击“服务”下拉列表以查看 turtlesim 的服务,然后选择 /spawn 服务。

5.1 尝试spawn服务

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

给新海龟起一个唯一的名字,比如双击Expression列中的空单引号。可以看到这个表达式对应的是name值,类型是string

输入海龟产卵的新坐标,例如:x = 1.0 y = 1.0

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

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

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

您将看到在您为xy输入的坐标处生成一只新海龟(同样采用随机设计)。

如果你刷新rqt中的服务列表,你还会看到,现在除了有新海龟相关的服务,/turtle2/…

还有/turtle1/…

5.2 试用set_pen服务

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

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

要让 turtle1 绘制一条明显的红线,请将r的值更改为 255,并将width的值更改为 5。不要忘记在更新值后调用服务。

如果你回到正在运行的终端turtle_teleop_node并按下箭头键,你会看到 turtle1 的笔已经改变了。

您可能已经注意到无法移动 turtle2。您可以通过将 turtle1 的cmd_vel主题重新映射到 turtle2 来完成此操作。

6 重新映射

在新终端中运行:

ros2 run turtlesim turtle_teleop_key turtle1/cmd_vel:=turtle2/cmd_vel

现在您可以在该终端处于活动状态时移动 turtle2,在运行 的另一个终端turtle_teleop_key处于活动状态时移动 turtle1。

7 关闭turtlesim

要停止模拟,您可以在终端和teleop 终端中输入:

Ctrl + C

概括

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

下一步

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