ROS2依赖管理(使用rosdep)

使用rosdep管理外部依赖

什么是rosdep?

    rosdep 是 ROS 的依赖管理实用程序,可以与 ROS 包和外部库一起使用。 rosdep 是一个命令行实用程序,用于识别和安装依赖项以构建或安装包。 在以下情况下可以或被调用:

  1. 构建工作空间并需要适当的依赖项来构建其中的包
  1. 安装软件包(例如 sudo apt install ros-foxy-demo-nodes-cpp)以检查执行所需的依赖项
  1. 其他情况

它能够处理单个包或包目录(例如workspace)

package.xml文件简介

    包的 package.xml 文件包含一组依赖项。 此文件中的依赖项通常称为“rosdep keys”。 这些在标签 <depend>、<test_depend>、<exec_depend>、<build_depend> 和 <build_export_depend> 中表示。 它们指定在什么情况下需要每个依赖项。

  1. 对于仅用于测试代码的依赖项(例如 gtest),请使用 test_depend。
  1. 对于仅用于构建代码的依赖项,请使用 build_depend。
  1. 对于代码导出的标头所需的依赖项,请使用 build_export_depend。
  1. 对于仅在运行代码时使用的依赖项,请使用 exec_depend。
  1. 出于混合目的,请使用depend,它涵盖了构建、导出和执行时间的依赖关系。

这些依赖项由包的创建者手动填充到 package.xml 文件中,并且应该是它所需的任何非内置库和包的详尽列表。

rosdep如何工作?

    rosdep 检查其路径中的 package.xml 文件或特定包,并查找存储在其中的 rosdep keys。 然后将这些keys与中央索引进行对比,以在各种包管理器中找到适当的 ROS 包或软件库。 最后,一旦找到包,它们就会被安装,然后就可以开始使用了。

    中央索引称为 rosdistro,可在此处找到。 我们将在下一节中对此进行更多探讨。

package.xml中应该如何写keys?

    对于 ROS 包(例如 nav2_bt_navigator),您可以简单地放置包的名称。 您可以在 <distro>/distribution.yaml 中找到 rosdistro 中所有已发布 ROS 包的列表,以用于您给定的 ROS 发行版。

    对于非 ROS 包系统依赖项,我们需要找到特定库的键。 通常,有两个感兴趣的文件:rosdep/base.yaml 和 rosdep/python.yaml。 base.yaml 通常包含 apt 系统依赖项。 python.yaml 通常包含 pip python 依赖项。

    要查找keys,请在此文件中搜索您的库(最好是 ctrl+F)并在 yaml 中找到包含它的名称。 这是放入 package.xml 文件的关键。

    例如,假设一个包依赖于 doxygen,因为它是一个很棒的软件,它关心质量文档(提示)。 我们会在 base.yaml 中搜索 doxygen 并找到:

doxygen:

  arch: [doxygen]

  debian: [doxygen]

  fedora: [doxygen]

  freebsd: [doxygen]

  gentoo: [app-doc/doxygen]

  macports: [doxygen]

  nixos: [doxygen]

  openembedded: [doxygen@meta-oe]

  opensuse: [doxygen]

  rhel: [doxygen]

  ubuntu: [doxygen]

这意味着我们的 rosdep key是 doxygen,它将解析为不同操作系统的包管理器中的各种名称以进行安装。

如果需要的库不在rosdistro中怎么办?

    如果您的库不在 rosdistro 中,您可以体验开源软件开发的伟大之处:您可以自己添加! rosdistro 的拉取请求通常会在一周内很好地合并。

    有关如何贡献新的 rosdep key的详细说明,请参见此处。 如果由于某种原因这些可能无法公开贡献,则可以fork rosdistro 并维护备用索引以供使用。

如何使用rosdep工具?

现在我们对 rosdep、package.xml 和 rosdistro 有了一些了解,我们可以使用该实用程序本身了! 首先,如果这是第一次使用 rosdep,则必须通过以下方式对其进行初始化:

sudo rosdep init

rosdep update

这将初始化 rosdep 并且 update 将更新本地缓存的 rosdistro 索引。 

最后,我们可以运行 rosdep install 来安装依赖项。 通常,这是在一个包含许多包的工作区上运行的,只需一次调用即可安装所有依赖项。 如果在工作空间的根目录中,目录 src 包含源代码,则应该进行如下操作:

rosdep install --from-paths src -y --ignore-src

rosdistro项目解析

经过上面的讲解我们知道,rosdistro是维护rosdep索引的项目。下面打开此项目链接,一探究竟。

打开项目网页后我们可以看到其中包含两个文件,base.yaml包含的是apt工具管理的依赖。而python.yaml包含的是pip工具管理的依赖。

attachments-2022-07-ky4rOADt62de560b1c549.png

打开python.yaml文件,可以看到,里面描述的都是pip管理的工具包的索引,这些都可以写进ros2工程的依赖文件package.xml,作为ros2的第三方库来进行使用,大大提升ros2的潜能。

attachments-2022-07-gpjKPoXG62de567d18019.png

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
尹懋龙
尹懋龙

10 篇文章

作家榜 »

  1. 尹懋龙 10 文章
  2. LH 9 文章
  3. mingze 8 文章
  4. admin 6 文章
  5. hcshen 5 文章
  6. Marco Legend 4 文章
  7. 旺仔牛奶opo 3 文章
  8. Hao98 2 文章