当前位置: 首页 > news >正文

ros2的package.xml和rosdep

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 键,也忽略安装该依赖项。
http://www.lryc.cn/news/603078.html

相关文章:

  • 基于深度学习的医学图像分析:使用3D CNN实现肿瘤检测
  • 第十天:字符菱形
  • 一个Pycharm窗口添加多个项目来满足运行多个项目的需求
  • DDoS攻击防御:从5G到T级防护方案全对比
  • 企业级日志分析系统ELK
  • Python动态规划:从基础到高阶优化的全面指南(3)
  • 历史版本的vscode下载地址
  • 实验-静态路由
  • 智慧工地系统:科技赋能建筑新未来
  • 学习dify:一个开源的 LLM 应用开发平台
  • 【GitHub Workflows 基础(二)】深入理解 on、jobs、steps 的核心语法与执行逻辑
  • 【2025/07/28】GitHub 今日热门项目
  • 【iOS】类和分类的加载过程
  • LNMP架构+wordpress实现动静分离
  • Cacti RCE漏洞复现
  • 四、计算机组成原理——第1章:计算机系统概述
  • 可扩展架构模式——微服务架构最佳实践应该如何去做(方法篇)
  • 《汇编语言:基于X86处理器》第10章 结构和宏(2)
  • linux命令grep的实际应用
  • 在虚拟机ubuntu上修改framebuffer桌面不能显示图像
  • 1.vue体验
  • Android 媒体播放开发完全指南
  • Ansible提权sudo后执行报错
  • 电脑开机不显示网卡的原因
  • selenium 特殊场景处理
  • 刘润探展科大讯飞WAIC,讯飞医疗AI该咋看?
  • CSP-J 2022_第三题逻辑表达式
  • 技术工具箱 |五、一个避免头文件重复引用的 Python 脚本
  • 嵌入式Linux:注册线程清理处理函数
  • Zynq SOC FPGA嵌入式裸机设计和开发教程自学笔记:硬件编程原理、基于SDK库函数编程、软件固化