创建工作空间 [待校准@9276]

Goal目标: Create创建工作区并学习如何为开发版本和测试设置覆盖。 [待校准@9277]

教程级别: 初学者 [Alyssa@7088]

Time时间: 20 20分钟 [待校准@7181]

背景

工作区是包含ROS 2包的目录。在使用ROS 2之前,有必要在您计划使用的终端中源文件ROS 2安装工作区。这使得ROS 2的包可供您在该终端中使用。 [待校准@9278]

您还可以选择采购一个 “覆盖” -- 一个辅助工作区,您可以在其中添加新包,而不会干扰您正在扩展的现有ROS 2工作区或 “参考”。您的衬底必须包含叠加层中所有包的依赖项。覆盖中的包将覆盖衬底中的包。也有可能有几层衬垫和覆盖层,每个连续的覆盖层使用其父衬垫包。 [待校准@9279]

任务

1源ROS 2环境 [待校准@9287]

您的主ROS 2安装将是本教程的参考底图。(请记住,衬底不一定必须是主要的ROS 2安装。) [待校准@9288]

根据您安装ROS 2的方式 (从源文件或二进制文件) 以及您所在的平台,您的确切源文件命令将有所不同: [待校准@9289]

source /opt/ros/foxy/setup.bash

如果这些命令对你不起作用,请咨询你遵循的 installation guide[待校准@9291]

2创建新目录 [待校准@9292]

最佳实践是为每个新工作区创建一个新目录。名称并不重要,但让它指明工作区的用途是有帮助的。让我们为 “开发版本工作区” 选择目录名称 dev_ws : [待校准@9293]

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

另一个最佳实践是将工作区中的任何包放入 src 目录中。上述代码创建一个 src 目录内 dev_ws 然后导航到它。 [待校准@9294]

3克隆样本存储库 [待校准@9295]

在克隆之前,请确保您仍在 dev_ws/src 目录中。 [待校准@9296]

在其余的初级开发人员教程中,您将创建自己的包,但现在您将练习使用现有包将工作区放在一起。 [待校准@9297]

您将使用的现有包来自 ros_tutorials 仓库 (repo)。如果你浏览了 "Beginner: CLI Tools" 教程,你会熟悉 turtlesim ,这个回购中的一个包。 [待校准@9298]

你可以看到回购 on GitHub[待校准@9299]

请注意目录列表左侧的 “分支” 下拉列表。克隆此存储库时,请添加 -b 参数,后跟与ROS 2发行版相对应的分支。 [待校准@9300]

dev_ws/src 目录中,为您正在使用的发行版运行以下命令: [待校准@9301]

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

现在在您的工作区中克隆了 ros_tutorialsros_tutorials 仓库包含 turtlesim 包,我们将在本教程的其余部分使用。这个仓库里的其他包没有被建造,因为它们包含一个 COLCON_IGNORE 文件。 [待校准@9302]

现在,您已经使用示例包填充了工作区,但它还不是一个功能齐全的工作区。您需要先解析依赖项并构建工作区。 [待校准@9303]

4解决依赖关系 [待校准@9304]

在构建工作区之前,您需要解决包依赖关系。您可能已经拥有了所有依赖项,但最佳实践是在每次克隆时检查依赖项。您不希望构建在长时间等待后因缺少依赖项而失败。 [待校准@9305]

在工作区 ( dev_ws ) 的根目录下,运行以下命令: [待校准@9306]

# cd if you're still in the ``src`` directory with the ``ros_tutorials`` clone
cd ..
rosdep install -i --from-path src --rosdistro foxy -y

如果您从源文件或 "fat" archive在Linux上安装了ROS 2,则需要使用其安装说明中的rosdep命令。这是 from-source rosdep section"fat" archive rosdep section[待校准@9308]

如果您已经拥有所有依赖项,则控制台将返回: [待校准@9309]

#All required rosdeps installed successfully

包在package.xml文件中声明其依赖关系 (您将在下一个教程中了解有关包的更多信息)。此命令遍历这些声明并安装丢失的声明。您可以在另一个教程 (即将推出) 中了解更多关于 rosdep 的信息。 [待校准@9310]

5使用colcon构建工作区 [待校准@9311]

从工作区 ( dev_ws ) 的根目录,您现在可以使用以下命令构建包: [待校准@9312]

colcon build

控制台将返回以下消息: [待校准@9313]

Starting >>> turtlesim
Finished <<< turtlesim [5.49s]

Summary: 1 package finished [5.58s]

注解

[需手动修复的语法] colcon build 的其他有用论据: [待校准@9314]

  • [需手动修复的语法]``--packages-up-to`` builds你想要的包,加上它所有的依赖,但不是整个工作空间 (节省时间) [待校准@9315]

  • [需手动修复的语法]``--symlink-install`` saves你不必重建每次调整python脚本 [待校准@9316]

  • --event-handlers console_direct+ shows console output while building (can otherwise be found in the log directory) [待校准@9317]

构建完成后,在工作区根目录 (“~/dev_ws”) 中输入 ls ,您将看到colcon创建了新目录: [待校准@9318]

build  install  log  src

[需手动修复的语法] install 目录是工作区的设置文件所在的位置,您可以使用它来源文件覆盖图。 [待校准@9319]

6来源覆盖 [待校准@9320]

在采购覆盖层之前,打开一个新的终端非常重要,该终端与构建工作区的终端分开。在您构建的同一个终端中采购一个覆盖图,或者在源文件中构建一个覆盖图,可能会产生复杂的问题。 [待校准@9321]

在新终端中,将您的主ROS 2环境作为 “衬底” 源文件,这样您就可以在其 “顶部” 构建覆盖: [待校准@9322]

source /opt/ros/foxy/setup.bash

进入工作区的根目录: [待校准@9324]

cd ~/dev_ws

在根目录中,源文件覆盖: [待校准@9325]

. install/local_setup.bash

注解

采购覆盖层的 local_setup 只会将覆盖层中可用的包添加到您的环境中。 setup 源文件的覆盖图及其创建的衬底,允许您利用两个工作区。 [待校准@9326]

所以,采购主要ROS安装的 setup 然后 dev_ws 覆盖的 local_setup ,像你刚才相同只是采购 dev_wssetup ,因为这包括它被创造出来的底层环境。 [待校准@9327]

现在,您可以从叠加层运行 turtlesim 包: [待校准@9328]

ros2 run turtlesim turtlesim_node

但是你怎么知道这是正在运行的覆盖turtlesim,而不是你的主安装的turtlesim? [待校准@9329]

让我们在叠加层中修改turtlesim,以便您可以看到效果: [待校准@9330]

7修改覆盖 [待校准@9333]

您可以通过编辑turtlesim窗口上的标题栏来修改叠加层中的 turtlesim 。为此,请在 “~/dev_ws/src/ros_tutorials/turtlesim/src” 中找到 turtle_frame.cpp 文件。使用您喜欢的文本编辑器打开 turtle_frame.cpp[待校准@9334]

在第52行,您将看到函数 “setwindowtitle ( "TurtleSim" ); ``. Change the value `` ” TurtleSim “ `` to `` ” MyTurtleSim “”,并保存文件。 [待校准@9335]

回到你之前运行 colcon build 的第一个终端,然后再次运行它。 [待校准@9336]

返回到第二个终端 (其中覆盖是源文件d),然后再次运行turtlesim: [待校准@9337]

ros2 run turtlesim turtlesim_node

你会在turtlesim窗口上看到标题栏,上面写着 “MyTurtleSim”。 [待校准@9338]

../../_images/overlay.png

即使您的主ROS 2环境早些时候在此终端中是源文件,您的 dev_ws 环境的覆盖优先于衬底的内容。 [待校准@9339]

要确保您的衬底仍然完好无损,请打开一个全新的终端,只为您的ROS 2安装提供源文件。再次运行turtlesim: [待校准@9340]

ros2 run turtlesim turtlesim_node
../../_images/underlay.png

您可以看到覆盖层中的修改实际上并没有影响衬底中的任何内容。 [待校准@9341]

总结

在本教程中,您将主ROS 2发行版安装源文件作为参考底图,并通过在新工作区中克隆和构建包来创建覆盖图。覆盖物被放在路径的前面,并且优先于衬底,就像你用你的改良turtlesim看到的那样。 [待校准@9342]

建议在处理少量包时使用覆盖,因此您不必将所有内容放在同一个工作区中,也不必在每次迭代时重建一个巨大的工作区。 [待校准@9343]

下一步

既然你已经了解了创建、构建和采购自己的工作区背后的细节,你就可以学习如何 create your own packages 了。 [待校准@9344]