警告
您正在阅读的 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.yaml
和 rosdep/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.xml
和 rosdistro
然后,我们就可以使用工具本身了!首先,如果这是第一次使用 rosdep
,必须通过以下方式进行初始化:
苏都 rosdep 启动 更新
这将初始化 rosdep 和 更新
将更新本地缓存的 rosdistro 索引。最好 更新
rosdep,以获取最新索引。
最后,我们可以运行 rosdep 安装
来安装依赖包。通常情况下,这需要在包含许多软件包的工作区中运行一次调用,以安装所有依赖包。如果工作区的根目录为 来源
包含源代码。
rosdep 安装 --从路径 来源 -y --忽略源代码
分解一下:
--从路径 来源
指定检查package.xml
文件来解决-y
是指对软件包管理器的所有提示都默认为 "是",以便在没有提示的情况下进行安装--忽略源代码
意味着如果软件包本身也在工作区中,即使存在 rosdep 密钥,也会忽略安装依赖项。
还有其他参数和选项可供选择。使用 rosdep -h
去看他们。