【ROS2指南-10】创建工作空间

目标:创建一个工作区并了解如何设置用于开发和测试。

教程级别:初学者

时间: 20分钟

内容

  • 背景

  • 先决条件

  • 任务

    • 1 源码ROS 2 环境

    • 2 创建一个新目录

    • 3 克隆一个样本仓库

    • 4 解决依赖

    • 5 使用 colcon 构建工作区

    • 6 源覆盖

    • 7 修改覆盖

  • 概括

  • 下一步

背景

工作区是包含 ROS 2 包的目录。在使用 ROS 2 之前,有必要在您计划使用的终端中获取 ROS 2 安装工作区的源代码。这使得 ROS 2 的包可供您在该终端中使用。

您还可以选择建立一个“覆盖层”——一个辅助工作区,您可以在其中添加新包而不会干扰您正在扩展的现有 ROS 2 工作区,或“底层”。您的底层必须包含覆盖层中所有包的依赖项。overlay 中的包将覆盖 underlay 中的包。也可以有多层底层和覆盖层,每个连续的覆盖层都使用其父底层的包。

先决条件

  • ROS 2 安装

  • colcon安装

  • git安装

  • turtlesim安装

  • 安装rosdep

  • 了解基本终端命令(这里是 Linux 指南)

  • 您选择的文本编辑器

任务

1 源码ROS 2 环境

您的主要 ROS 2 安装将成为本教程的基础。

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

source /opt/ros/dashing/setup.bash

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

2 创建一个新目录

最佳做法是为每个新工作区创建一个新目录。名称并不重要,但它有助于指示工作区的用途。dev_ws让我们为“开发工作区”选择目录名称:

mkdir -p ~/dev_ws/src
cd ~/dev_ws/src

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

3 克隆一个样本仓库

dev_ws/src在克隆之前确保您仍在目录中。

在初学者开发人员教程的其余部分,您将创建自己的包,但现在您将练习使用现有包将工作区放在一起。

您将使用的现有包来自ros_tutorials存储库 (repo)。如果您阅读了“初学者:CLI 工具”教程,您将熟悉turtlesim此存储库中的其中一个软件包。

你可以在 GitHub 上看到 repo 。

注意目录列表左侧的“Branch”下拉列表。当您克隆此 repo 时,添加-b参数,后跟与您的 ROS 2 发行版对应的分支。

dev_ws/src目录中,针对您正在使用的发行版运行以下命令:

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

现在ros_tutorials已克隆到您的工作区中。如果您查看 now 的内容dev_ws/src,您将看到新ros_tutorials目录。

要查看里面的包ros_tutorials,输入命令:

ls ros_tutorials

这将列出您刚刚克隆的 repo 的内容,如下所示:

roscpp_tutorials  rospy_tutorials  ros_tutorials  turtlesim

前三个包被忽略;turtlesim是这个 repo 中唯一实际的 ROS 2 包。

现在您已经使用示例包填充了您的工作区,但它还不是一个功能齐全的工作区。您需要先解决依赖关系并构建工作区。

4 解决依赖

在构建工作区之前,您需要解决包依赖关系。您可能已经拥有所有依赖项,但最佳做法是在每次克隆时检查依赖项。您不希望构建由于缺少依赖项而在长时间等待后失败。

从工作区的根目录~/dev_ws运行以下命令:

rosdep install -i --from-path src --rosdistro dashing -y

如果您从源代码或“fat”存档在 Linux 上安装了 ROS 2,则需要使用其安装说明中的 rosdep 命令。这是源代码 rosdep 部分和“胖”存档 rosdep 部分。

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

All required rosdeps installed successfully

包在 package.xml 文件中声明它们的依赖关系(您将在下一个教程中了解有关包的更多信息)。此命令遍历这些声明并安装缺少的声明。rosdep您可以在另一个教程(即将推出)中了解更多信息。

5 使用 colcon 构建工作区

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

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

构建完成后,进入ls工作区根目录(~/dev_ws),您将看到 colcon 已创建新目录:

build  install  log  src

install目录是您工作区的设置文件所在的位置,您可以使用这些文件来获取您的叠加层。

6 源覆盖

在采购叠加层之前,打开一个新终端非常重要,与您构建工作区的终端分开。在您构建的同一终端中获取覆盖层,或者同样在覆盖层来源处构建,可能会产生复杂的问题。

在新终端中,将你的主要 ROS 2 环境作为“底层”,这样你就可以在它“之上”构建覆盖层:

source /opt/ros/dashing/setup.bash

进入工作区的根目录:

cd ~/dev_ws

在根目录中,获取您的叠加层:

. install/local_setup.bash

笔记

选择local_setup覆盖层只会将覆盖层中可用的包添加到您的环境中。setup源覆盖层以及创建它的底层,允许您利用这两个工作区。

因此,选择您的主要 ROS 2 安装setup,然后dev_ws采购覆盖层,就像您刚才所做的那样,与选择的local_setup相同,因为它包括创建它的底层环境。dev_ws/setup

turtlesim现在您可以从叠加层运行包:

ros2 run turtlesim turtlesim_node

但是你怎么知道这是 overlay turtlesim 正在运行,而不是你的系统版本安装的 turtlesim?

让我们在叠加层中修改 turtlesim,以便您可以看到效果:

  • 您可以独立于底层修改和重建覆盖层中的包。

  • 叠加层优先于底层。

7 修改覆盖

您可以turtlesim通过编辑 turtlesim 窗口上的标题栏来修改叠加层。为此,请在~/dev_ws/src/ros_tutorials/turtlesim/src/turtle_frame.cpp 使用您喜欢的文本编辑器打开。

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

返回到您之前运行的第一个终端并再次运行它。colcon build

返回第二个终端(叠加层的来源)并再次运行 turtlesim:

ros2 run turtlesim turtlesim_node

您会看到 turtlesim 窗口的标题栏现在显示为“MyTurtleSim”。

【ROS2指南-10】创建工作空间_第1张图片

即使你的主要 ROS 2 环境早先是在这个终端中获取的,你的dev_ws环境的覆盖层也优先于底层的内容。

要查看您的底层仍然完好无损,请打开一个全新的终端并仅获取您的 ROS 2 安装源。再次运行 turtlesim:

ros2 run turtlesim turtlesim_node

【ROS2指南-10】创建工作空间_第2张图片

您可以看到叠加层中的修改实际上并未影响底层中的任何内容。

概括

在本教程中,您将主要的 ROS 2 发行版安装作为底层,并通过在新工作区中克隆和构建包来创建覆盖层。正如您在修改后的 turtlesim 中看到的那样,覆盖层被添加到路径之前,并优先于底层。

建议在处理少量包时使用覆盖,这样您就不必将所有内容都放在同一个工作区中,也不必在每次迭代时都重建一个巨大的工作区。

下一步

现在您了解了创建、构建和采购您自己的工作区背后的详细信息,您可以学习如何创建您自己的包。

你可能感兴趣的:(ROS2,机器人)