wstool和catkin_tools工具介绍

好的,我们来详细介绍一下 python3-wstoolpython3-catkin-tools 这两个在 ROS (Robot Operating System) 开发中非常重要的工具,以及它们之间的关系。

首先,python3- 这个前缀表示这些是针对 Python 3 的软件包版本,这在现代 ROS 发行版(如 ROS Noetic 及更新版本)中是标准的。

核心比喻

为了方便理解,我们可以先用一个简单的比喻:

  • wstool (Workspace Tool)项目源代码的“采购员”或“图书管理员”。它的工作是根据一个清单(.rosinstall 文件),从互联网上(如 GitHub, GitLab)下载或更新你项目所需的所有源代码包。
  • catkin_tools项目的“总工程师”或“建筑工头”。它负责获取所有下载好的源代码,并按照正确的顺序和依赖关系,将它们编译、链接,最终构建成可执行的程序和库。

1. python3-wstool 详解

wstool 是 “Workspace Tool” 的缩写,它是一个用于管理 ROS 工作空间中多个源代码仓库(Repositories)的命令行工具。

主要作用
  • 管理源代码集合:一个复杂的 ROS 项目通常由许多独立的包(packages)组成,这些包可能托管在不同的 Git、SVN 或 Mercurial 仓库中。wstool 可以方便地将这些仓库克隆(clone)到你的本地工作空间中。
  • 基于清单文件工作:它主要使用一个名为 .rosinstall 的 YAML 格式文件。这个文件就像一个“购物清单”,详细列出了需要下载的每一个源代码仓库的 URL、版本(分支、标签或 commit-id)以及本地存放路径。
  • 更新和同步:当你需要更新所有包到最新版本,或者切换到某个特定分支时,只需一条 wstool update 命令,它就会自动处理所有仓库的 git pull 或类似操作。
常用命令

假设你在工作空间的 src 目录下:

  • wstool init .: 在当前目录(src)初始化一个 wstool 工作空间,会创建一个 .rosinstall 文件。
  • wstool set my_repo --git https://github.com/user/repo.git: 将指定的 Git 仓库添加到 .rosinstall 文件中,并下载它。
  • wstool merge my_project.rosinstall: 将一个已有的 .rosinstall 文件中的内容合并到当前工作空间的配置中。这在获取一个开源项目的全部源码时非常常用。
  • wstool update: 根据 .rosinstall 文件中的信息,更新/下载所有的源代码仓库。
  • wstool info: 显示当前工作空间中所有仓库的状态(版本、URL等)。

总结:wstool 只关心源代码的获取和管理,它不参与任何编译过程。


2. python3-catkin-tools 详解

catkin_tools 是对 ROS 原始构建系统 catkin_make 的一个现代化、功能更强的替代品。它提供了一套名为 catkin 的命令来构建 ROS 工作空间。

主要作用
  • 编译和构建:它的核心功能是编译工作空间 src 目录下的所有 ROS 包,生成可执行文件、库文件和消息类型等。
  • 改进的构建流程:相比于 catkin_makecatkin_tools 提供了许多改进:
    • 并行构建:可以同时编译多个包,大大加快了大型工作空间的编译速度。
    • 隔离构建:每个包都在一个独立的环境中编译,避免了包之间的意外干扰,使得调试更加容易。
    • 更友好的输出:构建过程的输出信息更加清晰、整洁,一目了然地显示每个包的编译进度和状态。
    • 工作空间隔离:生成的 builddevel 目录会带有特定的配置文件名,方便在多个工作空间之间切换,而不会相互影响。
常用命令

假设你在工作空间的根目录下(例如 ~/catkin_ws/):

  • catkin build: 编译整个工作空间。这是最核心的命令。
  • catkin clean: 清理构建产生的所有中间文件和目标文件(相当于 rm -rf build/ devel/ logs/)。
  • catkin build my_package_name: 只编译指定的包及其依赖项。
  • catkin create pkg my_new_pkg --catkin-deps roscpp rospy std_msgs: 创建一个新的 ROS 包,并自动在 package.xml 中添加依赖。
  • catkin config: 查看或修改工作空间的构建配置(例如编译选项 CMAKE_BUILD_TYPE 等)。

总结:catkin_tools 是一个纯粹的构建工具,它假设源代码已经存在于 src 目录中。


它们之间的关系与典型工作流

wstoolcatkin_tools 不是竞争关系,而是协作关系。它们在 ROS 开发工作流中扮演着前后衔接的不同角色。

一个典型的从零开始设置并构建一个复杂 ROS 项目的工作流程如下:

  1. 创建工作空间

    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws
    
  2. 获取源代码 (使用 wstool)
    进入 src 目录,这是 wstool 工作的地方。

    cd src
    # 假设项目提供了一个 .rosinstall 文件
    wget https://raw.githubusercontent.com/some_project/master/dependencies.rosinstall
    wstool init
    wstool merge dependencies.rosinstall
    wstool update
    

    执行完毕后,src 目录下会充满从各个 Git 仓库下载来的 ROS 包。

  3. 安装依赖 (使用 rosdep)
    在获取了所有源代码后,需要安装这些代码所依赖的系统库(如 Boost, OpenCV)和其他 ROS 包。

    cd ~/catkin_ws
    # rosdep 会读取 src 目录下所有包的 package.xml 文件,找出依赖项并安装
    rosdep install --from-paths src --ignore-src -r -y
    
  4. 构建项目 (使用 catkin_tools)
    回到工作空间根目录,这是 catkin 命令工作的地方。

    cd ~/catkin_ws
    catkin build
    

    catkin_tools 会开始编译 src 目录下的所有内容。

  5. 激活环境
    构建成功后,需要 source 生成的配置文件,以便系统能找到你刚刚编译好的包和可执行文件。

    source devel/setup.bash
    

摘要表格

特性python3-wstoolpython3-catkin-tools
核心职责源代码管理编译和构建
工作目录工作空间的 src 目录工作空间的根目录
主要输入.rosinstall 文件src 目录下的源代码和 package.xml
主要输出src 目录下下载好的源代码builddevel 目录中的可执行文件/库
主要命令wstool update, wstool mergecatkin build, catkin clean
角色比喻源代码采购员项目总工程师

总结来说,你先用 wstool 把“原材料”(源代码)买回来放到“仓库”(src 目录),然后再请 catkin_tools 这个“工程师”把这些原材料加工成“最终产品”(可执行程序)。它们共同构成了 ROS 中高效管理和构建大型项目的基石。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94797.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

吴恩达 深度学习笔记

最近在看吴恩达深度学习系列课程,简单做一个基本框架笔记。 如感兴趣或了解更多内容,推荐看原课程 以前也做过一些与机器学习和深度学习有关的笔记,过分重复的就一笔带过了。 01 第一门课 神经网络和深度学习 1.1 第一周:深度学习…

2025数字马力一面面经(社)

2025数字马力一面面经(社) 日常自我介绍js数据类型有哪些(报完菜名后简单分析了一下使用引用类型)谈谈对const、var、let的理解(变量提升、let和const的主要区别、使用const命名引用类型的时可以对引用类型进行操作&am…

PyQt 中 pyqtSignal 的使用

目录 基本用法 示例代码 关键特性 常见用途 一、信号的定义规则 二、完整用法步骤 1. 导入必要模块 2. 定义带信号的类 3. 定义接收信号的槽函数 4. 连接信号与槽 5. 发射信号 6. 断开连接(可选) 三、高级特性 1. 跨线程通信 2. 信号连接方式 3. 信号与匿名函数 4. 信号转发 …

使用Python验证常见的50个正则表达式

什么是正则表达式?正则表达式(Regular Expression)通常被用来检索、替换那些符合某个模式(规则)的文本。此处的Regular即是规则、规律的意思,Regular Expression即“描述某种规则的表达式”之意。本文收集了一些常见的正则表达式用…

Redis是单线程性能还高的原因

Redis是单线程Redis单线程是指Redis的网络IO和键值对读写是由一个线程完成的,其他功能还是使用多线程执行Redis主干业务使用单线程的原因Redis本质就是一个大的共享资源,共享资源是需要对其进行并发控制的,即使增加了线程,大部分线程也是在等待互斥锁,并行变串行,而且还需要进行…

若依前后端分离版学习笔记(七)—— Mybatis,分页,数据源的配置及使用

一 Mybatis 1、Maven依赖 在ruoyi父项目的pom文件中有一个分页插件的依赖 <!-- pagehelper 分页插件 --> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version&…

灌区信息化智能管理系统解决方案

一、方案背景 灌区作为农业灌溉的重要基础设施&#xff0c;承担着保障粮食安全和促进农业可持续发展的关键作用。然而&#xff0c;传统灌区管理方式普遍存在信息孤岛、数据滞后、调度不精准等问题&#xff0c;导致水资源浪费和管理效率低下。在此背景下&#xff0c;灌区信息化智…

软件包管理、缓存、自定义 YUM 源

1. 软件包管理是啥 你可以把软件包管理器理解成 Linux 的“应用商店 安装工人”&#xff1a; 应用商店&#xff1a;帮你找到软件&#xff08;包&#xff09;安装工人&#xff1a;帮你下载安装、配置、升级、卸载管理账本&#xff1a;记录系统里都安装了啥、版本号是多少、依赖…

Pthon 本质详解

理解 Python 的本质&#xff0c;不能仅仅停留在“它是一门编程语言”这个层面&#xff0c;而要深入其设计哲学、核心机制、以及它在编程世界中所扮演的角色。 可以把 Python 的本质概括为一句话&#xff1a;Python 的本质是一种以“简洁优雅、易于读写”为核心设计哲学&#xf…

在Word文档中用键盘直接移动(复制)内容

如何快速在Word文档中剪切或复制内容到本文档的其他位置&#xff1f;不用剪切或复制&#xff0c;再粘贴&#xff0c;只需要先选中内容&#xff0c;然后按下F2&#xff08;ShiftF2&#xff09;剪切&#xff08;复制&#xff09;内容&#xff0c;再把光标放到目标位置按下回车键就…

VRTE 的应用程序部署到Ubuntu上 报错:bash: ./rb_exmd: No such file or directory

&#x1f6e0;️ 如何在 Ubuntu 上部署 VRTE 3.5 的 AraCM_IPC 应用程序在将 VRTE 3.5 的 AraCM_IPC 应用部署到 Ubuntu 系统时&#xff0c;可能会遇到运行失败的问题&#xff0c;提示类似&#xff1a;bash: ./rb_exmd: No such file or directory这通常并非文件不存在&#xf…

WD5202 非隔离降压转换芯片,220V降5V,输出电流80MA

解锁高效电源新境界&#xff1a;WD5202 非隔离降压转换芯片在当今电子设备飞速发展的时代&#xff0c;高效、稳定且低成本的电源解决方案至关重要。WD5202 作为一款卓越的非隔离降压转换芯片&#xff0c;正以其独特的性能和广泛的适用性&#xff0c;在众多领域崭露头角&#xf…

库函数版独立按键用位运算方式实现(STC8)

位运算&#xff1a;更加简便&#xff0c;单片机的内存就小&#xff0c;占的内存空间小一点案例&#xff1a; #include "GPIO.h" #include "Delay.h" #include "UART.h" // 串口配置 UART_Configuration #include "NVIC.h" // 中断…

RA4M2_MINI开发(15)----配置RTC时钟及显示时间

RA4M2_MINI开发.15--配置RTC时钟及显示时间 概述视频教学样品申请硬件准备参考程序源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置SWD调试口设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_ua…

使用Prometheus + Grafana + node_exporter实现Linux服务器性能监控

监控与告警系统部署&#xff1a;项目示例: "使用Prometheus Grafana node_exporter实现Linux服务器性能监控"描述: 在目标服务器部署node_exporter采集系统指标(CPU, 内存, 磁盘, 网络)。部署配置Prometheus Server&#xff0c;抓取node_exporter数据。部署配置Gra…

IP防护等级及检验方法说明

IP防护等级说明&#xff1a; IP (Ingress Protection) 防护等级系统是由 IEC 60529 标准定义的&#xff0c;用于衡量电气设备外壳对固体异物和液体进入的防护能力。IP代码通常由两位数字组成&#xff1a;第一位数字表示防固体异物等级(0-6)&#xff0c;第二位数字表示防水等级(…

最近看到的提示词相关内容汇总

看看能不能总结出来一些提示词最佳实践 一定要动手实践。 目前已经知道的提示词好习惯 角色扮演 操作步骤 质量要求 结构化输出 案例 Anthropic 视频中提到,实际上作为一门科学,我们可以通过以下手段尝试它。 最初的提示词,不断的尝试,直到最终的提示词。 优质提示词结…

github代理

自己整理的github代理 代理网址 https://g.cachecdn.ggff.net/ https://gitcode.com/ https://git.mxg.pub/ https://xiake.pro/ https://github.akams.cn/ 手动更新 hosts 方法 适合临时使用&#xff0c;Github 的ip经常变 Linux / MacOS hosts 路径&#xff1a;/etc/host…

交换机100G模块远距离连接踩坑记录

一、业务需求场景 两个办公场地之间相距较远,大约有几百米。网络系统规划两个办公场地的局域网之间通过100G 网络连接,几百米的距离使用多模光纤是不能满足需求的,因此选择使用单模光纤连接,交换机的模块选择使用华为QSFP28-100G-PSM4 模块,这个模块使用的是MPO接口。 两个…

精通Python异步编程:深入理解Async/Await在LLM应用中的实践

简介 在现代高性能应用开发中,特别是在处理大型语言模型(LLM)时,高效处理I/O密集型操作至关重要。Python的async和await关键字通过异步编程提供了优雅的解决方案。本综合指南将探讨如何利用这些特性构建响应迅速、高效的LLM驱动应用。 目录 理解同步与异步执行 Async/Await…