rosdep 是一款可用于处理软件包和外部库依赖关系的依赖管理工具。它是一个命令行工具,用于识别和安装构建或安装软件包所需的依赖项。rosdep 本身并非包管理器,而是一款元包管理器,它借助自身对系统和依赖项的了解,在特定平台上找到合适的待安装软件包。实际的安装操作则通过系统包管理器(例如 Debian/Ubuntu 上的 apt、Fedora/RHEL 上的 dnf 等)来完成。
rosdep 最常在构建工作空间之前调用,用于安装该工作空间内软件包的依赖项。
它能够对单个软件包或一个软件包目录(如工作空间)进行处理。
PACKAGE.xml标签
<depend>
用途:声明同时需要在构建时和运行时存在的依赖项。
适用场景:
- C++ 包(多数情况下)。
- 当依赖项的头文件、库或工具在构建和运行阶段均需使用时。
示例:
<depend>rclcpp</depend> <!-- C++ ROS 客户端库 -->
<depend>std_msgs</depend> <!-- 标准消息类型 -->
2. <build_depend>
用途:声明仅在构建阶段需要的依赖项,运行时无需。
适用场景:
- 仅用于生成代码、编译或测试的工具(如
ament_cmake
)。 - 不导出头文件或配置的依赖项。
注意:
若导出的头文件包含此依赖项的头文件,需同时添加 <build_export_depend>
。
示例:
<build_depend>ament_cmake</build_depend> <!-- 构建工具 -->
3. <build_export_depend>
用途:声明你的包导出的内容(如头文件、CMake 配置)所依赖的项。
适用场景:
- 当你的包导出的头文件中包含其他库的头文件时。
- 其他包构建时需要依赖你的包,同时也需要这些依赖项。
示例:
若你的包导出的头文件包含 Eigen
库的头文件:
<build_depend>eigen3_cmake_module</build_depend>
<build_export_depend>eigen3</build_export_depend>
4. <exec_depend>
用途:声明仅在运行阶段需要的依赖项(如共享库、Python 模块、启动脚本)。
适用场景:
- 纯 Python 包(无需构建阶段)。
- 运行时需要的可执行文件或动态库。
示例:
<exec_depend>rclpy</exec_depend> <!-- Python ROS 客户端库 -->
<exec_depend>ros2launch</exec_depend> <!-- 启动工具 -->
5. <test_depend>
用途:声明仅在测试阶段需要的依赖项(如测试框架、模拟工具)。
注意:
- 避免与其他依赖标签重复(如
<depend>
)。
示例:
<test_depend>ament_lint_auto</test_depend> <!-- 代码检查工具 -->
<test_depend>ament_cmake_gtest</test_depend> <!-- GTest 集成 -->
rosdep安装使用
apt-get install python3-rosdep
使用前初始化
sudo rosdep init
rosdep update
rosdep install --from-paths src -y --ignore-src
如果处于工作空间的根目录,且源代码存放在 src
目录下,对应的命令如下:
rosdep install --from-paths src -y --ignore-src
--from-paths src
:指定要检查package.xml
文件的路径,从而解析依赖项的键。-y
:对包管理器的所有安装提示默认选择 “是”,无需手动确认即可完成安装。--ignore-src
:表示如果依赖项对应的包本身也在当前工作空间中,即使存在 rosdep 键,也忽略安装该依赖项。