使用“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
只要您安装 ROS 2 的档案包含“ros_tutorials”存储库,您就应该已经安装了 turtlesim。
只要您安装 ROS 2 的档案包含“ros_tutorials”存储库,您就应该已经安装了 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]
您可以在那里看到默认海龟的名称和它生成的坐标。
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*'
sudo dnf install 'ros-rolling-rqt*'
在 macOS 上安装 ROS 2 的标准档案包含“rqt”及其插件,因此您应该已经安装了 rqt
。
在 macOS 上安装 ROS 2 的标准档案包含“rqt”及其插件,因此您应该已经安装了 rqt
。
要运行 rqt:
rqt
5 使用 rqt
首次运行 rqt 时,窗口将为空白。 不用担心;只需从顶部的菜单栏中选择 插件 > 服务 > 服务调用者。
Note
rqt 可能需要一些时间来找到所有插件。
如果您单击**插件**但没有看到**服务**或任何其他选项,您应该关闭 rqt 并在终端中输入命令 rqt --force-discover
。
使用 **Service**下拉列表左侧的刷新按钮,确保您的 turtlesim 节点的所有服务都可用。
单击 **Service**下拉列表查看 turtlesim 的服务,并选择 ``/spawn``服务。
5.1 尝试 spawn 服务
让我们使用 rqt 调用 ``/spawn``服务。
您可以从其名称中猜出 ``/spawn``将在 turtlesim 窗口中创建另一个海龟。
通过在**Expression**列中的空单引号之间双击,为新海龟指定一个唯一名称,如 turtle2
。
您可以看到此表达式对应于 name**的值,并且类型为 **string。
接下来输入一些生成新海龟的有效坐标,如 x = 1.0``和 ``y = 1.0
。
如果你尝试生成一个与现有海龟同名的新海龟,比如默认的 turtle1
,你将在运行 ``turtlesim_node``的终端中收到一条错误消息:
[ERROR] [turtlesim]: A turtle named [turtle1] already exists
要生成 turtle2
,您需要通过单击 rqt 窗口右上角的 Call 按钮来调用服务。
如果服务调用成功,您应该会看到在您输入的 x 和 y 坐标处生成一个新的海龟(再次采用随机设计)。
如果您刷新 rqt 中的服务列表,您还会看到,除了 ``/turtle1/…``之外,现在还有与新海龟 ``/turtle2/…``相关的服务。
5.2 尝试 set_pen 服务
现在让我们使用 ``/set_pen``服务为 ``turtle1``提供一支独特的笔:
r、 g 和 b 的值介于 0 和 255 之间,用于设置 turtle1
绘制的笔的颜色, width
用于设置线条的粗细。
要让“turtle1”绘制一条清晰的红线,请将 **r**的值更改为 255,将 **width**的值更改为 5。
更新值后,不要忘记调用服务。
如果您返回到运行 turtle_teleop_key
的终端并按下箭头键,您将看到 ``turtle1``的笔已更改。
您可能还注意到无法移动“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
。
7 关闭 turtlesim
要停止模拟,您可以在 turtlesim_node
终端中输入 Ctrl + C
,在 turtle_teleop_key``终端中输入 ``q
。
摘要
使用 turtlesim 和 rqt 是学习 ROS 2 核心概念的好方法。
下一步
现在您已经启动并运行了 turtlesim 和 rqt,并且了解了它们的工作原理,让我们通过下一个教程深入了解第一个核心 ROS 2 概念,了解节点。
相关内容
turtlesim 包可在 ros_tutorials repo 中找到。
此社区贡献的视频 演示了本教程中涵盖的许多项目。