目标:安装并使用 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 窗口右上角的“调用”按钮来调用该服务。
您将看到在您为x和y输入的坐标处生成一只新海龟(同样采用随机设计)。
如果你刷新rqt中的服务列表,你还会看到,现在除了有新海龟相关的服务,/turtle2/…
还有/turtle1/…
5.2 试用set_pen服务
现在让我们使用/set_pen
服务给 turtle1 一个独特的笔:
r、g和b的值在 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 概念。