参考官方文档
https://docs.ros.org/en/iron/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html
Turtlesim 是一款用于学习 ROS 2 的轻量级模拟器。它说明了 ROS 2 在最基本的层面上做了什么,让您了解以后将如何处理真实机器人或机器人模拟。
ros2 工具是用户管理、自查和与 ROS 系统交互的方式。它支持针对系统及其操作的不同方面的多个命令。人们可能会使用它来启动节点、设置参数、收听主题等等。ros2 工具是核心 ROS 2 安装的一部分。
rqt 是 ROS 2 的图形用户界面 (GUI) 工具。在 rqt 中完成的所有操作都可以在命令行上完成,但 rqt 提供了一种更用户友好的方式来操作 ROS 2 元素。
本教程涉及 ROS 2 的核心概念,如节点、主题和服务。所有这些概念都将在后面的教程中详细阐述;现在,您只需设置工具并感受一下它们。
完成环境配置。
如往常一样,从在新终端source安装文件开始,如 之前的教程 所述。
为您的ROS 2发行版安装turtlesim包:
思考及疑问: ROS2 各模块安装的关系,如果安装整个ros-vserion版本,单个模块是否需要单独安装,哪些模块,rqt, turtlesim, rviz …
Linux:
sudo apt update
sudo apt install ros-iron-turtlesim
检查软件包是否已安装:
ros2 pkg executables turtlesim
上述命令应返回turtlesim的可执行文件列表:
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
终端输入:
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]
在这里你可以看到你的默认海龟的名字是 turtle1 ,以及它产生处的默认坐标。
打开一个新终端并且再次source ROS 2。
运行一个新节点来控制第一个节点中的海龟:
ros2 run turtlesim turtle_teleop_key
此时,你应该打开三个窗口: 一个运行 turtlesim_node
的终端,一个运行 turtle_teleop_key
的终端和一个turtlesim
的窗口。排列好这些窗口,这样你就可以看到海龟的窗口,也可以激活运行 turtle_teleop_key
的终端,这样你就可以控制海龟。
使用键盘上的箭头键来控制海龟。它将在屏幕上移动,并 使用其附带的 “pen” 绘制到目前为止的路径
您可以使用 list
命令查看节点及其关联的服务、话题和动作:
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
在接下来的教程中,您将更多地了解这些概念。由于本教程的目标只是获得turtlesim的总体概述,因此您将使用rqt调用turtlesim的一些服务并与turtlesim节点进行交互。
思考及疑问: 使用 ros2 service list 监控到很多的service, 是否是即时的服务类型
打开一个新的终端来安装 rqt 及其插件:
备注: 已安装整个ros发行版,不必安装单个模块
sudo apt update
sudo apt install ~nros-iron-rqt*
运行rqt:
rqt
第一次运行rqt后,窗口将为空白。不用担心; 只需从顶部的菜单栏中选择 插件> 服务>调用服务(Plugins > Services > Service Caller )。
注解
rqt可能需要一些时间来查找它所有插件。如果你点击插件(Plugins),但没有看到服务(Services)或任何其他选项,你应该关闭rqt,在你的终端输入命令rqt --force-discover
。
使用服务(Service)下拉列表左侧的刷新按钮,确保turtlesim节点的所有服务都可用。
单击服务(Service)下拉列表以查看turtlesim的服务,然后选择 /spawn
服务。
思考及疑问: rqt 中调用 service时 ,dds底层通信逻辑
使用rqt调用 /spawn
服务。你可以从它的名字中猜到/spawn
会在turtlesim窗口中创造出另一只乌龟。
通过双击Expression列的空白单引号处给新乌龟取一个唯一的名称,比如 turtle2
。您可以看到此表达式对应于名称(name)值,并且类型为string
。
输入生成的海龟的新坐标值,如x = 1.0
和 y = 1.0
。
要生成turtle2
,您必须通过单击rqt窗口右上角的Call
按钮来调用服务。
你会看到一只新的乌龟 (同样是随机设计的) 在你输入的x和y坐标处生成。
如果您在rqt中刷新服务列表,您还将看到除了“/turtle1/…”
之外,现在还有与新乌龟 “/turtle2/…”
相关的服务。
使用 /set_pen 服务为turtle1提供一支独特的pen:
r、g 和 b 的值在0到255之间,将设置turtle1绘制的笔的颜色,宽度( width )设置线的厚度。
要让turtle1绘制一条不同的红线,请将r的值更改为255,将宽度的值更改为5。更新值后,不要忘记调用服务。
如果你回到 turtle_teleop_node 正在运行的终端,按下箭头键,你会看到turtle1的笔变了。
你可能已经注意到没有办法移动turtle2。你可以通过将turtle1的 cmd_vel
话题重新映射到turtle2上来实现这一点。
需要第二个远程操作节点来控制turtle2。但是,如果您尝试像以前一样运行相同的命令,您会注意到这个命令也控制着turtle1。改变这种行为的方法是重新映射 cmd_vel
主题。
在新终端中,source ROS 2,然后运行:
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
现在,您可以在该终端处于活动状态时移动turtle2,在运行 turtle_teleop_key
的另一个终端处于活动状态时移动turtle1。
要停止模拟器,您可以在 turtlesim_node 终端输入 “ctrl + c”
,在teleop终端输入q
使用turtlesim和rqt是学习ROS 2核心概念非常好的方法。
既然你已经启动并运行了turtlesim和rqt,并且了解了它们是如何工作的,让我们在下一个教程 了解ROS 2节点 中深入探讨第一个核心ROS 2概念。