Turtlesim 与 rqt 简介

背景

Turtlesim 是用于学习 ROS 2 的轻量级模拟器。它阐述了 ROS 2 能做的最基本的工作,以使您对以后使用真实机器人或机器人仿真将要做什么有所了解。

rqt 是 ROS 2 的 GUI 工具。rqt 中完成的所有操作都可以在命令行上完成,但是它提供了一种更简单,更用户友好的方式来操作 ROS 2 元素。

本教程涉及 ROS 2 的核心概念,例如节点,topic 和 service 的区别。所有的概念都将在以后的教程中进行详细介绍。现在,您只需简单设置这些工具并对其进行体验。

前提条件

上一教程 ROS 2 环境配置,向您展示了如何配置开发环境。

Turtlesim 和 rqt 仅在 ROS 2 Dashing 之后可用。

任务

1 安装 turtlesim

与往常一样,首先按照上一教程中的步骤在新终端中 source ROS 2 的配置文件。

为您的 ROS 2 发行版安装 turtlesim 软件包:

sudo apt update
sudo apt install ros-<distro>-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] [1590135720.584280041] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [1590135720.588933661] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]

在这里,您可以看到默认乌龟的名称是 turtle1,以及它生成时的默认坐标。

3 使用 turtlesim

打开一个新终端,然后再次 source ROS 2 的配置文件。

现在,您将运行一个新节点来控制第一个节点中的乌龟:

ros2 run turtlesim turtle_teleop_key

此时,您应该打开了三个窗口:一个正在运行 turtlesim_node 的终端,一个正在运行 turtle_teleop_key 的终端,还有一个是 turtlesim 窗口。排列这些窗口,使您能够看到 turtlesim 窗口的同时,还可以激活运行 turtle_teleop_key 的终端,这样以便您可以控制 turtlesim 窗口中的乌龟。

使用键盘上的箭头键控制乌龟。它将使用其附带的笔在屏幕上四处移动,以绘制迄今为止行走的路径。

注意

按下箭头键只会使乌龟移动一小段距离然后停下来。这是因为,如果操作者失去了与机器人的连接,则您将不希望机器人继续执行指令。

您可以使用下述 list 命令来查看节点及其关联的 service,topic 和 action:

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

您将在接下来的教程中了解更多有关这些概念的信息。由于本教程的目的只是为了大致了解 turtlesim,因此我们将使用 rqt( ROS 2 的一个图形用户界面)来更仔细地研究 service。

4 安装 rqt

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

sudo apt update
sudo apt install ros-<distro>-rqt-*

运行 rqt:

rqt

5 使用 rqt

第一次运行rqt后,该窗口将是空白的。别担心,只需从顶部菜单栏中选择 Plugins > Services > Service Caller 即可。

注意

rqt 可能需要一些时间才能找到所有插件。如果点击 Plugins,但没有看到 Services 或任何其它选项,则应关闭 rqt,在终端中输入 rqt --force-discover 命令。

使用 Service 下拉列表左侧的刷新按钮,确保 turtlesim 节点的所有 service 均可用。

单击 Service 下拉列表以查看 turtlesim 节点的 service,然后选择 /spawn service。

5.1 尝试 spawn service

让我们使用 rqt 调用 /spawn service。您可以从其名称中猜到,/spawn 将在 turtlesim 窗口中创建另一只乌龟。

Expression 列中的空单引号之间双击给新乌龟一个唯一的名称,例如 turtle2。您可以看到该 Expression 对应于 name 值,并且类型为 string

输入要生成乌龟的新坐标,例如 x = 1.0y = 1.0

注意

如果您尝试生成一个与现有乌龟同名的新乌龟(如您的默认乌龟名称 turtle1 ),则会在运行 turtlesim_node 的终端中收到错误消息:

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

要生成 turtle2,必须通过单击 rqt 窗口右上角的 Call 按钮来调用该服务。

您将在输入的 xy 坐标处看到一只新的乌龟。

如果您刷新 rqt 中的 service 列表,除了现有 service /turtle1/…,您还将看到与新生成乌龟相关的 service /turtle2/…

5.2 尝试 set_pen service

现在,让我们使用 /set_pen service 为 turtle1 提供一支独特的笔:

rgb 的值介于0到255之间,将用来设置 turtle1 绘制笔的颜色,而 width 则用来设置线条的粗细。

要使 turtle1 用明显的红线绘制路径,请将 r 的值改成255,并将 width 的值改成5。不要忘记在更改数据后调用该 service。

如果返回到正在运行 turtle_teleop_key 的终端,然后按箭头键,您将看到 turtle1 的笔已发生变化。

您可能已经注意到,目前无法移动 turtle2。但您可以通过将 turtle1 的 cmd_vel topic 重映射到 turtle2 来完成其移动。

6 重映射

在新终端中,source 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_nodeturtle_teleop_key 的终端窗口。如果想要保持这些终端打开,您可以在 turtlesim_node 终端输入 Ctrl + C 并且在 turtle_teleop_key 终端输入 q 来结束模拟。

总结

使用 turtlesim 和 rqt 是学习 ROS 2 核心概念的好方法。

原文地址:https://www.cnblogs.com/xGonZh10n/p/12938200.html