介绍turtlesim和rqt
目标: 安装并使用turtlesim包和rqt工具为即将到来的教程做准备。 [Alyssa@8869]
教程级别: 初学者 [Alyssa@7088]
时间: 15分钟 [Alyssa@6755]
内容
背景
Turtlesim是学习ROS 2的轻量级模拟器。它说明了ROS 2在最基本的层面上做了什么,让你知道你以后将如何处理一个真正的机器人或机器人仿真。 [待校准@8870]
rqt是ROS 2的GUI工具。在rqt中完成的所有操作都可以在命令行上完成,但是它提供了一种更简单、更用户友好的方式来操作ROS 2基本模块。 [Alyssa@8871]
本教程涉及核心ROS 2概念,如节点、话题和服务的分离。所有这些概念将在后面的教程中详细阐述; 现在,你将简单地设置工具并感受它们。 [待校准@8872]
先决条件
上一教程 配置ROS 2环境 将向您展示如何设置您的环境。 [待校准@8873]
任务
1 安装turtlesim [Alyssa@8874]
如往常一样,从在新终端source安装文件开始,如 之前的教程 所述。 [Alyssa@8875]
为您的ROS 2发行版安装turtlesim包:
sudo apt update
sudo apt install ros-foxy-turtlesim
只要您安装的ROS 2中的archive包含 ros_tutorials
仓库,您就应该已经安装了turtlesim。 [待校准@8877]
只要您安装的ROS 2中的archive包含 ros_tutorials
仓库,您就应该已经安装了turtlesim。 [待校准@8877]
检查软件包是否已安装: [待校准@8878]
ros2 pkg executables turtlesim
上述命令应返回turtlesim的可执行文件列表: [待校准@8879]
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
2 启动turtlesim [Alyssa@8880]
要启动turtlesim,请在终端中输入以下命令:
ros2 run turtlesim turtlesim_node
应该出现一个模拟器窗口,中间有一只随机的乌龟。 [Alyssa@8882]
在终端中的命令下面,您将看到来自节点的消息: [Alyssa@8883]
[INFO] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [turtlesim]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
在这里你可以看到你的默认海龟的名字是 turtle1
,以及它产生处的默认坐标。 [Alyssa@8884]
3 使用turtlesim [Alyssa@8885]
打开一个新终端并且再次source ROS 2。 [Alyssa@8886]
现在,您将运行一个新节点来控制第一个节点中的海龟:
ros2 run turtlesim turtle_teleop_key
此时,你应该打开三个窗口: 一个运行 turtlesim_node
的终端,一个运行 turtle_teleop_key
的终端和一个turtlesim的窗口。排列好这些窗口,这样你就可以看到海龟的窗口,也可以激活运行 turtle_teleop_key
的终端,这样你就可以控制海龟。 [Alyssa@8888]
使用键盘上的箭头键来控制海龟。它将在屏幕上移动,并 使用其附带的 "pen" 绘制到目前为止的路径。 [Alyssa@8889]
注解
按箭头键只会使乌龟移动一小段距离然后停止。这是因为,例如,如果操作员失去了与机器人的连接,实际上,您不会希望机器人继续执行指令。 [Alyssa@8890]
您可以使用 list
命令查看节点及其关联的服务、话题和动作:
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
您将在接下来的教程中了解更多关于这些概念的信息。由于本教程的目标只是给出turtlesim的一般性概述,我们将使用rqt (ROS 2的图形用户界面) 来仔细研究一下服务。 [Alyssa@8892]
4 安装rqt [Alyssa@8893]
打开一个新的终端来安装 rqt
及其插件:
sudo apt update
sudo apt install ~nros-foxy-rqt*
sudo apt update
sudo apt install ros-foxy-rqt*
标准archive安装ROS 2 macOS包含 rqt
及其插件,所以你应该已经 rqt
安装。 [待校准@8897]
标准archive安装ROS 2 Windows包含 rqt
及其插件,所以你应该已经 rqt
安装。 [待校准@8898]
运行rqt:
rqt
5 使用rqt [Alyssa@8900]
第一次运行rqt后,窗口将为空白。不用担心; 只需从顶部的菜单栏中选择 插件> 服务>调用服务(Plugins > Services > Service Caller )。 [Alyssa@8901]
注解
rqt可能需要一些时间来查找它所有插件。如果你点击插件(Plugins),但没有看到服务(Services)或任何其他选项,你应该关闭rqt,在你的终端输入命令 rqt --force-discover
。 [Alyssa@8902]
使用服务(Service)下拉列表左侧的刷新按钮,确保turtlesim节点的所有服务都可用。 [Alyssa@8903]
单击服务(Service)下拉列表以查看turtlesim的服务,然后选择 /spawn
服务。 [Alyssa@8904]
5.1 尝试生成(spawn)服务 [Alyssa@8905]
让我们使用rqt调用 /spawn
服务。你可以从它的名字中猜到 /spawn
会在turtlesim窗口中创造出另一只乌龟。 [待校准@8906]
通过双击Expression列的空白单引号处给新乌龟取一个唯一的名称,比如 turtle2
。您可以看到此表达式对应于名称(name)值,并且类型为string。 [Alyssa@8907]
输入生成的海龟的新坐标值,如 x = 1.0
和 y = 1.0
。 [Alyssa@8908]
注解
如果您尝试生成与现有海龟同名的新海龟,如默认 turtle1
,您将在运行 turtlesim_node
的终端中收到一条错误消息: [Alyssa@8909]
[ERROR] [turtlesim]: A turtle named [turtle1] already exists
要生成turtle2,您必须通过单击rqt窗口右上角的呼叫( Call )按钮来调用服务。 [Alyssa@8910]
你会看到一只新的乌龟 (同样是随机设计的) 在你输入的x和y坐标处生成。 [Alyssa@8911]
如果您在rqt中刷新服务列表,您还将看到除了 “/turtle1/…” 之外,现在还有与新乌龟 “/turtle2/…” 相关的服务。 [Alyssa@8912]
5.2 尝试set_pen服务 [Alyssa@8913]
现在,让我们使用 /set_pen
服务为turtle1提供一支独特的笔: [Alyssa@8914]
r、g 和 b 的值在0到255之间,将设置turtle1绘制的笔的颜色,宽度( width )设置线的厚度。 [Alyssa@8915]
要让turtle1绘制一条不同的红线,请将r的值更改为255,将宽度的值更改为5。更新值后,不要忘记调用服务。 [待校准@8916]
如果你回到 turtle_teleop_node
正在运行的终端,按下箭头键,你会看到turtle1的笔变了。 [Alyssa@8917]
你可能已经注意到没有办法移动turtle2。你可以通过将turtle1的 cmd_vel
话题重新映射到turtle2上来实现这一点。 [Alyssa@8918]
6 重新映射 [Alyssa@7717]
在新终端中,source ROS 2,然后运行: [Alyssa@8919]
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
现在,您可以在该终端处于活动状态时移动turtle2,在运行 turtle_teleop_key
的另一个终端处于活动状态时移动turtle1。 [待校准@8920]
7 关闭turtlesim [Alyssa@8921]
要停止模拟器,您可以在 turtlesim_node
终端输入 “ctrl + c”,在teleop终端输入 q
。 [Alyssa@8922]
总结
使用turtlesim和rqt是学习ROS 2核心概念非常好的方法。 [Alyssa@8923]
下一步
既然你已经启动并运行了turtlesim和rqt,并且了解了它们是如何工作的,让我们在下一个教程 了解ROS 2节点 中深入探讨第一个核心ROS 2概念。 [待校准@8924]