首页 > 其他分享 >Intermediate-用rosdep来管理依赖

Intermediate-用rosdep来管理依赖

时间:2023-06-04 19:45:29浏览次数:61  
标签:xml 依赖 package doxygen Intermediate rosdep rosdistro

目标:使用rosdep来管理外部的依赖

什么是rosdep?

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

1)构建一个工作区,并需要适当的依赖项来构建内的包。

2)安装软件包(例如sudo ros-rolling-demo-nodes-cpp)以检查执行所需的依赖关系

它能够在单个包或包目录(例如工作空间)上工作。

有关package.xml文件

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

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

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

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

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

对于混合用途,请使用dependent,它涵盖了构建、导出和执行时间依赖关系。

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

rosdep怎样工作?

rosdep将检查其路径中的package.xml文件或特定包,并查找存储在其中的rosdep keys。然后将这些密钥与中心索引进行交叉引用,以在各种包管理器中找到适当的ROS包或软件库。最后,一旦找到包,它们就安装好了,可以使用了!中心索引被称为rosdistro,可以在这里找到。我们将在下一节中对此进行更多探讨。

我怎样知道什么key应该放到我的package下面

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

对于非ROS包系统依赖项,我们需要找到特定库的密钥。通常,有两个感兴趣的文件:rosdep/base.yaml和rosdep/python.yaml.base.yaml通常包含apt系统依赖项。python.yaml通常包含pip-python依赖项。要找到密钥,请在此文件中搜索库,并在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密钥是doxygen,它将解析为不同操作系统的包管理器中的各种名称以进行安装。

如果我的库不再rosdistro中呢?

如果你的库不在rosdistro,你可以体验开源软件开发的伟大之处:你可以自己添加它!rosdistro的拉取请求通常在一周内很好地合并。Detailed instructions may be found here for how to contribute new rosdep keys.如果由于某种原因,这些可能无法公开提供,则可以派生rosdistro并维护备用索引以供使用。

我怎样使用rosdep工具呢?

既然我们已经对rosdep、package.xml和rosdistro有了一些了解,我们就可以使用该实用工具了!首先,如果这是第一次使用rosdep,则必须通过以下方式对其进行初始化:

sudo rosdep init
rosdep update

这将初始化rosdep,更新将更新本地缓存的rosdistro索引。偶尔更新rosdep以获取最新索引是个好主意。

最后,我们可以运行rosdep-install来安装依赖项。通常,这是在一个工作区上运行的,在一个调用中有许多包来安装所有依赖项。如果在工作区的根目录src中包含源代码,则对的调用将显示如下。

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

--from paths src指定检查package.xml文件以解析其密钥的路径

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

--ignore-src意味着忽略安装依赖项,即使存在rosdep键,如果包本身也在工作区中。

还有其他可用的参数和选项。使用rosdep-h查看它们。

 

标签:xml,依赖,package,doxygen,Intermediate,rosdep,rosdistro
From: https://www.cnblogs.com/gary-guo/p/17456169.html

相关文章

  • Spring Bean生命周期之三级缓存循环依赖
    目录1三级缓存1.1引言1.2三级缓存各个存放对象1.3解决循环依赖条件1.3.1解决循环依赖条件1.3.2Sprin中Bean的顺序1.3.3更改加载顺序1.3.3.1构造方法依赖(推荐)1.3.3.2参数注入1.3.3.3@DependsOn(“xxx”)1.3.3.4BeanDefinitionRegistryPostProcessor接口1.3.4执行顺......
  • 《面试1v1》Spring循环依赖
    我是javapub,一名Markdown程序员从......
  • 升级spring boot异常:spring循环依赖
    问题从springboot2.2.9升级到2.6.2版本后,项目启动后访问报错Thedependenciesofsomeofthebeansintheapplicationcontextformacycle.serviceCollectionIdCacheService┌─────┐|serviceProductInfoProviderImpl↑↓|serviceOfflineProviderImpl↑......
  • vue-element-admin安装依赖报错问题
    vue-element-admin安装依赖的时候报以下错误npmERR!codeENOENTnpmERR!syscallspawngitnpmERR!pathgitnpmERR!errno-4058npmERR!enoentAnunknowngiterroroccurrednpmERR!enoentThisisrelatedtonpmnotbeingabletofindafilenpmERR!enoentnpmE......
  • [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject
    本文引用:https://www.cnblogs.com/willick/p/3223042.html为什么需要依赖注入在[ASP.NETMVC小牛之路]系列的理解MVC模式文章中,我们提到MVC的一个重要特征是关注点分离(separationofconcerns)。我们希望应用程序的各部分组件尽可能多的相互独立、尽可能少的相互依赖。我们的......
  • Go 开源库运行时依赖注入框架 Dependency injection
    Dependencyinjection一个Go编程语言的运行依赖注入库。依赖注入是更广泛的控制反转技术的一种形式。它用于增加程序的模块化并使其具有可扩展性。实例展示(HighAPI):typeAstruct{ Namestring}funcNewA()*A{ r:=rand.New(rand.NewSource(time.Now().UnixNano())......
  • 国产麒麟系统软件依赖包地址
    机器环境实例uname-aLinuxecs-40854.19.90-17.5.ky10.aarch64#1SMPFriAug713:35:33CST2020aarch64aarch64aarch64GNU/Linux麒麟v10官方apt源、rpm包下载地址https://update.cs2c.com.cn/NS/V10/V10SP1/os/adv/lic/base/aarch64/Packages/http://archive.kyli......
  • golang依赖注入工具digo
    golang依赖注入工具digo工具地址:https://github.com/werbenhu/digo特性使用注释中的注解自动代码生成自动检测循环依赖编译时期依赖注入自动初始化支持实例组的管理快速开始更多示例请参考:examples编写代码和注解packagemainimport( "log" "github.com/werbe......
  • IDEA 创建JavaWeb项目(不依赖 springboot)手动整合 SSM框架
    目录 1.创建一个Maven项目2.创建webapp和WEB-INF目录即可3.设置web.xml文件和web文件目录4.导入相关ssm框架的pom依赖文件5.创建对应的包结构:6.添加配置文件(配置mybatis、spring、springMvc等配置文件)7.web.xml配置文件8. 配置本地Tomcat运行9.打包发布1.创建一个Mav......
  • Spectre.Console-处理依赖注入
    引言之前说的做自动记录Todo执行过程中消耗的时间的Todo项目,由于想持续保持程序执行,就放弃了Spectre.Console.Cli,后来随着命令越来越多,自己处理觉得很是麻烦,想了想要不试试怎么将这个东西嵌入程序,然后手动传递参数?本文完整代码可以从项目中获取。说干就干,研究了一下,发现......