使用 turtlesim
、 ros2
和 rqt
[3981]
**目标:**安装并使用turtlesim包和rqt工具,为接下来的教程做准备。 [3982]
教程级别: 初学者 [3951]
时间: 15分钟 [3507]
内容 [16422]
背景 [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
只要您安装ROS 2的存档包含``ros_tutorials``存储库,您应该已经安装了turtlesim。 [3991]
只要您安装ROS 2的存档包含``ros_tutorials``存储库,您应该已经安装了turtlesim。 [3991]
检查是否安装了该软件包: [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](../../../_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*
sudo apt update
sudo apt install ros-humble-rqt*
在 macOS 上安装 ROS 2 的标准存档包含 rqt
及其插件,所以您应该已经安装了 rqt
。 [4011]
在 Windows 上安装 ROS 2 的标准存档包含 rqt
及其插件,所以您应该已经安装了 rqt
。 [4012]
要运行rqt: [4013]
rqt
5 使用rqt [4014]
第一次运行rqt时,窗口将为空白。不要担心;只需在顶部的菜单栏中选择**插件** > 服务 > 服务调用器。 [4015]
注解
rqt可能需要一些时间来定位所有插件。如果你点击**插件**但看不到**服务**或任何其他选项,请关闭rqt并在终端中输入命令``rqt --force-discover``。 [4016]
![../../../_images/rqt.png](../../../_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](../../../_images/spawn.png)
注解
如果您尝试生成一个与现有海龟名称相同的新海龟,比如默认的``turtle1``,您将在运行``turtlesim_node``的终端中收到错误信息: [4023]
[ERROR] [turtlesim]: A turtle named [turtle1] already exists
要生成``turtle2``,您需要点击rqt窗口右上方的**Call**按钮调用该服务。 [4024]
如果服务调用成功,您应该会看到一个新的海龟(带有随机设计)在您输入的 x 和 y 坐标处生成。 [4025]
如果您在rqt中刷新服务列表,您还会看到与新海龟相关的服务,例如 /turtle2/...
,除了 /turtle1/...
。 [4026]
5.2 尝试 set_pen 服务 [4027]
现在让我们使用 /set_pen
服务为 turtle1
设置一个独特的画笔: [4028]
![../../../_images/set_pen.png](../../../_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](../../../_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](../../../_images/remap.png)
下一步 [16493]
现在您已经启动并运行了 turtlesim 和 rqt,并且对它们的工作方式有了一个了解,让我们进入下一个教程中的第一个核心 ROS 2 概念:理解节点 [4164]。 [4040]