配置环境变量并熟悉基础工具
目标
- 本教程将向您展示如何准备您的 ROS 2(Robot Operating System 2)环境。
- 安装并使用 turtlesim 包和 rqt 工具,为接下来的教程做好准备。
01. 配置环境变量
背景知识
ROS 2 依赖于使用 shell 环境组合工作区的概念。“工作区”是 ROS 中用于指代您在系统上使用 ROS 2 进行开发的位置的术语。核心 ROS 2 工作区被称为底层(underlay)。随后的本地工作区被称为覆盖层(overlays)。当使用 ROS 2 进行开发时,通常会同时激活多个工作区。
组合工作区使得针对不同版本的 ROS 2 或不同的软件包集进行开发变得更加容易。它还允许在同一台计算机上安装多个 ROS 2 发行版(或“distros”,例如 Dashing 和 Eloquent),并在它们之间切换。
这是通过每次打开新 shell 时加载设置文件,或将 source 命令一次性添加到您的 shell 启动脚本中来完成的。如果不加载设置文件,您将无法访问 ROS 2 命令,也无法找到或使用 ROS 2 软件包。换句话说,您将无法使用 ROS 2。
先决条件
在开始这些教程之前,请按照 拓展:ROS2 一键安装脚本 页面上的说明安装 ROS 2。
任务
1. 加载设置文件
每当您打开一个新的 shell 时,都需要运行此命令以访问 ROS 2 命令,如下所示:
source /opt/ros/kilted/setup.bash
注意: 确切的命令取决于您安装 ROS 2 的位置。如果遇到问题,请确保文件路径指向您的安装位置。
2. 将加载命令添加到您的 shell 启动脚本
如果您不想每次打开新的 shell 时都必须加载设置文件(跳过任务 1),那么您可以将该命令添加到您的 shell 启动脚本中:
echo "source /opt/ros/kilted/setup.bash" >> ~/.bashrc
要撤销此操作,请找到您系统的 shell 启动脚本并删除附加的 source 命令。
3. 检查环境变量
加载 ROS 2 设置文件将设置几个操作 ROS 2 所必需的环境变量。如果您在查找或使用 ROS 2 软件包时遇到任何问题,请确保使用以下命令正确设置了您的环境:
printenv | grep -i ROS
检查是否设置了诸如ROS_DISTRO和ROS_VERSION之类的变量。
ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_DISTRO=kilted
3.1 ROS_DOMAIN_ID 变量
== 暂时不做要求 ==
有关 ROS 域 ID 的详细信息,请参阅关键词ROS2 域 ID(ROS2, Domain ID)。
一旦为您的 ROS 2 节点组确定了一个唯一的整数,就可以使用以下命令设置环境变量:
export ROS_DOMAIN_ID=<your_domain_id>
要在 shell 会话之间保持此设置,您可以将该命令添加到您的 shell 启动脚本中:
echo "export ROS_DOMAIN_ID=<your_domain_id>" >> ~/.bashrc
3.2 ROS_AUTOMATIC_DISCOVERY_RANGE 变量
默认情况下,ROS 2 通信不限于本地主机。ROS_AUTOMATIC_DISCOVERY_RANGE 环境变量允许您限制 ROS 2 发现范围。在某些设置中(如教室),使用ROS_AUTOMATIC_DISCOVERY_RANGE 是有帮助的,因为多台机器人可能会发布到同一主题,导致奇怪的行为。有关更多详细信息,请参阅改进的动态发现。
小结
在使用之前,需要正确配置 ROS 2 开发环境。这可以通过两种方式完成:在每个新打开的 shell 中加载设置文件,或将 source 命令添加到启动脚本中。
如果您在定位或使用 ROS 2 软件包时遇到任何问题,首先应该做的是检查您的环境变量,并确保它们设置为您预期的版本和发行版。
02. ROS2 基础工具
背景知识
turtlesim 是一个轻量级模拟器,用于学习 ROS 2(Robot Operating System 2)。它展示了 ROS 2 在最基本层面上的功能,让你了解以后如何操作真实的机器人或机器人仿真。
ros2 工具是用户管理、内省和与 ROS 系统交互的方式。它支持针对系统及其操作不同方面的多个命令。可以使用它来启动节点、设置参数、监听主题等。ros2 工具是 ROS 2 核心安装的一部分。
rqt 是 ROS 2 的一个图形用户界面 (GUI) 工具。在rqt中完成的所有操作都可以通过命令行完成,但rqt提供了更友好的方式来操作 ROS 2 元素。
本教程涉及 ROS 2 的核心概念,如节点 (nodes)、主题 (topics) 和服务 (services)。所有这些概念将在后续教程中详细阐述;现在,您只需设置工具并熟悉它们。
先决条件
之前的教程《配置 ROS 2 环境》将向您展示如何设置您的环境。
任务
1. 安装 turtlesim
始终如一,首先在新终端中源入您的设置文件,如前一教程《配置 ROS 2 环境》所述。
为您的 ROS 2 版本安装turtlesim包:
$ sudo apt update
$ sudo apt install ros-kilted-turtlesim
要检查包是否已安装,运行以下命令,应该会返回turtlesim的可执行文件列表:
ros2 pkg executables turtlesim
终端输出应该如下所示:
turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node
2. 启动 turtlesim
要启动turtlesim,在终端中输入以下命令:
ros2 run turtlesim turtlesim_node
模拟器窗口应出现,中心有一只随机的海龟:

3. 使用 turtlesim
打开一个新的终端并再次源入 ROS 2。
现在您将运行一个新节点来控制第一个节点中的海龟:
ros2 run turtlesim turtle_teleop_key
此时,您应该有三个窗口打开:运行turtlesim_node的终端、运行turtle_teleop_key的终端和turtlesim窗口。安排这些窗口,以便您可以同时看到turtlesim窗口和运行turtle_teleop_key的终端,从而能够控制turtlesim中的海龟。
使用键盘上的方向键控制海龟。它将在屏幕上移动,并用附带的“笔”绘制其路径。
您可以通过使用相应命令的 list 子命令来查看节点及其相关主题 (topics)、服务 (services) 和动作 (actions)。这通常用于机器人操作系统(Robot Operating System 2, ROS2)环境中,以帮助开发者和用户理解和管理系统架构。
例如,在 ROS2 中,您可以使用以下命令来列出所有当前活动的节点、主题、服务和动作:
ros2 node list
ros2 topic list
ros2 service list
ros2 action list
在 ROS 中,节点(nodes)是执行特定任务的进程; 主题(topics)是节点间传输数据的命名总线; 服务(services)提供了一种请求 - 响应式的通信模型; 动作(actions)允许长时间运行的任务接受取消和反馈更新。
4. 安装 rqt
打开一个新的终端以安装rqt及其插件:
sudo apt update
sudo apt install '~nros-kilted-rqt*'
要运行rqt:
$ rqt
5. 使用 rqt
首次运行rqt时,窗口将是空白的。不用担心;只需从顶部菜单栏中选择插件 (Plugins) > 服务 (Services) > 服务调用者 (Service Caller)。
使用刷新按钮确保turtlesim节点的所有服务都可用。
点击**服务 (Service)**下拉列表查看turtlesim的服务,并选择/spawn服务。
5.1 尝试生成服务
让我们使用rqt调用/spawn服务。从其名称可以猜出,/spawn将在turtlesim窗口中创建另一只海龟。
给新海龟起个独特的名字,比如turtle2,方法是在表达式 (Expression)列中的空单引号之间双击。可以看到此表达式对应于name的值,类型为string。
接下来输入一些有效的坐标以生成新海龟,例如x = 1.0和y = 1.0。

要生成turtle2,需要通过点击rqt窗口右上角的**调用 (Call)**按钮来调用服务。
如果服务调用成功,您应该会在输入的x和y坐标的turtlesim窗口中看到一只新的海龟(同样具有随机设计)。
5.2 尝试设置笔服务
现在让我们使用/set_pen服务给turtle1一支独特的笔:

将r、g和b的值设置为 0 到 255 之间的数字,以设置turtle1绘制线条的颜色,width设置线条的粗细。
要让turtle1绘制一条明显的红线,请将r的值更改为 255,width的值更改为 5。别忘了在更新值后调用服务。
如果您返回到运行turtle_teleop_key的终端并按方向键,您将看到turtle1的笔已经改变。

6. 重映射
为了控制turtle2,您需要第二个远程操作节点。然而,如果您尝试运行与之前相同的命令,您会注意到这个节点也控制turtle1。更改此行为的方法是通过重映射cmd_vel主题。
在新终端中,源入 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_node终端中输入Ctrl + C,并在turtle_teleop_key终端中输入q。
小结
使用turtlesim和rqt是学习 ROS 2 核心概念的好方法。
03.下一步
现在已经启动并运行了turtlesim和rqt,并对它们的工作原理有了初步了解,让我们通过下一个教程深入了解第一个 ROS 2 核心概念,理解 ROS 2 节点和话题通信。