ROS2依赖管理(使用rosdep)

使用rosdep管理外部依赖

什么是rosdep?

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

       ①构建工作空间并需要适当的依赖项来构建其中的包

       ②安装软件包(例如 sudo apt install ros-foxy-demo-nodes-cpp)以检查执行所需的依赖项

       ③其他情况

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

package.xml文件简介

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

    ①对于仅用于测试代码的依赖项(例如 gtest),请使用 test_depend。

    ②对于仅用于构建代码的依赖项,请使用 build_depend。

    ③对于代码导出的标头所需的依赖项,请使用 build_export_depend。

    ④对于仅在运行代码时使用的依赖项,请使用 exec_depend。

    ⑤出于混合目的,请使用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. Panda-admin 37 文章
  2. 解弘艺 17 文章
  3. 高曾谊 16 文章
  4. 旺仔牛奶opo 15 文章
  5. 胡中天 14 文章
  6. LH 14 文章
  7. 罗柏荣 13 文章
  8. 林晨 12 文章