使用 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 Install turtlesim

As always, start by sourcing your setup files in a new terminal, as described in the previous tutorial.

Install the turtlesim package for your ROS 2 distro:

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 时,窗口将为空白。 不用担心;只需从顶部的菜单栏中选择 插件 > 服务 > 服务调用者

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

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

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

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

5.1 尝试生成服务

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

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

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

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

接下来输入一些生成新海龟的有效坐标,如 x = 1.0y = 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 概念,了解节点

相关内容

可以在 ros_tutorials repo 中找到 turtlesim 包。

This community contributed video 演示了本教程中涵盖的许多项目。