目标:安装并使用 turtlesim 包和 rqt 工具为即将到来的教程做准备。
教程级别:初学者
时间:15 分钟
安装包:sudo apt install ros-jazzy-turtlesim
运行节点:ros2 run turtlesim turtlesim_node
使用rqt:rqt
重映射:ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
目录
背景
先决条件
任务
安装 turtlesim
启动 turtlesim
使用 turtlesim
安装 rqt
使用 rqt 5
重映射
关闭海龟仿真程序
摘要
下一步
相关内容
背景
Turtlesim 是一个用于学习 ROS 2 的轻量级模拟器。它展示了 ROS 2 在最基本层面上的功能,以便让您了解稍后在真实机器人或机器人模拟中将会做些什么。
ros2 工具是用户管理、内省 introspects 和与 ROS 系统交互的方式。它支持多个命令,这些命令针对系统及其操作的不同方面。人们可能会使用它来启动一个节点,设置一个参数,监听一个主题,等等。ros2 工具是核心 ROS 2 安装的一部分。
rqt 是 ROS 2 的图形用户界面(GUI)工具。在 rqt 中完成的所有操作都可以通过命令行完成,但 rqt 提供了一种更友好的方式来操作 ROS 2 元素。
本教程涉及 ROS 2 的核心概念,如节点、主题和服务(nodes, topics, and services. )。所有这些概念将在后续教程中详细阐述;目前,您将简单地设置工具并对它们有所了解。
先决条件
前一教程《配置环境》将指导您如何设置您的环境。
任务
1 安装 turtlesim
如往常一样,按照上一教程的描述,在新终端中开始导入您的设置文件。
为您的 ROS 2 发行版安装 turtlesim 包:
sudo apt update
sudo apt install ros-jazzy-turtlesim
检查包是否已安装:
ros2 pkg executables turtlesim
上述命令应返回 turtlesim 的可执行文件列表:
cxy@ubuntu2404-cxy:~$ ros2 pkg executables turtlesim
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
2. 启动 turtlesim
要启动 turtlesim,请在终端中输入以下命令:
ros2 run turtlesim turtlesim_node
仿真器窗口应该出现,中间有一个随机的乌龟。
在终端里,输入命令后,你会看到来自节点的消息:
cxy@ubuntu2404-cxy:~$ ros2 run turtlesim turtlesim_node
[INFO] [1719996458.035533054] [turtlesim]: Starting turtlesim with node name /turtlesim
[INFO] [1719996458.101836640] [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
子命令查看节点及其关联的主题、服务和操作:
cxy@ubuntu2404-cxy:~$ ros2 node list
/teleop_turtle
/turtlesim
cxy@ubuntu2404-cxy:~$ ros2 topic list
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
cxy@ubuntu2404-cxy:~$ ros2 service list
/clear
/kill
/reset
/spawn
/teleop_turtle/describe_parameters
/teleop_turtle/get_parameter_types
/teleop_turtle/get_parameters
/teleop_turtle/get_type_description
/teleop_turtle/list_parameters
/teleop_turtle/set_parameters
/teleop_turtle/set_parameters_atomically
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/describe_parameters
/turtlesim/get_parameter_types
/turtlesim/get_parameters
/turtlesim/get_type_description
/turtlesim/list_parameters
/turtlesim/set_parameters
/turtlesim/set_parameters_atomically
cxy@ubuntu2404-cxy:~$ ros2 action list
/turtle1/rotate_absolute
在接下来的教程中,您将更多地了解这些概念。由于本教程的目标仅是对 turtlesim 有一个大致的概述,您将使用 rqt 来调用一些 turtlesim 服务并与 turtlesim_node
进行交互。
4 安装 rqt
打开一个新的终端来安装 rqt
及其插件:
sudo apt update
# 源码编译不需要单独安装 rqt
sudo apt install '~nros-jazzy-rqt*'
要运行 rqt:
rqt
5 使用 rqt
当您第一次运行 rqt 时,窗口将是空白的。不用担心;只需从顶部的菜单栏中选择 插件 > 服务 > 服务调用器 Plugins > Services > Service Caller 即可。
便条
rqt 定位所有插件可能需要一些时间。如果您点击插件但没有看到服务或任何其他选项,您应该关闭 rqt 并在终端中输入命令 rqt --force-discover
。
使用服务下拉列表左侧的刷新按钮,确保您的 turtlesim 节点的所有服务都可用。
点击服务下拉列表以查看 turtlesim 的服务,并选择 /spawn
服务。
5.1 尝试生成服务
让我们使用 rqt 来调用 /spawn
服务。你可以从它的名字猜到 /spawn
会在 turtlesim 窗口中创建另一个乌龟。
给新乌龟一个独特的名字,比如 turtle2
,通过在“表达式”栏中的空单引号之间双击。你可以看到这个表达式对应于名字的值,并且是字符串类型。
接下来输入一些有效的坐标来生成新的乌龟,比如 x = 1.0
和 y = 1.0
。
便条
如果您尝试生成一个与现有乌龟同名的新乌龟,例如默认的 turtle1
,您将在运行 turtlesim_node
的终端中收到一条错误信息:
[ERROR] [turtlesim]: A turtle named [turtle1] already exists
要生成 turtle2404
,您需要通过点击 rqt 窗口右上角的呼叫 Call 按钮来呼叫服务。
如果服务调用成功,您应该会看到一只新的乌龟(再次是随机设计)在您输入的 x 和 y 坐标处出现。
如果您在 rqt 中刷新服务列表,您还会看到现在除了 /turtle1/...
之外,还有与新乌龟 /turtle2404/...
相关的服务。
5.2 尝试使用 set_pen 服务
现在让我们使用 /set_pen
服务给 turtle1
一个独特的笔:
r、g 和 b 的值介于 0 到 255 之间,用于设置笔 turtle1
绘制时的颜色,而 width 则设置线条的粗细。
要让 turtle1
用鲜明的红线绘制,请将 r 的值改为 255,将宽度的值改为 5。更新值后,不要忘记调用服务。
如果您回到正在运行 turtle_teleop_key
的终端并按箭头键,您会看到 turtle1
的笔已经改变。
您可能也注意到了,没有办法移动 turtle2
。那是因为没有 turtle2
的遥控节点。
6 重新映射 Remapping
您需要第二个遥控节点来控制 turtle2
。但是,如果您尝试像之前一样运行相同的命令,您会发现这个命令也控制了 turtle1
。改变这种行为的方法是通过重新映射 cmd_vel
主题。
在新的终端中,源 ROS 2,并运行:
ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2/cmd_vel
cxy@ubuntu2404-cxy:~$ ros2 run turtlesim turtle_teleop_key --ros-args --remap turtle1/cmd_vel:=turtle2404/cmd_vel
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
Use g|b|v|c|d|e|r|t keys to rotate to absolute orientations. 'f' to cancel a rotation.
'q' to quit.
7 关闭 turtlesim
要停止模拟,您可以在 turtlesim_node
终端输入 Ctrl + C
,并在 turtle_teleop_key
终端输入 q
。
摘要
使用 turtlesim 和 rqt 是学习 ROS 2 核心概念的好方法。
下一步
现在您已经启动并运行了 turtlesim 和 rqt,并且对它们的工作原理有了一定了解,让我们通过下一个教程深入了解 ROS 2 的第一个核心概念——理解节点https://docs.ros.org/en/jazzy/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Nodes/Understanding-ROS2-Nodes.html。
相关内容
乌龟仿真包可以在 ros_tutorials 仓库中找到https://github.com/ros/ros_tutorials/tree/jazzy/turtlesim 。
这个社区贡献的视频展示了本教程中涵盖的许多项目https://www.youtube.com/watch?v=xwT7XWflMdc&ab_channel=CanonicalUbuntu 。