什么是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工具管理的依赖。
打开python.yaml文件,可以看到,里面描述的都是pip管理的工具包的索引,这些都可以写进ros2工程的依赖文件package.xml,作为ros2的第三方库来进行使用,大大提升ros2的潜能。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!