警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

创建工作区

目标 创建工作区,学习如何为开发和测试设置叠加。

辅导水平: 初学者

时间 20 分钟

背景介绍

工作区是一个包含 ROS 2 软件包的目录。在使用 ROS 2 之前,有必要在你计划工作的终端中为 ROS 2 安装工作区提供源代码。这样,ROS 2 的软件包就可以在该终端中使用了。

您还可以选择 "覆盖"(overlay)--一个辅助工作区,在这里您可以添加新软件包,而不会影响您正在扩展的现有 ROS 2 工作区,或者 "底层"(underlay)。底层必须包含覆盖层中所有软件包的依赖关系。覆盖层中的软件包将覆盖底层中的软件包。也可以有多层底层和覆盖层,每一层覆盖层都使用其父底层的软件包。

先决条件

任务

1 源代码 ROS 2 环境

您的 ROS 2 主安装将作为本教程的底层。(请记住,底层并不一定是 ROS 2 的主安装)。

根据您安装 ROS 2 的方式(源代码或二进制文件)以及您所处的平台,您的具体源代码命令会有所不同:

source /opt/ros/foxy/setup.bash

咨询 安装指南 如果这些命令对您不起作用,请执行下列命令。

2 创建新目录

最佳做法是为每个新工作区创建一个新目录。名称并不重要,但最好能说明工作区的用途。让我们选择目录名称 ros2_ws,表示 "开发工作区":

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src

另一个最佳做法是将工作区中的任何软件包放入 来源 目录。上述代码会创建一个 来源 目录内 ros2_ws 然后导航进入。

3 克隆一个示例软件包

确保您仍处于 ros2_ws/src 目录。

在初级开发者教程的其余部分,你将创建自己的软件包,但现在你将练习使用现有软件包将工作区组合在一起。

如果您通过 初学者:CLI 工具 教程,您将熟悉 海龟中的一个软件包 教程.

一个 repo 可以有多个分支。你需要查看针对你已安装的 ROS 2 发行版的那个分支。克隆该 repo 时,将 -b 该分支所遵循的参数。

ros2_ws/src 目录下,运行以下命令

git clone https://github.com/ros/ros_tutorials.git -b foxy-devel

现在 教程 被克隆到工作区中。复制 教程 存储库包含 海龟 软件包,我们将在本教程的其余部分中使用它。该软件源中的其他软件包不会被编译,因为它们包含一个 COLCON_IGNORE 锉刀

到目前为止,您已经在工作区中填充了一个示例软件包,但这还不是一个功能完备的工作区。您需要先解决依赖关系,然后再构建工作区。

4 解决依赖关系

在构建工作区之前,您需要解决软件包依赖性问题。您可能已经有了所有的依赖包,但最佳做法是每次克隆时都检查依赖包。你不会希望在长时间等待后才发现缺少了依赖包而导致构建失败。

从工作区的根目录 (ros2_ws),运行以下命令:

# 如果仍在 `ros_tutorials` 克隆的 `src` 目录中,则 cd
CD ... rosdep 安装 -i --从路径 来源 --rosdistro 狐狸 -y

如果你从源代码或 "fat "压缩包在 Linux 上安装了 ROS 2,则需要使用安装说明中的 rosdep 命令。下面是 来源:ROSDEP 部分"脂肪 "档案 ROSDEP 部分.

如果您已经有了所有的依赖项,控制台将返回:

#全部 所需 rosdeps 安装 顺利

软件包会在 package.xml 文件中声明其依赖关系(在下一教程中将进一步了解软件包)。该命令会查看这些声明,并安装缺少的内容。有关 rosdep 在另一个教程中(即将推出)。

5 使用 colcon 构建工作区

从工作区的根目录 (ros2_ws),现在就可以使用该命令构建软件包了:

Colcon build

控制台将返回以下信息

开始 >>> turtlesim
完成<<<乌龟模拟 [5.49s]

摘要:完成 1 个包裹 [5.58s]

备注

其他有用的论据 胶管 构建:

  • --包至 构建所需的软件包及其所有依赖项,但不构建整个工作区(节省时间)

  • --symlink-install 省去了每次调整 python 脚本都要重建的麻烦

  • --事件处理程序 console_direct+ 在构建过程中显示控制台输出(也可以在 登录 目录)

构建完成后,输入 ls 在工作区根 (~/ros2_ws),就会看到 colcon 创建了新目录:

build install log src

"(《世界人权宣言》) 安装 目录中是工作区的设置文件,您可以用它来获取叠加的源代码。

6 覆盖层的来源

在获取覆盖层之前,请务必打开一个新的终端,与构建工作区的终端分开。在构建工作区的同一终端或同样在构建工作区的同一终端获取覆盖层可能会产生复杂的问题。

在新终端中,将 ROS 2 主环境作为 "底层",这样就可以在其 "顶部 "构建覆盖层:

source /opt/ros/foxy/setup.bash

进入工作区的根目录:

cd ~/ros2_ws

在根目录中,输入覆盖层的源代码:

source install/local_setup.bash

备注

采购 本地设置 的软件包只会添加到你的环境中。 设置 源的叠加和底层,让您可以同时使用两个工作空间。

因此,将 ROS 2 主安装的 设置 然后 ros2_ws 覆盖层的 本地设置就像你刚才所做的那样,这就等同于只是寻找来源 ros2_ws's 设置因为这包括其底层环境。

现在您可以运行 海龟 覆盖层中的软件包:

ros2 运行 turtlesim turtlesim_node

但是,你怎么能确定运行的是覆载的海龟模拟器,而不是主安装的海龟模拟器呢?

让我们在叠加中修改 turtlesim,看看效果如何:

  • 您可以单独修改和重建覆盖层中的软件包。

  • 覆盖层优先于底层。

7 修改覆盖层

您可以修改 海龟 的标题栏。为此,请找到 turtle_frame.cpp 文件中的 ~/ros2_ws/src/ros_tutorials/turtlesim/src.打开 turtle_frame.cpp 使用您喜欢的文本编辑器。

在第 52 行,您将看到函数 setWindowTitle("TurtleSim");.更改数值 "TurtleSim";"MyTurtleSim";保存文件。

返回运行 胶管 构建 再运行一次。

返回第二个终端(覆盖层的来源),再次运行 turtlesim:

ros2 运行 turtlesim turtlesim_node

你会看到海龟模拟窗口的标题栏现在显示 "MyTurtleSim"(我的海龟模拟)。

././././_images/overlay.png

尽管您的主 ROS 2 环境是在该终端中生成的,但您的 ros2_ws 环境优先于底层内容。

要查看底层是否完好无损,请打开一个全新的终端,只输入 ROS 2 安装的源代码。再次运行 turtlesim:

ros2 运行 turtlesim turtlesim_node
.././././_images/underlay.png

您可以看到,覆盖层中的修改实际上并不影响底层中的任何内容。

摘要

在本教程中,你将 ROS 2 主发行版作为底层,并通过克隆和构建新工作区中的软件包来创建覆盖层。就像你在修改过的 turtlesim 中看到的那样,覆盖层会被预置到路径中,并优先于底层。

建议在处理少量软件包时使用覆盖,这样就不必把所有东西都放在同一个工作区,也不必在每次迭代时都重建一个巨大的工作区。

下一步工作

现在,您已经了解了创建、构建和采购自己的工作区背后的细节,可以学习如何 创建自己的套餐.