乐于分享
好东西不私藏

机器人系统——ROS2文档—创建工作空间

机器人系统——ROS2文档—创建工作空间
目标:创建一个工作空间,并学习如何设置用于开发和测试的 overlay(上层工作空间)。教程级别:入门级时间: 20 分钟

目录

·背景

·前置条件

·任务

o加载ROS 2 环境

o创建新目录

o克隆示例仓库

o解决依赖关系

o使用 colcon 构建工作空间

o加载 overlay

o修改 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 指南

·您选择的文本编辑器

任务

加载 ROS 2 环境

您的主 ROS 2 安装将是本教程的 underlay。(请记住,underlay 不一定是主 ROS 2 安装。)

根据您安装 ROS 2 的方式(从源码还是二进制)以及您所在的平台,确切的加载命令会有所不同:

Linux

$ source /opt/ros/lyrical/setup.bash

如果您遵循的安装指南中的这些命令不起作用,请查阅该指南。

创建新目录

最佳实践是为每个新工作空间创建一个新目录。名称并不重要,但有助于表明工作空间的用途。让我们选择目录名ros2_ws,代表开发工作空间

Linux

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

另一个最佳实践是将工作空间中的所有包放入src目录。上述代码在ros2_ws内创建了一个src目录,然后导航到其中。

克隆示例仓库

在克隆之前,确保您仍在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文件。

到目前为止,您已经用一个示例包填充了您的工作空间,但它还不是一个功能齐全的工作空间。您需要先解决依赖关系,然后构建工作空间。

解决依赖关系

在构建工作空间之前,您需要解决包的依赖关系。您可能已经拥有所有依赖项,但最佳实践是每次克隆时都检查依赖项。您不希望等待很长时间后构建失败,却发现自己缺少依赖项。

从工作空间的根目录(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的信息(即将推出)。

使用 colcon 构建工作空间

从工作空间的根目录(ros2_ws),您现在可以使用以下命令构建您的包:

Linux

$ colcon build
Starting >>> turtlesim
Finished <<< 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

$ ls
buildinstalllogsrc

install目录是您工作空间的设置文件所在的位置,您可以使用它们来加载您的 overlay

加载 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_wssetup,因为它包含了其 underlay 的环境。

现在您可以从 overlay 运行turtlesim包:

$ ros2 run turtlesim turtlesim_node

但是,您如何知道运行的是 overlay 中的 turtlesim,而不是主安装中的 turtlesim

让我们修改 overlay 中的 turtlesim,这样您就可以看到效果:

·您可以在 overlay 中独立于 underlay 修改和重建包。

·overlay 优先于 underlay

修改 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 加载,并通过在新的工作空间中克隆和构建包创建了一个 overlayoverlay 被添加到路径的前面,并优先于 underlay,正如您在修改后的 turtlesim 中所看到的那样。

建议在开发少量包时使用 overlay,这样您就不必将所有内容放在同一个工作空间中,并在每次迭代时重建一个庞大的工作空间。

后续步骤

既然您已经了解了创建、构建和加载您自己的工作空间的细节,您可以学习如何创建您自己的包

本文档完整翻译自 ROS 2 Lyrical 官方文档,仅用于学习交流。