1. package.xml
package.xml
文件是每个 ROS 包的核心元数据文件,作用类似于软件的“身份证”和“说明书”。它定义了包的基本信息、依赖关系以及与其他组件的集成规则。
package.xml
的关键标签字段的说明如下:
1.1. 包的基本信息
<name>
: 包的唯一标识符(必须与文件夹名一致)<version>
: 包版本号(如 1.0.0)<description>
: 包的简短描述<maintainer>
: 维护者姓名和邮箱<license>
: 许可证类型(如 Apache-2.0)<url>
: 相关链接(文档、Bug 追踪等)
1.2. 包的依赖关系
1.2.1. <depend>
描述在构建时和运行时都需要依赖的依赖项。
说明:
纯Python实现的package通常没有build阶段,因此可用<exec_depend>
字段替代。
1.2.2. <build_depend>
描述只在构建时需要依赖,在运行时不需要的依赖项。
对于此类型的依赖,已安装的软件包二进制文件并不要求必须安装该依赖软件包。
然而,如果你的软件包导出的头文件包含来自此依赖项的头文件,就会产生问题。在这种情况下,你还需要使用 <build_export_depend>
标签。
1.2.3.
描述不仅在构建时需要依赖,在导出的头文件中也包含了来自这个依赖项的头文件。
如果你导出的头文件包含来自某个依赖项的头文件,那么其他将你的软件包列为
【举例】:
Package_B本身是一个导出库(
.so
或.dll
),它依赖了Package_A,且在导出的头文件中包含了Package_A的头文件。那么Package_B的使用方Package_C,需要同时依赖Package_B和Package_A。Package_B的
package.xml
文件中,可以用<build_export_depend>
来指定对Package_A的依赖。Package_C的package.xml
文件中,可以用<depend>
来制定对Package_B和Package_A的依赖。
1.2.4. <exec_depend>
描述只在运行时需要(构建时不需要)的依赖项。
此标签用于声明运行软件包时所需的共享库、可执行文件、Python 模块、启动脚本及其他文件的依赖关系。
1.2.5. <test_depend>
描述只在测试时需要的依赖项。
此标签声明的依赖项不应与
1.3. 导出包属性
TODO
2. rosdep的用法
rosdep
是 ROS(Robot Operating System)中用于管理系统依赖的核心工具,它能自动解析并安装 package.xml
中声明的依赖项。其核心功能和工作流程如下:
2.1. 安装与初始化
1. 安装:
1 | # Ubuntu/Debian系统 |
2. 初始化:
首次使用前需初始化配置:
1 | sudo rosdep init # 创建配置文件到/etc/ros/rosdep/ |
2.2. 安装依赖
1. 安装工作区内所有包的依赖:
1 | rosdep install --from-paths src --ignore-src -y |
--from-paths src
:扫描工作区src/
目录下的package.xml
。--ignore-src
:跳过工作区内已有的包(避免重复安装)。-y
:自动确认安装,无需交互。
2. 安装单个包的依赖:
1 | rosdep install <package_name> # 例如 rosdep install nav2_bt_navigator |
3. 参考文档
https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Rosdep.html#exec-depend