介绍turtlesim和rqt

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

教程级别: 初学者 [Alyssa@7088]

时间: 15分钟 [Alyssa@6755]

背景

Turtlesim是学习ROS 2的轻量级模拟器。它说明了ROS 2在最基本的层面上做了什么,让你知道你以后将如何处理一个真正的机器人或机器人仿真。 [待校准@8870]

rqt是ROS 2的GUI工具。在rqt中完成的所有操作都可以在命令行上完成,但是它提供了一种更简单、更用户友好的方式来操作ROS 2基本模块。 [Alyssa@8871]

本教程涉及核心ROS 2概念,如节点、话题和服务的分离。所有这些概念将在后面的教程中详细阐述; 现在,你将简单地设置工具并感受它们。 [待校准@8872]

先决条件

上一教程 配置ROS 2环境 将向您展示如何设置您的环境。 [待校准@8873]

任务

1 安装turtlesim [Alyssa@8874]

如往常一样,从在新终端source安装文件开始,如 之前的教程 所述。 [Alyssa@8875]

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

sudo apt update

sudo apt install ros-foxy-turtlesim

检查软件包是否已安装: [待校准@8878]

ros2 pkg executables turtlesim

上述命令应返回turtlesim的可执行文件列表: [待校准@8879]

turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node

2 启动turtlesim [Alyssa@8880]

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

ros2 run turtlesim turtlesim_node

应该出现一个模拟器窗口,中间有一只随机的乌龟。 [Alyssa@8882]

../../_images/turtlesim.png

在终端中的命令下面,您将看到来自节点的消息: [Alyssa@8883]

[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim

[INFO] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]

在这里你可以看到你的默认海龟的名字是 turtle1 ,以及它产生处的默认坐标。 [Alyssa@8884]

3 使用turtlesim [Alyssa@8885]

打开一个新终端并且再次source ROS 2。 [Alyssa@8886]

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

ros2 run turtlesim turtle_teleop_key

此时,你应该打开三个窗口: 一个运行 turtlesim_node 的终端,一个运行 turtle_teleop_key 的终端和一个turtlesim的窗口。排列好这些窗口,这样你就可以看到海龟的窗口,也可以激活运行 turtle_teleop_key 的终端,这样你就可以控制海龟。 [Alyssa@8888]

使用键盘上的箭头键来控制海龟。它将在屏幕上移动,并 使用其附带的 "pen" 绘制到目前为止的路径。 [Alyssa@8889]

注解

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

您可以使用 list 命令查看节点及其关联的服务、话题和动作:

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

您将在接下来的教程中了解更多关于这些概念的信息。由于本教程的目标只是给出turtlesim的一般性概述,我们将使用rqt (ROS 2的图形用户界面) 来仔细研究一下服务。 [Alyssa@8892]

4 安装rqt [Alyssa@8893]

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

sudo apt update

sudo apt install ~nros-foxy-rqt*

运行rqt:

rqt

5 使用rqt [Alyssa@8900]

第一次运行rqt后,窗口将为空白。不用担心; 只需从顶部的菜单栏中选择 插件> 服务>调用服务(Plugins > Services > Service Caller )。 [Alyssa@8901]

注解

rqt可能需要一些时间来查找它所有插件。如果你点击插件(Plugins),但没有看到服务(Services)或任何其他选项,你应该关闭rqt,在你的终端输入命令 rqt --force-discover[Alyssa@8902]

../../_images/rqt.png

使用服务(Service)下拉列表左侧的刷新按钮,确保turtlesim节点的所有服务都可用。 [Alyssa@8903]

单击服务(Service)下拉列表以查看turtlesim的服务,然后选择 /spawn 服务。 [Alyssa@8904]

5.1 尝试生成(spawn)服务 [Alyssa@8905]

让我们使用rqt调用 /spawn 服务。你可以从它的名字中猜到 /spawn 会在turtlesim窗口中创造出另一只乌龟。 [待校准@8906]

通过双击Expression列的空白单引号处给新乌龟取一个唯一的名称,比如 turtle2 。您可以看到此表达式对应于名称(name)值,并且类型为string。 [Alyssa@8907]

输入生成的海龟的新坐标值,如 x = 1.0y = 1.0[Alyssa@8908]

../../_images/spawn1.png

注解

如果您尝试生成与现有海龟同名的新海龟,如默认 turtle1 ,您将在运行 turtlesim_node 的终端中收到一条错误消息: [Alyssa@8909]

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

要生成turtle2,您必须通过单击rqt窗口右上角的呼叫( Call )按钮来调用服务。 [Alyssa@8910]

你会看到一只新的乌龟 (同样是随机设计的) 在你输入的x和y坐标处生成。 [Alyssa@8911]

如果您在rqt中刷新服务列表,您还将看到除了 “/turtle1/…” 之外,现在还有与新乌龟 “/turtle2/…” 相关的服务。 [Alyssa@8912]

5.2 尝试set_pen服务 [Alyssa@8913]

现在,让我们使用 /set_pen 服务为turtle1提供一支独特的笔: [Alyssa@8914]

../../_images/set_pen.png

rgb 的值在0到255之间,将设置turtle1绘制的笔的颜色,宽度( width )设置线的厚度。 [Alyssa@8915]

要让turtle1绘制一条不同的红线,请将r的值更改为255,将宽度的值更改为5。更新值后,不要忘记调用服务。 [待校准@8916]

如果你回到 turtle_teleop_node 正在运行的终端,按下箭头键,你会看到turtle1的笔变了。 [Alyssa@8917]

../../_images/new_pen.png

你可能已经注意到没有办法移动turtle2。你可以通过将turtle1的 cmd_vel 话题重新映射到turtle2上来实现这一点。 [Alyssa@8918]

6 重新映射 [Alyssa@7717]

在新终端中,source ROS 2,然后运行: [Alyssa@8919]

ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel

现在,您可以在该终端处于活动状态时移动turtle2,在运行 turtle_teleop_key 的另一个终端处于活动状态时移动turtle1。 [待校准@8920]

../../_images/remap.png

7 关闭turtlesim [Alyssa@8921]

要停止模拟器,您可以在 turtlesim_node 终端输入 “ctrl + c”,在teleop终端输入 q[Alyssa@8922]

总结

使用turtlesim和rqt是学习ROS 2核心概念非常好的方法。 [Alyssa@8923]

下一步

既然你已经启动并运行了turtlesim和rqt,并且了解了它们是如何工作的,让我们在下一个教程 了解ROS 2节点 中深入探讨第一个核心ROS 2概念。 [待校准@8924]