目录
·背景
·前置条件
·任务
o1 加载ROS 2 环境
o2 创建新目录
o3 克隆示例仓库
o4 解决依赖关系
o5 使用 colcon 构建工作空间
o6 加载 overlay
o7 修改 overlay
·总结
·后续步骤
本教程主要涉及到以下命令:
$ source /opt/ros/lyrical/setup.bash$ mkdir -p ~/ros2_ws/src$ cd ~/ros2_ws/src$ git clone https://github.com/ros/ros_tutorials.git -b lyrical
$ cd ..$ rosdep install -i --from-path src --rosdistro lyrical -y$ colcon build
$ ls$ source /opt/ros/lyrical/setup.bash$ cd ~/ros2_ws$ source install/local_setup.bash$ ros2 run turtlesim turtlesim_node
背景
工作空间是一个包含 ROS 2 包的目录。在使用 ROS 2 之前,您需要在计划工作的终端中加载您的 ROS 2 安装工作空间。这使 ROS 2 的包在该终端中可供您使用。
您还可以选择加载一个“overlay”——一个次要工作空间,您可以在其中添加新包而不会干扰您所扩展的现有 ROS 2 工作空间(即“underlay”)。您的 underlay 必须包含 overlay 中所有包的依赖项。overlay 中的包将覆盖 underlay 中的包。也可以有多层 underlay 和 overlay,每个后续的 overlay 都使用其父 underlay 的包。
前置条件
·ROS 2 安装
·colcon 安装
·git 安装
·turtlesim 安装
·已安装rosdep
·了解基本终端命令(这里是 Linux 指南)
·您选择的文本编辑器
任务
1 加载 ROS 2 环境
您的主 ROS 2 安装将是本教程的 underlay。(请记住,underlay 不一定是主 ROS 2 安装。)
根据您安装 ROS 2 的方式(从源码还是二进制)以及您所在的平台,确切的加载命令会有所不同:
Linux:
$ source /opt/ros/lyrical/setup.bash如果您遵循的安装指南中的这些命令不起作用,请查阅该指南。
2 创建新目录
最佳实践是为每个新工作空间创建一个新目录。名称并不重要,但有助于表明工作空间的用途。让我们选择目录名ros2_ws,代表“开发工作空间”:
Linux:
$ mkdir -p ~/ros2_ws/src$ cd ~/ros2_ws/src
另一个最佳实践是将工作空间中的所有包放入src目录。上述代码在ros2_ws内创建了一个src目录,然后导航到其中。
3 克隆示例仓库
在克隆之前,确保您仍在ros2_ws/src目录中。
在其余的初学者开发者教程中,您将创建自己的包,但现在您将练习使用现有包来组建一个工作空间。
如果您已经完成了初学者:CLI 工具教程,您应该熟悉turtlesim,它是ros_tutorials中的包之一。
一个仓库可以有多个分支。您需要检出针对您安装的 ROS 2 发行版的那个分支。当您克隆此仓库时,添加-b参数,后跟该分支名称。
在ros2_ws/src目录中,运行以下命令:
$ git clone https://github.com/ros/ros_tutorials.git -b lyrical现在ros_tutorials已被克隆到您的工作空间中。ros_tutorials仓库包含turtlesim包,我们将在本教程的其余部分使用它。此仓库中的其他包不会被构建,因为它们包含一个COLCON_IGNORE文件。
到目前为止,您已经用一个示例包填充了您的工作空间,但它还不是一个功能齐全的工作空间。您需要先解决依赖关系,然后构建工作空间。
4 解决依赖关系
在构建工作空间之前,您需要解决包的依赖关系。您可能已经拥有所有依赖项,但最佳实践是每次克隆时都检查依赖项。您不希望等待很长时间后构建失败,却发现自己缺少依赖项。
从工作空间的根目录(ros2_ws)运行以下命令:
Linux:如果您仍在带有ros_tutorials克隆的src目录中,请确保运行cd ..返回工作空间(ros2_ws)。
$ cd ..$ rosdep install -i --from-path src --rosdistro lyrical -y如果您从源码或二进制存档在 Linux 上安装了 ROS 2,您将需要从其安装说明中使用 rosdep 命令。这里是从源码 rosdep 部分和二进制存档 rosdep 部分。
如果您已经拥有所有依赖项,控制台将返回:
#All required rosdeps installed successfully包在package.xml文件中声明其依赖项(您将在下一个教程中了解更多关于包的信息)。此命令遍历这些声明并安装缺失的依赖项。您可以在另一个教程中了解更多关于rosdep的信息(即将推出)。
5 使用 colcon 构建工作空间
从工作空间的根目录(ros2_ws),您现在可以使用以下命令构建您的包:
Linux:
$ colcon buildStarting >>> turtlesimFinished <<< turtlesim [5.49s]Summary: 1 package finished [5.58s]注意:colcon build的其他有用参数:
·--packages-up-to构建您想要的包及其所有依赖项,但不构建整个工作空间(节省时间)
·--symlink-install使您不必在每次调整 Python 脚本时都重新构建
·--event-handlers console_direct+在构建时显示控制台输出(否则可以在log目录中找到)
·--executor sequential逐个处理包,而不是使用并行
构建完成后,在工作空间根目录(~/ros2_ws)中输入命令。您将看到 colcon 创建了新目录:
Linux:
$ lsbuildinstalllogsrcinstall目录是您工作空间的设置文件所在的位置,您可以使用它们来加载您的 overlay。
6 加载 overlay
在加载 overlay 之前,非常重要的一点是,您要打开一个新的终端,与您构建工作空间的终端分开。在您构建的同一个终端中加载 overlay,或者同样在加载了 overlay 的地方构建,可能会产生复杂的问题。
在新终端中,将您的主 ROS 2 环境作为“underlay”加载,这样您就可以在“其上”构建 overlay:
Linux:
$ source /opt/ros/lyrical/setup.bash进入工作空间的根目录:
Linux:
$ cd ~/ros2_ws在根目录中,加载您的 overlay:
Linux:
$ source install/local_setup.bash注意:加载 overlay 的local_setup只会将 overlay 中可用的包添加到您的环境中。setup会同时加载 overlay 及其创建时所基于的 underlay,使您能够同时使用两个工作空间。因此,像您刚才那样,先加载主 ROS 2 安装的setup,然后加载ros2_ws overlay 的local_setup,等同于直接加载ros2_ws的setup,因为它包含了其 underlay 的环境。
现在您可以从 overlay 运行turtlesim包:
$ ros2 run turtlesim turtlesim_node但是,您如何知道运行的是 overlay 中的 turtlesim,而不是主安装中的 turtlesim?
让我们修改 overlay 中的 turtlesim,这样您就可以看到效果:
·您可以在 overlay 中独立于 underlay 修改和重建包。
·overlay 优先于 underlay。
7 修改 overlay
您可以通过编辑 turtlesim 窗口的标题栏来修改 overlay 中的turtlesim。为此,找到~/ros2_ws/src/ros_tutorials/turtlesim/src中的turtle_frame.cpp文件。用您喜欢的文本编辑器打开turtle_frame.cpp。
找到函数setWindowTitle("TurtleSim");,将值"TurtleSim"改为"MyTurtleSim",然后保存文件。
返回到之前运行colcon build的第一个终端,再次运行它。
返回到第二个终端(已加载 overlay 的那个),再次运行 turtlesim:
$ ros2 run turtlesim turtlesim_node您将看到 turtlesim 窗口的标题栏现在显示“MyTurtleSim”。

尽管您的主 ROS 2 环境在此之前已在此终端中加载,但您的ros2_ws环境的 overlay 优先于 underlay 的内容。
为了查看您的 underlay 仍然完好无损,请打开一个全新的终端,并且只加载您的 ROS 2 安装。再次运行 turtlesim:
$ ros2 run turtlesim turtlesim_node

您可以看到 overlay 中的修改实际上并没有影响 underlay 中的任何内容。
总结
在本教程中,您将主 ROS 2 发行版安装作为 underlay 加载,并通过在新的工作空间中克隆和构建包创建了一个 overlay。overlay 被添加到路径的前面,并优先于 underlay,正如您在修改后的 turtlesim 中所看到的那样。
建议在开发少量包时使用 overlay,这样您就不必将所有内容放在同一个工作空间中,并在每次迭代时重建一个庞大的工作空间。
后续步骤
既然您已经了解了创建、构建和加载您自己的工作空间的细节,您可以学习如何创建您自己的包。
本文档完整翻译自 ROS 2 Lyrical 官方文档,仅用于学习交流。
夜雨聆风