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

rosdep的作用以及rosdep install时的常用参数

第一部分:rosdep 是用来干嘛的?

简单来说,rosdep 是 ROS (Robot Operating System) 的一个核心工具,它的全称是 ROS Dependency,即 ROS 依赖项管理器

它的主要作用是自动安装 ROS 软件包所需要的系统级依赖

为什么需要 rosdep

  1. 跨平台兼容性:一个 ROS 软件包(比如一个用于激光雷达驱动的包)可能需要一些非 ROS 的第三方库,例如 libusb (用于USB通信) 或 Boost (一个C++库集合)。在不同的操作系统上,这些库的包名可能不一样。

    • 在 Ubuntu/Debian 上,它可能叫 libusb-1.0-0-dev
    • 在 Fedora/CentOS 上,它可能叫 libusb1-devel
    • 在 macOS 上,可能通过 brew install libusb 来安装。

    如果让每个用户手动去查找并安装这些依赖,会非常繁琐且容易出错。rosdep 解决了这个问题。开发者只需要在软件包的 package.xml 文件中声明一个抽象的依赖名(我们称之为 “rosdep key”,比如 libusb),rosdep 就会根据你当前的操作系统,自动查找并使用系统的包管理器(如 apt, yum, brew 等)来安装正确的那个包。

  2. 简化工作流程:当你从 GitHub 或其他地方下载了一个新的 ROS 源码包准备编译时,你不需要手动阅读它的文档来找出所有依赖项。你只需要运行一个 rosdep 命令,它就会自动扫描所有软件包的 package.xml 文件,并为你安装所有缺失的依赖。这极大地简化了环境配置的过程。

rosdep 的核心工作流

一个典型的工作流如下:

  1. rosdep init (通常只需要执行一次)

    • 初始化 rosdep 的源列表。它会在 /etc/ros/rosdep/sources.list.d/ 目录下创建一个文件,指向 ROS 官方的依赖数据库。这个操作需要 sudo 权限,因为它要写入系统目录。
  2. rosdep update (需要经常执行)

    • 根据 init 设置好的源列表,下载最新的依赖关系数据库到本地缓存(通常在 ~/.ros/ 目录下)。每当你获取了新的 ROS 包或者感觉依赖找不到时,都应该执行一次这个命令来更新本地数据库。注意:这个命令通常不需要 sudo
  3. rosdep install (最常用的命令)

    • 这是真正执行安装的命令。它会检查指定软件包的依赖,并安装那些尚未被满足的系统依赖。

第二部分:rosdep install -i --from-path src --rosdistro humble 命令详解

这是一个在 ROS 2 工作空间中非常标准和常用的命令。让我们把它拆解开来,逐个分析每个部分的作用。

rosdep install [options] <packages>

rosdep install

这是主命令,告诉 rosdep 我们要安装依赖项。

--from-path src

这是一个非常重要的选项。

  • --from-path:告诉 rosdep 不要去查找 ROS 官方已编译好的软件包列表,而是从一个或多个本地文件系统路径中去查找。
  • src:指定了这个路径就是当前目录下的 src 文件夹。
  • 组合起来的含义:请递归地扫描 src 文件夹,找到里面所有 ROS 软件包的 package.xml 文件,读取这些文件中声明的所有 <depend><build_depend> 标签,并把它们作为需要安装依赖的目标。
    • 这正是我们想要的!当我们克隆了一堆源码包到工作空间的 src 目录下准备编译时,这个命令能确保这些源码包的所有依赖都被安装好。

-i--ignore-src

这个选项的全称是 --ignore-src (ignore sources)。

  • 含义:在解决依赖关系时,请忽略那些在 src 目录下已经存在的软件包本身。
  • 为什么需要这个? 假设你的 src 目录下有一个叫做 my_robot_driver 的包,它依赖于另一个叫做 common_utilities 的包。巧的是,common_utilities 这个包的源码也同样在你的 src 目录下。
    • 如果没有 -irosdep 发现你需要 common_utilities,它可能会尝试通过 sudo apt install ros-humble-common-utilities 来安装一个预编译好的二进制版本。这会和你本地的源码版本产生冲突。
    • 有了 -irosdep 在扫描时发现 common_utilities 已经在 --from-path 指定的路径(也就是 src)中找到了,它就会说:“好的,这个包用户准备自己从源码编译,我不需要为它安装二进制包了,但我仍然需要安装 common_utilities 它自己的依赖项(比如libusb)。”
  • 总结-i 确保了 rosdep 只安装外部的、系统的依赖,而不会试图安装那些你已经下载了源码准备自己编译的 ROS 包。

--rosdistro humble

这个选项用于明确指定当前操作是针对哪个 ROS 发行版的。

  • 含义:请使用 humble (ROS 2 Humble Hawksbill) 的依赖规则来解析和安装依赖。
  • 为什么需要这个? rosdep 通常会通过环境变量 ROS_DISTRO 来自动检测当前的 ROS 版本。但有时候这个环境变量可能没有设置(比如你没有 source ROS 的 setup.bash 文件),或者你想为另一个不同版本的 ROS 安装依赖。明确使用 --rosdistro humble 可以消除歧义,确保 rosdep 使用正确的依赖数据库。对于 humble,它会查找适用于 Ubuntu 22.04 的依赖包。

补充:常用的 -y 选项

你经常会看到这个命令后面还跟着一个 -y
rosdep install -i --from-path src --rosdistro humble -y

  • -y:这个选项会把 “yes” 自动传递给下游的包管理器(如 apt)。这样,在安装过程中 apt 就不会停下来问你 “Do you want to continue? [Y/n]”,整个安装过程可以全自动进行,非常适合在脚本中使用。

总结

  • rosdep 的作用:一个跨平台的 ROS 系统依赖安装工具,它读取 package.xml,将抽象的依赖名映射到具体的系统软件包并进行安装。
  • rosdep install -i --from-path src --rosdistro humble 的含义

    “请扫描我工作空间下的 src 文件夹,找出里面所有 ROS 源码包的系统依赖项。在安装时,请忽略掉那些源码已经存在于 src 文件夹里的包本身。整个过程请严格按照 ROS Humble 发行版的规则来执行。”

这个命令是在编译一个从源码获取的 ROS 2 工作空间之前,必须执行的关键步骤,它确保了编译过程不会因为缺少依赖库而失败。

http://www.lryc.cn/news/607980.html

相关文章:

  • [论文阅读] 人工智能 + 软件工程 | GitHub Marketplace中CI Actions的功能冗余与演化规律研究
  • DDD Repository模式权威指南:从理论到Java实践
  • 网络基础实操篇-05-路由基础-最佳实践
  • 从C++0基础到C++入门(第十四节:流程程序结构第三部分【三目运算符与多种书写方式)】)
  • 基于单片机一氧化碳CO检测/煤气防中毒检测报警系统
  • linux中挂载磁盘和卸载
  • Redis面试精讲 Day 7:GEO地理位置应用详解
  • WinForm之ListBox 控件
  • 通过filezilla在局域网下实现高速传输数据
  • 音频3A处理简介之AGC(自动增益控制)
  • C/C++常用字符串函数
  • C++音视频开发:基础面试题
  • Vue 响应式基础全解析2
  • Python 类三大方法体系深度解析:静态方法、类方法与实例方法
  • 归并排序(简单讲解)
  • 【13】VisionMaster入门到精通——测量--线圆测量
  • Coze Studio 概览(六)--知识库管理
  • Flutter开发 初识目录结构
  • #Linux内存管理# 用一个案例详细介绍ARMv7-A架构 缺页中断处理的原理
  • C#多数据库批量执行脚本工具
  • 服装MES系统高效解决方案
  • Apache ShardingSphere 初识使用
  • 语音识别数据集
  • 力扣 二叉树遍历 中序/前序/后序(递归和迭代版)
  • Dify 从入门到精通(第 10/100 篇):使用 Dify 工具集扩展功能
  • 测试环境 PostgreSQL 库连接不上—案例分享
  • 设计Mock华为昇腾GPU的MindSpore和CANN的库的流程与实现
  • 音视频学习(四十六):声音的三要素
  • 【故障处理】redis会话连接满导致业务系统某个模块数据不显示
  • 【Flutter3.8x】flutter从入门到实战基础教程(八):公共state的集中管理机制