【ROS】package.xml文件解析

2023-05-16

文章目录

文章目录

前言

一、基本格式

1.基本结构

2.必要标签

3.依赖关系

二、Metapackage包

总结


前言

ros每个功能包中都有一个包清单,它是一个名为package.xml的XML 文件,它必须包含在任何符合 catkin 的包的根文件夹中。此文件定义有关包的属性,例如包名称、版本号、作者、维护者以及对其他 catkin 包的依赖性。

package.xml文件有自己特有的数据书写标签,而它是xml格式文件,大家可能不太熟悉这个格式,其中的标签也比较复杂,本文对这些标签的作用进行解析,并阐明Metapackage元包的作用。 


一、基本格式

1.基本结构

每个 package.xml 文件都有<package>标签作为根标签文档,格式如下:

<package format="2">

</package>

2.必要标签

这些必要标签是在<package>标签中嵌套的标签集,以使包清单信息完整,主要是作者和关于包的一些描述:

  • <name> - 包的名称

  • <version> - 包的版本号(必须是 3 个点分隔的整数)

  • <description> - 包内容的描述

  • <maintainer> - 维护包的人员的姓名

  • <license> - 发布代码所依据的软件许可证(例如 GPL、BSD、ASL)

  • <url> - 包信息的 URL,通常是 ros.org 上的 wiki 页面

  • <author> - 包的作者

<package format="2">
  <name>foo_core</name>
  <version>1.2.4</version>
  <description>
  This package provides foo capability.
  </description>
  <maintainer email="ivana@osrf.org">Ivana Bildbotz</maintainer>
  <license>BSD</license>
</package>

3.依赖关系

依赖关系是用来说明该功能包编译或运行时需要依赖哪些其他的功能包,可以有六种类型的依赖关系:

  • Build Tool Dependencies指定构建功能包系统的工具。通常,唯一需要的构建工具是 catkin。在交叉编译场景中,构建工具依赖项适用于执行编译的体系结构。

  • Build Dependencies指定编译这个包时需要哪些包。当构建时需要这些包中的任何文件时,就会出现这种情况。当这些包在 CMake 中被放到find_package()中时,就需要把这些包写在build_dependencies标签中。在交叉编译场景中,构建依赖项是针对目标架构的。

  • Build Export Dependencies指定需要哪些包来针对此包构建库。当您在此包的公共标头中传递地包含它们的标头时就是这种情况(尤其是当这些包在 CMake 的catkin_package()中声明为 (CATKIN_)DEPENDS 时)。

  • Execution Dependencies指定运行此包中的代码需要哪些包。当您依赖此包中的共享库时就是这种情况(尤其是当这些包在 CMake 的catkin_package()中声明为 (CATKIN_)DEPENDS 时)。

  • Test Dependencies项仅指定单元测试的附加依赖项他们不应该复制任何已经提到的构建或运行依赖项的依赖项,基本用不着

  • Documentation Tool Dependencies指定此包生成文档所需的文档工具,基本用不着

这六个关系依次对应标签:

  • <buildtool_depend>

  • <build_depend>

  • <build_export_depend>

  • <exec_depend>

  • <test_depend>

  • <doc_depend>

因为<build_depend>、<build_export_depend>、<exec_depend>经常一起使用,他们的依赖功能包往往是一样的(如果使用catkin_create_pkg创建功能包时就会发现系统会自动为所有依赖功能包添加这三个标签),所以可以使用<depend>标签替代这三个标签,以下两个代码是等价的:

<package format="2">
  <name>foo_core</name>
  <version>1.2.4</version>
  <description>
    This package provides foo capability.
  </description>
  <maintainer email="ivana@willowgarage.com">Ivana Bildbotz</maintainer>
  <license>BSD</license>

  <url>http://ros.org/wiki/foo_core</url>
  <author>Ivana Bildbotz</author>

  <buildtool_depend>catkin</buildtool_depend>

  <depend>roscpp</depend>
  <depend>std_msgs</depend>
  <depend>message_generation</depend>
  <depend>message_runtime<depend>
  <depend>rospy</depend>

  <test_depend>python-mock</test_depend>

  <doc_depend>doxygen</doc_depend>
</package>
<package format="2">
  <name>foo_core</name>
  <version>1.2.4</version>
  <description>
    This package provides foo capability.
  </description>
  <maintainer email="ivana@willowgarage.com">Ivana Bildbotz</maintainer>
  <license>BSD</license>

  <url>http://ros.org/wiki/foo_core</url>
  <author>Ivana Bildbotz</author>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>roscpp</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>message_runtime</build_depend>
  <build_depend>rospy</build_depend>

  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>
  <build_export_depend>message_generation</build_export_depend>
  <build_export_depend>message_runtime</build_export_depend>
  <build_export_depend>rospy</build_export_depend>

  <exec_depend>roscpp</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <exec_depend>message_generation</exec_depend>
  <exec_depend>message_runtime</exec_depend>
  <exec_depend>rospy</exec_depend>

  <test_depend>python-mock</test_depend>

  <doc_depend>doxygen</doc_depend>
</package>

二、Metapackage包

Metapackage包本身没什么意义,它是负责管理其他在Metapackage中的包,Metapackage是一个功能包集,是把一些相近的功能模块、 软件包放到一起,比如ROS中一些常见地功能包集:

 Metapackage中的.xml文件是有固定的形式的如下:

<export>                           #表示这是一个Metapackage
  <metapackage/>
  <architecture_independent/>            
</export>                      
##下面均是MetaPackage所管理(依赖)的所有的其他的package
<exec_depend>your_custom_msgs</exec_depend>
<exec_depend>your_server_node</exec_depend>
<exec_depend>your_utils</exec_depend>

Metapackage中的CMakeList.txt文件是有固定的形式的如下,所有的Metapackage中的CMakeList.txt文件均是这样:

cmake_minimum_required(VERSION 2.8.3)
project(exploration_master)
find_package(catkin REQUIRED)
catkin_metapackage()


总结

package.xml文件是每个功能包必须包含的文件,它描述了功能包的主要功能和作者信息,以及编译和运行功能包需要依赖的其他功能包,而它是xml格式文件,大家可能不太熟悉这个格式,其中的标签也比较复杂,本篇文章对其进行了详细解析。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ROS】package.xml文件解析 的相关文章

随机推荐

  • UCOS学习(七)——信号量详解

    信号量 信号量简介信号量保护共享资源举个栗子 xff1a 如果不使用信号量信号量解决公共资源问题创建信号量 xff1a 信号量实现任务同步总结 信号量简介 信号量像是一种上锁机制 xff0c 代码必须获得对应的钥匙才能继续执行 xff0c
  • Altium Designer(AD)的简易使用

    一 绘制原理图 原理图库 首先来说明原理图的概念 根据百度百科 xff0c 原理图 xff0c 顾名思义就是表示电路板上各器件之间连接原理的图表 也就是表示芯片上的引脚连接什么元件 xff0c 各个元件谁和谁相连 xff0c 电源电压的大小
  • STM32CubeIDE---HAL库PWM使用速记

    一 如何计算 理论分析 xff1a HAL库函数之呼吸灯 PWM波 简书 jianshu com 预分频系数 PSC 自动重装载值 ARR 捕获 比较寄存器值 CCR 频率计算 xff1a 定时器频率 PSC 43 1 ARR 43 1 占
  • mac常用命令

    mac清除电脑DNS缓存 sudo dscacheutil flushcache
  • IMU初介绍及里程计相关补充

    IMU原理 xff1a 以牛顿力学定律为基础 xff0c 通过测量载体在惯性参考系的加速度 xff0c 将它对时间进行积分 xff0c 且把它变换到导航坐标系中 xff0c 就能够得到在导航坐标系中的速度 偏航角和位置等信息 IMU xff
  • C语言变量的定义与声明,为什么全局变量不能赋值

    文章目录 一 对C语言程序的一些补充二 定义域声明2 1 什么是变量2 2 如何定义变量2 3 为什么要定义变量2 4 定义变量的本质2 5 变量声明的本质2 6 定义和声明的区别 三 全局变量无法赋值 一 对C语言程序的一些补充 对于一个
  • 野火PID上位机通信移植

    野火PID上位机通信移植 一 简介 在调试pid参数的时候 xff0c 需要用到上位机 xff0c 这里选用 野火多功能调试助手 使用调试助手 xff0c 需要下位机与上位机之间的通信协议 xff0c 下载野火关于电机的相关例程 xff0c
  • 实验报告数字图像的基本操作

    一 实验目的 了解Matlab的基本功能及操作方法练习图像读写和显示函数的使用方法掌握如何利用MATLAB来获取图像的大小 颜色 高度 宽度等等相关信息熟悉常用的图像文件格式与格式转换 xff1b 二 实验环境 PC计算机MatLab软件
  • 【meArm机械臂】第二篇·Arduino控制程序

    系列文章目录 meArm机械臂 第一篇 结构设计及搭建 meArm机械臂 第二篇 Arduino控制程序 文章目录 系列文章目录前言一 测试程序1 单个电机测试程序2 四舵机控制测试程序3 极限位置测量 二 基本控制程序三 最终控制程序总结
  • 【树莓派4B】安装Ubuntu Mate20.04+ROS Noetic+使用电脑自带的xrdp和VNC进行PC端远程控制

    目录 前言 一 烧录Ubuntu Mate20 04 1 下载Ubuntu Mate 20 04 2 格式化SD卡并烧录系统 3 打开SSH功能 二 配置Ubuntu环境 1 初次开机进行简单的配置 2 更换国内源 3 更新软件列表和软件
  • 【STM32】STM32F103C8T6+L298N通过PWM控制直流电机转速

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • 【ROS】ROS上位机使用Serial库和boost::asio库与STM32进行USART通讯

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • 【STM32】STM32F103C8T6使用外部中断法和输入捕获法进行编码器测速

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • 【STM32】STM32F103C8T6实现直流电机速度PID控制

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • Linux配置Supervisor 配置遇到的坑

    在linux中web 应用部署到线上后之后发现退出终端后网站就无法访问了 所以需要用Supervisor来守护进程 xff0c 它可以保证应用一直处于运行状态 xff0c 在遇到程序异常 报错等情况 xff0c 导致 web 应用终止时 x
  • 【基于MATLAB的数字图像处理】第四章·图像增强

    系列文章 基于MATLAB的数字图像处理 第一章 绪论 基于MATLAB的数字图像处理 第二章 视觉系统与图像处理系统 基于MATLAB的数字图像处理 第三章 基本图像变换 基于MATLAB的数字图像处理 第四章 图像增强 基于MATLAB
  • 【ROS】学习路线与方法-个人感悟篇

    文章目录 目录 文章目录 前言 视频学习 书籍学习 个人建议 前言 前前后后 xff0c 对于ROS的学习已经很多遍了 xff0c 可以说走的弯路有点多 xff0c 导致浪费了很多时间 xff0c 其实ROS不应该是一个专门需要去学习的东西
  • 【基于FreeRTOS的STM32F103系统】Heap_4内存管理机制程序详解

    系列文章目录 基于FreeRTOS的STM32F103系统 简介及官方文件移植 基于FreeRTOS的STM32F103系统 编写FreeRTOS程序 基于FreeRTOS的STM32F103系统 内存管理及任务调度 基于FreeRTOS的
  • 【问题解决】虚拟机打开gazebo黑屏、闪退、模型加载不出来

    1 缺少模型库 可以在github上下载模型库 xff0c 但是速度极慢 xff0c 因为服务器在国外 此处提供快速下载方法 xff0c 通过码云快速git clone cd gazebo git clone https gitee com
  • 【ROS】package.xml文件解析

    文章目录 文章目录 前言 一 基本格式 1 基本结构 2 必要标签 3 依赖关系 二 Metapackage包 总结 前言 ros每个功能包中都有一个包清单 xff0c 它是一个名为package xml的XML 文件 xff0c 它必须包