首页 > 代码库 > ROS学习之package.xml

ROS学习之package.xml

 

目录

  1. 概述
  2. 格式2(推荐)
    1. 基本结构
    2. 所需标签
    3. 依赖关系
    4. Metapackages
    5. 附加标签
  3. 格式1(遗产)
    1. 基本结构
    2. 所需标签
    3. 构建,运行和测试依赖关系
    4. Metapackages
    5. 附加标签

概述

软件包清单是一个XML文件名为package.xml中必须包括与任何兼容包的根文件夹。此文件定义有关包的属性,例如包名称,版本号,作者,维护者以及其他catkin包的依赖关系。请注意,这个概念类似于传统rosbuild构建系统中使用manifest.xml文件

您的系统包依赖关系在package.xml中声明如果缺少或不正确,您可能可以从源代码构建,并在自己的机器上运行测试,但是当发布到ROS社区时,您的软件包将无法正常工作。其他依赖于这些信息来安装他们使用您的软件包所需的软件

 

格式2(推荐)

这是新软件包的推荐格式。还建议将较旧的格式1包迁移为格式2.有关从格式1迁移到格式2的说明,请参阅catkin API文档中的从格式1迁移到格式2 

格式2的完整文档可以在catkin API文档中找到更多信息可以在REP 140 - Package Manifest Format Two Specification中找到

 

基本结构

每个package.xml文件都有<package>标签作为根标记文件。

<package format =“2”>

</ package>

所需标签

有一小部分标签需要嵌套在<package>标签中,以使包清单完整。

  • <name> - 包的名称

  • <version> - 包的版本号(需要3个点分隔的整数)

  • <description> - 包装内容的描述

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

  • <license> - 发布代码的软件许可证(例如GPL,BSD,ASL)。

例如,这里是一个名为foo_core的虚构包的包清单 

<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> 

依赖关系

具有最小标签的包清单不指定对其他包的任何依赖关系。软件包可以有六种依赖关系:

  • 构建依赖关系指定构建此包所需的包。在构建时需要这些软件包中的任何文件时才是这种情况。这可以包括在编译时的头文件,链接到这些包的库文件或在构建时需要任何其他资源(特别是当这些包在CMake 中是find_package()时)。在交叉编译场景中,构建依赖关系针对目标体系结构。

  • 构建导出依赖关系指定根据此包构建库所需的包。当您将此头文件包含在此包中的公用头文件中时(特别是当CMake中的catkin_package()声明为(CATKIN_DEPENDS 时),就是这种情况。

  • 执行依赖关系指定在此程序包中运行代码所需的软件包。当您依赖此程序包中的共享库(尤其是当CMake 中的catkin_package()声明为(CATKIN_DEPENDS 时),就是这种情况。

  • 测试依赖关系仅指定单元测试的附加依赖项。他们不应该将已经提到的任何依赖关系重复为构建或运行依赖关系。

  • 构建工具依赖关系指定此软件包需要构建自身的构建系统工具。通常唯一的构建工具是catkin。在交叉编译场景中,构建工具依赖关系用于执行编译的架构。

  • 文档工具依赖关系指定此软件包需要生成文档的文档工具。

这六种依赖关系使用以下相应的标签来指定:

  • <depend>指定依赖关系是构建,导出和执行依赖关系。这是最常用的依赖标记。

  • <buildtool_depend>

  • <build_depend>

  • <build_export_depend>

  • <exec_depend>

  • <test_depend>

  • <doc_depend>

所有包至少有一个依赖关系,构建工具依赖于catkin,如下例所示。

<package>
  <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>

  <buildtool_depend>catkin</buildtool_depend>
</package>
指定构建,执行,测试和文档依赖关系的更现实的示例可能如下所示。
<package>
  <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>

  <build_depend>message_generation</build_depend>

  <exec_depend>message_runtime</exec_depend>
  <exec_depend>rospy</exec_depend>

  <test_depend>python-mock</test_depend>

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

关于依赖关系的更多细节可以在这里的 catkin API文档中找到

Metapackages

将多个软件包分组为单个逻辑软件包通常很方便。这可以通过metapackages来实现元包是在package.xml中具有以下导出标记的普通包:

 <export>
   <metapackage />
 </ export>

除了所要求的<buildtool_depends>的依赖,元数据包只能有在包上运行依赖关系,其中它们组。

另外,metapackage有一个必需的,样板CMakeLists.txt文件:

cmake_minimum_required(VERSION 2.8.3)
project(<PACKAGE_NAME>)
find_package(catkin REQUIRED)
catkin_metapackage()

注意:将<PACKAGE_NAME>替换为metapackage的名称。

 

附加标签

  • <url> - 有关该软件包信息的URL,通常是ros.org上的wiki页面。

  • <author> - 包的作者

 

格式1

旧的catkin pakages使用格式1.如果<package>标签没有format属性,它是一个格式1的包。使用格式2的新包。

package.xml的格式很简单。

基本结构

每个package.xml文件都有<package>标签作为根标记文件。

<package>

</package>

 

所需标签

有一小部分标签需要嵌套在<package>标签中,以使包清单完整。

  • <name> - 包的名称

  • <version> - 包的版本号(需要3个点分隔的整数)

  • <description> - 包装内容的描述

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

  • <license> - 发布代码的软件许可证(例如GPL,BSD,ASL)。

例如,这里是一个名为foo_core的虚构包的包清单

<package>
  <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>
</package>

构建,运行和测试依赖关系

具有最小标签的包清单不指定对其他包的任何依赖关系。软件包可以有四种依赖关系:

  • 构建工具依赖关系指定此软件包需要构建自身的构建系统工具。通常唯一的构建工具是catkin。在交叉编译场景中,构建工具依赖关系用于执行编译的架构。

  • 构建依赖关系指定构建此包所需的包。在构建时需要这些软件包中的任何文件时才是这种情况。这可以包括这些包在编译时的标头,链接到这些包的库或在构建时需要任何其他资源(特别是当这些包在CMake 中是find_package())时)。在交叉编译场景中,构建依赖关系针对目标体系结构。

  • 运行依赖关系指定在此程序包中运行代码所需的软件包,或针对此软件包构建库。在这种情况下,您依赖于共享库或将其头部包含在此包中的公头中(特别是当这些包在CMake 中的catkin_package()声明为(CATKIN_DEPENDS时)。

  • 测试依赖关系仅指定单元测试的附加依赖项。他们不应该将已经提到的任何依赖关系重复为构建或运行依赖关系。

这四种类型的依赖关系使用以下相应的标签来指定:

  • <buildtool_depend>

  • <build_depend>

  • <run_depend>

  • <test_depend>

所有包至少有一个依赖关系,构建工具依赖于catkin,如下例所示。

<package>
  <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>

  <buildtool_depend>catkin</buildtool_depend>
</package>

指定构建,运行时和测试依赖关系的更实际的示例可能如下所示。

 

<package>
  <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>message_generation</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>std_msgs</build_depend>

  <run_depend>message_runtime</run_depend>
  <run_depend>roscpp</run_depend>
  <run_depend>rospy</run_depend>
  <run_depend>std_msgs</run_depend>

  <test_depend>python-mock</test_depend>
</package>

有关依赖关系的更多细节可以在这里找到

 

Metapackages

将多个软件包分组为单个逻辑软件包通常很方便。这可以通过metapackages来实现元包是在package.xml中具有以下导出标记的普通包:

<export>
   <metapackage />
 </export>

除了所要求的<buildtool_depends>的依赖,元数据包只能有在包装上运行依赖关系,其中它们组。

cmake_minimum_required(VERSION 2.8.3)
project(<PACKAGE_NAME>)
find_package(catkin REQUIRED)
catkin_metapackage()

 

注意:将<PACKAGE_NAME>替换为metapackage的名称。

 

附加标签

  • <url> - 有关该软件包信息的URL,通常是ros.org上的wiki页面。

  • <author> - 包的作者

最后来一个小海龟的package.xlm的例子

<?xml version="1.0"?>
<package>
  <name>turtlesim</name>
  <version>0.5.5</version>
  <description>
    turtlesim is a tool made for teaching ROS and ROS packages.
  </description>
  <maintainer email="dthomas@osrfoundation.org">Dirk Thomas</maintainer>
  <license>BSD</license>

  <url type="website">http://www.ros.org/wiki/turtlesim</url>
  <url type="bugtracker">https://github.com/ros/ros_tutorials/issues</url>
  <url type="repository">https://github.com/ros/ros_tutorials</url>
  <author>Josh Faust</author>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>geometry_msgs</build_depend>
  <build_depend>libqt4-dev</build_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>qt4-qmake</build_depend>
  <build_depend>rosconsole</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>roscpp_serialization</build_depend>
  <build_depend>roslib</build_depend>
  <build_depend>rostime</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>std_srvs</build_depend>

  <run_depend>geometry_msgs</run_depend>
  <run_depend>libqt4</run_depend>
  <run_depend>message_runtime</run_depend>
  <run_depend>rosconsole</run_depend>
  <run_depend>roscpp</run_depend>
  <run_depend>roscpp_serialization</run_depend>
  <run_depend>roslib</run_depend>
  <run_depend>rostime</run_depend>
  <run_depend>std_msgs</run_depend>
  <run_depend>std_srvs</run_depend>
</package>

 

ROS学习之package.xml