使用 turtlesimros2rqt [3981]

**目标:**安装并使用turtlesim包和rqt工具,为接下来的教程做准备。 [3982]

教程级别: 初学者 [3951]

时间: 15分钟 [3507]

背景 [16410]

Turtlesim是一个轻量级的用于学习ROS 2的模拟器。它以最基本的方式展示了ROS 2的功能,让您对以后在真实机器人或机器人模拟中要做什么有个基本的了解。 [3983]

ros2工具是用户管理、检视和与ROS系统交互的方式。它支持多个命令,针对系统及其操作的不同方面。用户可以使用它来启动一个节点、设置参数、监听话题等等。ros2工具是ROS 2核心安装的一部分。 [3984]

rqt 是一个用于ROS 2的图形用户界面(GUI)工具。rqt 中的所有操作都可以通过命令行完成,但是rqt 提供了一种更加用户友好的方式来操作ROS 2元素。 [3985]

本教程介绍了ROS 2的核心概念,如节点(nodes)、主题(topics)和服务(services)。所有这些概念将在后续教程中详细阐述;目前,您只需设置工具并对其有所了解。 [3986]

先决条件 [16411]

上一个教程,配置环境 [3949],将向您展示如何设置您的环境。 [3987]

任务 [16427]

1 安装 turtlesim [3988]

一如既往,在新的终端中通过引入设置文件开始,就像在 先前的教程 中描述的那样。 [3989]

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

sudo apt update

sudo apt install ros-humble-turtlesim

检查是否安装了该软件包: [3992]

ros2 pkg executables turtlesim

上述命令应返回turtlesim的可执行文件列表: [3993]

turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node

2 开始turtlesim [3994]

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

ros2 run turtlesim turtlesim_node

模拟器窗口应出现,并在中心显示一个随机的乌龟。 [3996]

../../../_images/turtlesim.png

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

[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]

在那里您可以看到默认海龟的名称和它生成的坐标。 [3998]

3 使用turtlesim [3999]

打开一个新的终端并再次启动ROS 2。 [4000]

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

ros2 run turtlesim turtle_teleop_key

此时,您应该已经打开了三个窗口:一个终端运行着``turtlesim_node``,一个终端运行着``turtle_teleop_key``,以及一个turtlesim窗口。调整这些窗口的位置,使您能够看到turtlesim窗口,但同时也要使运行``turtle_teleop_key``的终端处于活动状态,以便您可以控制turtlesim中的海龟。 [4002]

使用键盘上的箭头键来控制海龟。它将在屏幕上移动,并使用其附加的“笔”来绘制它迄今为止所经过的路径。 [4003]

注解

按下箭头键只会导致海龟移动一小段距离,然后停止。这是因为,从实际情况来看,如果操作员失去与机器人的连接,您不希望机器人继续执行指令。 [4004]

您可以使用各自命令的``list``子命令查看节点及其关联的主题、服务和操作: [4005]

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

在接下来的教程中,您将了解更多关于这些概念的内容。由于本教程的目标仅是对turtlesim进行一般概述,您将使用rqt调用一些turtlesim的服务并与``turtlesim_node``进行交互。 [4006]

4 安装rqt [4007]

打开一个新的终端以安装``rqt``及其插件: [4008]

sudo apt update

sudo apt install ~nros-humble-rqt*

要运行rqt: [4013]

rqt

5 使用rqt [4014]

第一次运行rqt时,窗口将为空白。不要担心;只需在顶部的菜单栏中选择**插件** > 服务 > 服务调用器[4015]

注解

rqt可能需要一些时间来定位所有插件。如果你点击**插件**但看不到**服务**或任何其他选项,请关闭rqt并在终端中输入命令``rqt --force-discover``。 [4016]

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

请使用位于**服务**下拉列表左侧的刷新按钮,以确保所有的turtlesim节点服务都可用。 [4017]

点击**服务**下拉列表,查看turtlesim的服务,并选择``/spawn``服务。 [4018]

5.1 尝试spawn服务 [4019]

让我们使用rqt调用``/spawn``服务。从名称可以猜到,``/spawn``将在turtlesim窗口中创建另一只海龟。 [4020]

通过在**表达式**列的空单引号之间双击,为新的海龟设置一个唯一的名称,比如``turtle2``。您可以看到这个表达式对应于**name**的值,并且是**string**类型的。 [4021]

接下来,输入一些有效的坐标来生成新的海龟,比如``x = 1.0``和``y = 1.0``。 [4022]

../../../_images/spawn.png

注解

如果您尝试生成一个与现有海龟名称相同的新海龟,比如默认的``turtle1``,您将在运行``turtlesim_node``的终端中收到错误信息: [4023]

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

要生成``turtle2``,您需要点击rqt窗口右上方的**Call**按钮调用该服务。 [4024]

如果服务调用成功,您应该会看到一个新的海龟(带有随机设计)在您输入的 xy 坐标处生成。 [4025]

如果您在rqt中刷新服务列表,您还会看到与新海龟相关的服务,例如 /turtle2/...,除了 /turtle1/...[4026]

5.2 尝试 set_pen 服务 [4027]

现在让我们使用 /set_pen 服务为 turtle1 设置一个独特的画笔: [4028]

../../../_images/set_pen.png

在**r**、**g**和**b**的取值范围为0至255之间时,设置了画笔``turtle1``的颜色,而**width**设置了线条的粗细。 [4029]

要让``turtle1``画出明显的红色线条,将**r**的值改为255,将**width**的值改为5。更新数值后别忘了调用该服务。 [4030]

如果返回到运行``turtle_teleop_key``的终端并按下箭头键,你会看到``turtle1``的画笔已经改变了。 [4031]

../../../_images/new_pen.png

你可能还注意到没有办法移动``turtle2``。这是因为``turtle2``没有对应的teleop节点。 [4032]

6 重映射 [4033]

您需要一个第二个teleop节点才能控制“turtle2”。然而,如果您尝试运行与之前相同的命令,您会注意到这个命令也控制“turtle1”。改变这种行为的方法是通过重映射“cmd_vel”话题。 [4034]

在一个新的终端中,设置ROS 2环境并运行: [4035]

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

现在,当这个终端处于活动状态时,您可以移动“turtle2”,当另一个运行“turtle_teleop_key”的终端处于活动状态时,您可以移动“turtle1”。 [4036]

../../../_images/remap.png

7 关闭 turtlesim [4037]

要停止仿真,您可以在``turtlesim_node``终端中输入``Ctrl + C``,在``turtle_teleop_key``终端中输入``q``。 [4038]

总结 [16454]

使用 turtlesim 和 rqt 是学习 ROS 2 核心概念的绝佳方式。 [4039]

下一步 [16493]

现在您已经启动并运行了 turtlesim 和 rqt,并且对它们的工作方式有了一个了解,让我们进入下一个教程中的第一个核心 ROS 2 概念:理解节点 [4164][4040]