使用 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 Install turtlesim
As always, start by sourcing your setup files in a new terminal, as described in the previous tutorial.
Install the turtlesim package for your ROS 2 distro:
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*'
在 macOS 上安装 ROS 2 的标准档案包含“rqt”及其插件,因此您应该已经安装了“rqt”。
在 Windows 上安装 ROS 2 的标准档案包含“rqt”及其插件,因此您应该已经安装了“rqt”。
要运行 rqt:
rqt
5 用 rqt
首次运行 rqt 时,窗口将为空白。 不用担心;只需从顶部的菜单栏中选择 插件 > 服务 > 服务调用者。
rqt 可能需要一些时间来找到所有插件。 如果您单击**插件**但没有看到**服务**或任何其他选项,您应该关闭 rqt 并在终端中输入命令“rqt –force-discover”。
使用**服务**下拉列表左侧的刷新按钮,确保您的 turtlesim 节点的所有服务都可用。
单击**服务**下拉列表查看 turtlesim 的服务,然后选择“/spawn”服务。
5.1 尝试生成服务
让我们使用 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 概念,了解节点。
相关内容
可以在 ros_tutorials repo 中找到 turtlesim 包。
This community contributed video 演示了本教程中涵盖的许多项目。