ROS学习:ROS文件系统--package.xml

package.xml 也是一个 catkin的package 必备文件,它是这个软件包的描述文件,在较早的ROS 版本 ( rosbuild 编译系统) 中,这个文件叫做 manifest.xml ,用于描述 pacakge 的基本信息。如果你在网上看到一些 ROS 项目里包含着 manifest.xml ,那么它多半是hydro版本之前的项目了。

package.xml作用

pacakge.xml 包含了 package 的名称、版本号、内容描述、维护人员、软件许可、编译构建工具、编译依赖、运行依赖等信息。实际上 rospack find 、rosdep 等命令之所以能快速定位和分析出 package 的依赖项信息,就是直接读取了每一个 pacakge 中的 package.xml 文件。它为用户提供了快速了解一个 pacakge 的渠道。

package.xml写法

pacakge.xml 遵循 xml 标签文本的写法,由于版本更迭原因,现在有两种格式并存( format1 与 format2 ),不过区别不大。老版本 (format1) 的 pacakge.xml 通常包含以下标签:

<pacakge>             根标记文件
<name>                包名
<version>             版本号
<description>         内容描述
<maintainer>          维护者
<license>             软件许可证
<buildtool_depend>    编译构建工具,通常为catkin
<build_depend>        编译依赖项,与Catkin中的
<run_depend>          运行依赖项

说明:其中1-6为必备标签,1是根标签,嵌套了其余的所有标签,2-6为包的各种属性,7-9为编译相关信息。
在新版本(format2)中,包含的标签为:

<pacakge>               根标记文件
<name>                  包名
<version>               版本号
<description>           内容描述
<maintainer>            维护者
<license>               软件许可证
<buildtool_depend>      编译构建工具,通常为catkin
<depend>                指定依赖项为编译、导出、运行需要的依赖,最常用
<build_depend>          编译依赖项
<build_export_depend>   导出依赖项
<exec_depend>           运行依赖项
<test_depend>           测试用例依赖项
<doc_depend>            文档依赖项

由此看见新版本的 pacakge.xml 格式上增加了几项 ,相当于将之前的build和run依赖项描述进行了细分。
目前 Indigo、Kinetic、Lunar 、melodic 等版本的 ROS 都同时支持两种版本的 package.xml ,所以无论选哪种格式都可以。

pacakge.xml例子

为了说明 pacakge.xml 写法,还是以 turtlesim 软件包为例,其 pacakge.xml 文件内容如下,我添加了相关的注释:

<?xml version="1.0"?>    <!--本示例为老版本的pacakge.xml-->
<package>                <!--pacakge为根标签,写在最外面-->
  <name>turtlesim</name>
  <version>0.8.1</version>
  <description>
 	turtlesim is a tool made for teaching ROS and ROS packages.
  </description>
  <maintainer email="[email protected]">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>

  <!--编译工具为catkin-->
  <buildtool_depend>catkin</buildtool_depend>
  
  <!--编译时需要依赖以下包-->
  <build_depend>geometry_msgs</build_depend>
  <build_depend>qtbase5-dev</build_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>qt5-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>libqt5-core</run_depend>
  <run_depend>libqt5-gui</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>

以上内容是老版本 (format1) 的写法,如果要写成新版本 (format2) 则可以改为:

<?xml version="1.0"?>
<package format="2">        <!--在声明pacakge时指定format2,为新版格式-->
  <name>turtlesim</name>
  <version>0.8.1</version>
  <description>
    turtlesim is a tool made for teaching ROS and ROS packages.
  </description>
  <maintainer email="[email protected]">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>
  
  <!--编译工具为catkin-->
  <buildtool_depend>catkin</buildtool_depend>

  <!--用depend来整合build_depend和run_depend-->
  <depend>geometry_msgs</depend>
  <depend>rosconsole</depend>
  <depend>roscpp</depend>
  <depend>roscpp_serialization</depend>
  <depend>roslib</depend>
  <depend>rostime</depend>
  <depend>std_msgs</depend>
  <depend>std_srvs</depend>
  
  <!--build_depend标签未变-->
  <build_depend>qtbase5-dev</build_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>qt5-qmake</build_depend>
  
  <!--run_depend要改为exec_depend-->
  <exec_depend>libqt5-core</exec_depend>
  <exec_depend>libqt5-gui</exec_depend>
  <exec_depend>message_runtime</exec_depend>
</package>

=============================================================================
本文作为笔记查阅之用,无涉其他用途。

发布了25 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43667745/article/details/90137505