当前位置: 首页 > 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.dtcms.com/a/312234.html

相关文章:

  • 质数时间(二分查找)
  • ​​​​​​​第二十一天(CDN绕过)
  • EPICS aSub记录示例2
  • [学习笔记-AI基础篇]02_深度基础
  • Kotlin协程极简教程:5分钟学完关键知识点
  • 工业场景工服识别准确率↑32%:陌讯多模态融合算法实战解析
  • OpenVLA复现
  • 23th Day| 39.组合总和,40.组合总和II,131.分割回文串
  • Linux—进程状态
  • 深入 Go 底层原理(九):context 包的设计哲学与实现
  • 智能手表:电源检查
  • Java多线程详解(2)
  • 一、灵巧手捉取几何原理——空间五指平衡捉取
  • GraphRag安装过程中的报错:系统找不到指定的文件(Could not install packages due to an OSError)
  • AI赋能测试:技术变革与应用展望
  • C++const成员
  • [网安工具] Web 漏洞扫描工具 —— AWVS · 使用手册
  • 机器学习【五】decision_making tree
  • Linux重定向和缓冲区
  • Piriority_queue
  • 三、摩擦刚体——捉取质量函数
  • ARP协议是什么?ARP欺骗是如何实现的?我们该如何预防ARP欺骗?
  • 前端与后端部署大冒险:Java、Go、C++三剑客
  • Codeforces Round 1039 (Div. 2) A-C
  • nodejs读写文件
  • 数据类型Symbol
  • 裸露土堆识别准确率↑32%:陌讯多特征融合算法实战解析
  • 数据结构基础
  • Minimizing Coins(Dynamic Programming)
  • 【智能体cooragent】创建 workflow 时 候选 Agent 和 Tool 获取来源详细分析