Turtlesim 入门
目标: 安装并使用 turtlesim 包和 rqt 工具,为后续教程做准备。
教程级别: 初级
预计用时: 15 分钟
turtlesim 是一个用于学习 ROS 2 的轻量级模拟器。 它以最基础的方式展示了 ROS 2 的核心功能,帮助你了解将来如何与真实机器人或机器人仿真进行交互。
ros2 工具是用户管理、内省(introspect)ROS 系统并与之交互的途径。 它支持多种命令,涵盖系统的不同方面及其操作。 你可以用它来启动一个节点、设置一个参数、监听一个话题等。 ros2 工具是 ROS 2 核心安装的一部分。
rqt 是一个用于 ROS 2 的图形用户界面(GUI)工具。 在 rqt 中完成的所有操作都可以在命令行中完成,但 rqt 提供了一种更友好的方式来操作 ROS 2 的各种元素。
本教程涉及 ROS 2 的核心概念,如节点(node)、话题(topic)和服务(service)。 所有这些概念将在后续教程中详细阐述;目前,你只需设置好工具并对它们有初步了解即可。
上一节教程 配置环境 将向你展示如何设置你的环境。
1 安装 turtlesim
Section titled “1 安装 turtlesim”一如既往,首先在一个新终端中 source 你的 setup 文件,方法如 上一节教程 所述。
为你的 ROS 2 发行版安装 turtlesim 包:
Ubuntu
Section titled “Ubuntu”sudo apt updatesudo apt install ros-{DISTRO}-turtlesimsudo dnf install ros-{DISTRO}-turtlesim只要你安装 ROS 2 时所用的归档文件包含 ros_tutorials 仓库,你就应该已经安装了 turtlesim。
Windows
Section titled “Windows”只要你安装 ROS 2 时所用的归档文件包含 ros_tutorials 仓库,你就应该已经安装了 turtlesim。
要检查该包是否已安装,请运行以下命令,该命令应返回 turtlesim 的可执行文件列表:
$ ros2 pkg executables turtlesimturtlesim draw_squareturtlesim mimicturtlesim turtle_teleop_keyturtlesim turtlesim_node2 启动 turtlesim
Section titled “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
Section titled “3 使用 turtlesim”打开一个新终端并再次 source ROS 2。
现在你将运行一个新节点来控制第一个节点中的乌龟:
ros2 run turtlesim turtle_teleop_key此时你应该有三个窗口打开:一个运行 turtlesim_node 的终端、一个运行 turtle_teleop_key 的终端,以及 turtlesim 窗口。
调整这些窗口的位置,使你既能看到 turtlesim 窗口,又能让运行 turtle_teleop_key 的终端保持活动状态,以便在 turtlesim 中控制乌龟。
使用键盘上的方向键来控制乌龟。 它会在屏幕上移动,并用自带的”画笔”绘制所经过的路径。
注意: 按下方向键只会让乌龟移动一小段距离然后停止。 这是因为,在现实中,例如操作员与机器人失去连接时,你不希望机器人继续执行指令。
你可以使用各命令的 list 子命令来查看节点及其关联的话题、服务和动作(action):
ros2 node listros2 topic listros2 service listros2 action list你将在接下来的教程中了解更多关于这些概念的知识。
由于本教程的目标只是对 turtlesim 做一个总体概述,接下来你将使用 rqt 来调用 turtlesim 的一些服务,并与 turtlesim_node 进行交互。
4 安装 rqt
Section titled “4 安装 rqt”打开一个新终端来安装 rqt 及其插件:
Ubuntu
Section titled “Ubuntu”sudo apt updatesudo apt install ros-{DISTRO}-rqt ros-{DISTRO}-rqt-common-pluginssudo dnf install 'ros-{DISTRO}-rqt*'在 macOS 上安装 ROS 2 的标准归档文件已包含 rqt 及其插件,因此你应该已经安装了 rqt。
Windows
Section titled “Windows”在 Windows 上安装 ROS 2 的标准归档文件已包含 rqt 及其插件,因此你应该已经安装了 rqt。
要运行 rqt:
rqt5 使用 rqt
Section titled “5 使用 rqt”首次运行 rqt 时,窗口将是空白的。 不用担心,只需从顶部的菜单栏中选择 Plugins > Services > Service Caller。
注意: rqt 可能需要一些时间来定位所有插件。 如果你点击了 Plugins 但没有看到 Services 或任何其他选项,你应该关闭 rqt 并在终端中输入命令
rqt --force-discover。

使用 Service 下拉列表左侧的刷新按钮,确保 turtlesim 节点的所有服务都可用。
点击 Service 下拉列表以查看 turtlesim 的服务,并选择 /spawn 服务。
5.1 尝试 spawn 服务
Section titled “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然后,点击 rqt 窗口右上角的 Call 按钮来调用服务,从而生成 turtle2。
如果服务调用成功,你应该会看到一只新乌龟(同样是随机外观)出现在你输入的 x 和 y 坐标处。
如果你刷新 rqt 中的服务列表,还会发现除了 /turtle1/... 之外,现在多了与新乌龟相关的 /turtle2/... 服务。
5.2 尝试 set_pen 服务
Section titled “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 重映射(Remapping)
Section titled “6 重映射(Remapping)”你需要第二个遥控节点来控制 turtle2。
但是,如果直接运行与之前相同的命令,你会发现控制的仍然是 turtle1。
解决方法是重映射(remap)cmd_vel 话题和 rotate_absolute 动作。
在一个新终端中,source ROS 2,然后运行:
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel --remap turtle1/rotate_absolute:=turtle2/rotate_absolute现在,当此终端处于活动状态时,你可以控制 turtle2;当另一个运行 turtle_teleop_key 的终端处于活动状态时,你可以控制 turtle1。

7 关闭 turtlesim
Section titled “7 关闭 turtlesim”要停止模拟,你可以在 turtlesim_node 终端中输入 Ctrl + C,并在 turtle_teleop_key 终端中输入 q。
使用 turtlesim 和 rqt 是学习 ROS 2 核心概念的好方法。
现在你已经启动并运行了 turtlesim 和 rqt,并且了解了它们的工作方式,接下来让我们通过下一节教程——理解 ROS 2 节点——深入学习第一个 ROS 2 核心概念。
turtlesim 包可以在 ros_tutorials 仓库中找到。