zoukankan      html  css  js  c++  java
  • ROS学习之package.xml

    目录

    概述

    软件包清单是一个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>
  • 相关阅读:
    Callable的Future模式
    并发队列
    并发工具类和线程池
    安全与死锁问题
    ConcurrentHashMap底层实现
    Map集合常见面试题
    List集合框架
    类加载器
    Activiti中个人任务分配
    流程定义
  • 原文地址:https://www.cnblogs.com/qixianyu/p/6669687.html
Copyright © 2011-2022 走看看