介绍ROS中的package.xml

介绍ROS中的package.xml

在ROS中,package.xml 是ROS软件包的元数据文件,它存储了有关软件包的基本信息和依赖关系。该文件位于ROS软件包的根目录下,ROS系统可以通过读取该文件来确定软件包的依赖关系和其他元数据。

下面是 package.xml 文件的一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0"?>
<package format="2">
<name>my_package</name>
<version>0.0.1</version>
<description>A ROS package for my project.</description>
<maintainer email="jane@example.com">Jane Doe</maintainer>
<license>BSD</license>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>std_msgs</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>std_msgs</exec_depend>
</package>


在这个示例中,package.xml 文件包含了以下信息:

  • < name>:软件包的名称。
  • < version>:软件包的版本号。
  • < description>:软件包的描述信息。
  • < maintainer>:软件包的维护者信息,包括姓名和电子邮件地址。
  • < license>:软件包的许可证类型。
  • < buildtool_depend>:构建软件包时需要的工具,通常是 catkin。
  • < build_depend>:构建软件包时需要的依赖项,例如 roscpp 和 std_msgs。
  • < exec_depend>:运行软件包时需要的依赖项,例如 roscpp 和 std_msgs。

注意, 的区别在于它们的用途。前者用于在构建软件包时下载和安装所需的依赖项,后者用于在运行软件包时加载所需的依赖项。

在创建ROS软件包时,你需要编写 package.xml 文件,并指定软件包的名称、版本、描述、依赖项和其他元数据。如果你的软件包依赖于其他ROS软件包,则需要在 package.xml 文件中指定这些依赖项,以确保你的软件包可以正确地编译和运行。

总之,package.xml 是ROS软件包的元数据文件,它存储了有关软件包的基本信息和依赖关系。在创建ROS软件包时,你需要编写 package.xml 文件,并指定软件包的名称、版本、描述、依赖项和其他元数据,以确保你的软件包可以正确地编译和运行。

在ROS的 package.xml 文件中,可以使用 format 属性来指定 package.xml 文件所使用的格式。目前,ROS支持两种不同的格式:format=”1” 和 format=”2”。在ROS Noetic版本(ROS 1)之后,还引入了一个新的格式:format=”3”。

format=”3” 是ROS的最新包格式,它在 format=”2” 的基础上进行了扩展,以支持更多的功能和元数据。下面是一个 format=”3” 的 package.xml 示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0"?>
<package format="3">
<name>my_package</name>
<version>0.0.1</version>
<description>A ROS package for my project.</description>
<url type="website">https://example.com</url>
<maintainer email="jane@example.com">Jane Doe</maintainer>
<license>BSD</license>
<buildtool_depend>catkin</buildtool_depend>
<buildtool_export_depend>roscpp</buildtool_export_depend>
<buildtool_export_depend>std_msgs</buildtool_export_depend>
<build_depend>roscpp</build_depend>
<build_depend>std_msgs</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>std_msgs</exec_depend>
<export>
<build_type>catkin</build_type>
<message_generation>ros</message_generation>
<message_runtime>std_msgs</message_runtime>
<pluginlib>my_package_plugins</pluginlib>
<rostest>my_package_test</rostest>
</export>
</package>

在这个示例中,format=”3” 的 package.xml 文件新增了以下元素:

  • < url>:软件包的主页地址。
  • :构建软件包时需要的导出依赖项,用于指定构建工具所需的依赖项,例如 roscpp。
  • < export>:软件包的导出配置,用于指定软件包的一些特殊配置和功能。 元素支持多个子元素,如 build_type、message_generation、message_runtime、pluginlib 和 rostest。

总之,format=”3” 是ROS的最新包格式,它在 format=”2” 的基础上进行了扩展,以支持更多的功能和元数据。如果你正在创建一个ROS软件包,并且需要使用最新的ROS功能和元数据,那么你可以选择使用 format=”3” 的 package.xml 文件。

在 format=”3” 的 package.xml 文件中, 元素是一个重要的元素,它用于指定软件包的导出配置和功能。下面是一些常用的 元素及其用法:

  • :指定构建类型,通常为 catkin 或 ament_cmake。如果你的软件包使用了不同的构建类型,则需要在 package.xml 文件中指定该元素。
  • :指定消息生成器,通常为 ros 或 py。如果你的软件包使用了自定义的消息类型,则需要在 package.xml 文件中指定该元素。
  • :指定消息运行时,通常为 ROS 中的消息库,例如 std_msgs。如果你的软件包使用了自定义的消息类型,则需要在 package.xml 文件中指定该元素。
  • :指定插件库,用于加载和运行插件。如果你的软件包包含插件,则需要在 package.xml 文件中指定该元素。
  • :指定 ROS 测试用例,用于测试软件包的功能和正确性。如果你的软件包包含了 ROS 测试用例,则需要在 package.xml 文件中指定该元素。

下面是一个示例 package.xml 文件,其中包含了上述 元素:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0"?>
<package format="3">
<name>my_package</name>
<version>0.0.1</version>
<description>A ROS package for my project.</description>
<url type="website">https://example.com</url>
<maintainer email="jane@example.com">Jane Doe</maintainer>
<license>BSD</license>
<buildtool_depend>catkin</buildtool_depend>
<buildtool_export_depend>roscpp</buildtool_export_depend>
<buildtool_export_depend>std_msgs</buildtool_export_depend>
<build_depend>roscpp</build_depend>
<build_depend>std_msgs</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>std_msgs</exec_depend>
<export>
<build_type>catkin</build_type>
<message_generation>ros</message_generation>
<message_runtime>std_msgs</message_runtime>
<pluginlib>my_package_plugins</pluginlib>
<rostest>my_package_test</rostest>
</export>
</package>


总之,在 format=”3” 的 package.xml 文件中, 元素是一个重要的元素,用于指定软件包的导出配置和功能。如果你正在创建ROS软件包,并且需要使用最新的ROS功能和元数据,则需要在 package.xml 文件中指定 元素,并根据需要指定其子元素。

除了常用的 < export> 元素之外,在 format=”3” 的 package.xml 文件中,还有一些其他的元素和属性可以用来指定软件包的其他元数据和配置。下面是一些常用的元素和属性:

  • < depend>:指定软件包的依赖项。与 format=”2” 类似, 元素有两种类型:,用于指定在构建和运行软件包时所需的依赖项。
  • :用于指定软件包的构建配置和选项。这个元素支持多个子元素,如 等,可以用来指定构建选项和配置。
  • :用于指定软件包的安装配置和选项。这个元素支持多个子元素,如 等,可以用来指定安装选项和配置。
  • :指定软件包的测试依赖项。如果你的软件包包含了测试用例,则需要在 package.xml 文件中指定该元素。

下面是一个示例 package.xml 文件,其中包含了上述元素和属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0"?>
<package format="3">
<name>my_package</name>
<version>0.0.1</version>
<description>A ROS package for my project.</description>
<url type="website">https://example.com</url>
<maintainer email="jane@example.com">Jane Doe</maintainer>
<license>BSD</license>
<buildtool_depend>catkin</buildtool_depend>
<buildtool_export_depend>roscpp</buildtool_export_depend>
<buildtool_export_depend>std_msgs</buildtool_export_depend>
<build_depend>roscpp</build_depend>
<build_depend>std_msgs</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>std_msgs</exec_depend>
<export>
<build_type>catkin</build_type>
<message_generation>ros</message_generation>
<message_runtime>std_msgs</message_runtime>
<pluginlib>my_package_plugins</pluginlib>
<rostest>my_package_test</rostest>
</export>
<depend>
<build_depend>roscpp</build_depend>
<build_depend>std_msgs</build_depend>
<exec_depend>roscpp</exec_depend>
<exec_depend>std_msgs</exec_depend>
<test_depend>my_package_test</test_depend>
</depend>
<export_build>
<cmake_args>-DENABLE_DEBUG=ON</cmake_args>
<include_paths>/usr/include/foo</include_paths>
<link_directories>/usr/lib/foo</link_directories>
</export_build>
<export_install>
<cmake_args>-DCMAKE_INSTALL_PREFIX=/opt/my_package</cmake_args>
<include_paths>/opt/my_package/include</include_paths>
<link_directories>/opt/my_package/lib</link_directories>
</export_install>
</package>

format=”3” 的 package.xml 文件中,可以使用 元素和其他元素和属性来指定软件包的依赖项、构建选项、安装选项和其他元数据和配置。这些元素和属性可以帮助你更好地管理和组织你的ROS软件包,提高软件包的可维护性和可重用性。

在实际使用中,你需要根据自己的需要选择合适的元素和属性,并根据要求指定其值。对于 元素,你需要了解 ROS 中的消息系统、插件系统和测试系统,并根据软件包的需要指定其子元素。对于其他元素和属性,你需要了解ROS中的构建系统、安装系统和依赖管理,并根据软件包的需要指定其值。

在编写 package.xml 文件时,建议先了解 ROS 的相关文档和教程,学习如何使用各种元素和属性。同时,你也可以参考其他ROS软件包的 package.xml 文件,了解其组织结构和使用方式,从而更好地编写和管理自己的ROS软件包。


介绍ROS中的package.xml
https://qiangsun89.github.io/2023/04/25/介绍ROS中的package-xml/
作者
Qiang Sun
发布于
2023年4月25日
许可协议