当前位置: 首页 > 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.xdnf.cn/news/1204291.html

相关文章:

  • 正则表达式 速查速记
  • haproxy原理及实验演示(实现服务器集群的负载均衡)
  • ubuntu资源共享samba 安装与配置 mac/windows共享ubuntu文件资源
  • 无人机喷洒系统技术要点与难点解析
  • AR眼镜:工业4.0时代高风险作业的安全守护者
  • 【WRF-Chem教程第七期】闪电-NOx 参数化方案详解
  • 自学嵌入式 day36 数据库
  • 前段面试题新版
  • 【华为机试】5. 最长回文子串
  • 数据结构——图(二、图的存储和基本操作)
  • 数据结构 | 队列:从概念到实战
  • Rust 最短路径、Tide、Partial、Yew、Leptos、数独实践案例
  • Nginx HTTP 反向代理负载均衡实验
  • Docker笔记(基本命令、挂载本地gpu、Dockerfile文件配置、数据挂载、docker换源)
  • Ettus USRP X410/X440 运行 ADC 自校准
  • easyexcel填充方式导出-合并单元格并设置边框
  • 解构远程智能系统的视频能力链:从RTSP|RTMP协议接入到Unity3D头显呈现全流程指南
  • MVSNet系列网络概述
  • 把振动数据转成音频并播放
  • C++模板初阶
  • C++模板进阶:从基础到实战的深度探索
  • 短剧小程序系统开发:连接创作者与用户的桥梁
  • vue3【组件封装】超级表单 S-form.vue
  • django ManyToManyField 如何添加数据
  • 多光谱相机助力第四次全国农业普查-农业用地调查
  • JAVA后端开发——“全量同步”和“增量同步”
  • 基于百度 iframe 框架与语音解析服务的数字人交互系统实现
  • Docker搭建Hadoop集群
  • Apache Ignite 的 JDBC Client Driver(JDBC 客户端驱动)
  • 基于电动自行车控制器设计方案