警告

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

使用 rosdep 管理依赖关系

目标 使用 rosdep.

辅导水平: 中级

时间 5 分钟

作者: Steve Macenski史蒂夫-马肯斯基

本教程将介绍如何使用 rosdep.

什么是 rosdep?

rosdep 是 ROS 的依赖性管理工具,可用于 ROS 软件包和外部库。 rosdep 是一种命令行工具,用于识别和安装依赖项,以构建或安装软件包。它可以在以下情况下调用

  • 构建工作区,并需要适当的依赖关系来构建其中的软件包

  • 安装软件包(例如 苏都 适切 安装 ros-foxy-demo-nodes-cpp) 检查执行所需的依赖项

  • 以及更多!

它可以在单个软件包或软件包目录(如工作区)上运行。

关于 package.xml 文件的小知识

包装的 package.xml 文件包含一组依赖项。该文件中的依赖项通常称为 "rosdep keys"。它们用以下标记表示 <依赖>;, <test_depend>;, 执行依赖关系;, 构建依赖关系;构建_导出_依赖>;.它们说明了在什么情况下需要每个依赖项。

  • 对于仅用于测试代码的依赖项(如 测试),使用 测试依赖.

  • 对于仅在构建代码时使用的依赖项,请使用 构建依赖.

  • 对于代码导出头所需的依赖项,使用 构建输出依赖.

  • 对于仅在运行代码时使用的依赖项,请使用 执行依赖.

  • 对于混合用途,请使用 取决,其中包括构建、导出和执行时的依赖关系。

这些依赖关系被手动填充到 package.xml 文件,并应详尽无遗地列出该软件包所需的所有非内置库和软件包。

rosdep 如何工作?

rosdep 将检查 package.xml 或特定软件包的文件,并找到其中存储的 rosdep 密钥。然后将这些密钥与中央索引相互参照,在各种软件包管理器中找到相应的 ROS 软件包或软件库。最后,一旦找到软件包,它们就会被安装并准备就绪!

中心指数被称为 rosdistro其中 可在此查阅.我们将在下一节进一步探讨。

如何知道在 package.xml 中输入哪些键?

问得好,很高兴你这么问!

对于 ROS 软件包(例如 导航仪 2_bt_navigator),您只需输入软件包的名称即可。所有已发布的 ROS 软件包列表可在 rosdistro<distro>/distribution.yaml 为您指定的 ROS 发行版

对于非 ROS 软件包系统依赖,我们需要找到特定库的密钥。一般来说,有两个文件值得关注: rosdep/base.yamlrosdep/python.yaml. base.yaml 一般包含 适切 系统依赖性。 python.yaml 一般包含 核心 python 依赖项。

要查找密钥,请在此文件中搜索您的资料库,然后在 yaml 包含它。这是在 package.xml 锉刀

例如,假设一个软件包依赖于 源代码 因为它是一款注重文档质量的优秀软件(提示提示)。我们会搜索 base.yaml 对于 源代码 和遇到:

源代码:
  拱门: [源代码]
  菜鸟: [源代码]
  联邦帽: [源代码]
  freebsd: [源代码]
  gentoo: [app-doc/doxygen]
  宏港: [源代码]
  尼克斯: [源代码]
  开放式嵌入: [doxygen@meta-oe]
  开用: [源代码]
  rhel: [源代码]
  乌托邦: [源代码]

这意味着我们的 rosdep 密钥是 源代码,在不同操作系统的软件包管理器中会解析为不同的名称,以便安装。

如果我的图书馆不在 rosdistro 中怎么办?

如果您的图书馆不在 rosdistro现在,您可以体验开源软件开发的伟大之处:您可以自己添加!对 rosdistro 的拉取请求通常会在一周内顺利合并。

详细说明见此处 了解如何贡献新的 rosdep 密钥。如果由于某种原因无法公开贡献这些密钥,也可以 fork rosdistro 并维护一个备用索引以供使用。

如何使用 rosdep 工具?

现在我们对 rosdep, package.xmlrosdistro然后,我们就可以使用工具本身了!首先,如果这是第一次使用 rosdep,必须通过以下方式进行初始化:

苏都 rosdep 启动 更新

这将初始化 rosdep 和 更新 将更新本地缓存的 rosdistro 索引。最好 更新 rosdep,以获取最新索引。

最后,我们可以运行 rosdep 安装 来安装依赖包。通常情况下,这需要在包含许多软件包的工作区中运行一次调用,以安装所有依赖包。如果工作区的根目录为 来源 包含源代码。

rosdep 安装 --从路径 来源 -y --忽略源代码

分解一下:

  • --从路径 来源 指定检查 package.xml 文件来解决

  • -y 是指对软件包管理器的所有提示都默认为 "是",以便在没有提示的情况下进行安装

  • --忽略源代码 意味着如果软件包本身也在工作区中,即使存在 rosdep 密钥,也会忽略安装依赖项。

还有其他参数和选项可供选择。使用 rosdep -h 去看他们。