ROS2 工作空间中, CMakeLists.txt, setup.py和 package.xml的作用分别是?

提问

ROS2 工作空间中, CMakeLists.txt, setup.py和 package.xml的作用分别是?

回答

在一个 ROS 2 包(package)里,这三个文件各司其职:

  1. package.xml

    • 作用:声明包的元信息和依赖关系,是 ROS 构建系统和生态工具(如 rosdepvcs)识别、安装和管理包的依据。

    • 主要内容

      • <name><version><description><license><maintainer><author> 等元数据
      • <depend><build_depend><exec_depend> 等依赖声明
      • 导出项(<export>),如是否启用动态链接库、插件描述器等
  2. CMakeLists.txt

    • 作用:用 CMake 语法定义包的“构建规则”(build rules),告诉 colcon(背后调用 ament_cmake)怎样编译 C/C++ 代码、生成接口(messages/services/actions)、安装可执行文件和资源。

    • 常见流程

      1. find_package(ament_cmake REQUIRED)find_package(rclcpp REQUIRED) 等:找到所需的 ament/C++ 库
      2. 对于自定义消息:调用 rosidl_generate_interfaces()
      3. add_executable() / ament_target_dependencies():定义可执行节点及其依赖
      4. install():指定要安装的二进制、库、资源目录
      5. ament_package():标记 CMake 包的结束,注册给 ament
    • 注意:即使是纯 Python 包,也需要一个最小化的 CMakeLists.txt 来激活 ament_python(通常只包含 find_package(ament_python REQUIRED)ament_python_install_package())。

  3. setup.py

    • 作用:Python 标准的打包脚本,告诉 setuptools(由 ament_python 调用)如何安装你的 Python 模块、数据文件及定义命令行入口(console scripts)。

    • 主要内容

      • nameversionpackagesinstall_requires(对应 package.xml 中的 exec_depend)
      • entry_points={'console_scripts': [...]}:将脚本安装为可执行命令(如 ros2 run my_pkg talker
      • data_files:安装 launch 文件、配置文件、参数包等非代码资源

它们之间的配合

  • 当你在工作空间根目录执行 colcon build 时:

    1. colcon 扫描每个 package 目录,读取其 package.xml 判断是否要构建,并收集依赖关系。
    2. 如果包声明使用 ament_cmake(在 CMakeLists.txt 中出现 find_package(ament_cmake ...)),就走 CMake 流程;如果声明使用 ament_python,就会调用 setup.py
    3. CMake 流程中,package.xml 也会被安装到最终的安装目录中,以便运行时和上层工具再次读取依赖。
  • 简单对比

    文件用途构建时机典型使用场景
    package.xml元信息 + 依赖管理colcon 扫描依赖所有 ROS 2 包
    CMakeLists.txtC/C++ 构建脚本 + 自定义接口生成ament_cmakeC++ 节点、接口包、自定义消息包
    setup.pyPython 安装脚本 + console entry pointsament_python纯 Python 节点包

这样分工明确,才能保证 ROS 2 包既能被正确地发现和管理,又能根据你所写的 C++、Python 代码或自定义消息去编译/安装。

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

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

相关文章

Untiy打包安卓踩坑

Untiy 版本&#xff1a;unity6.1 运行环境&#xff1a;Win11 报错一&#xff1a; Assembly ‘Assets/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll’ will not be loaded due to errors: 解决方法&#xff1a;通过在 Unity Hub 中下载 iOS 包来解决 报错…

2025最新版!Windows Python3 超详细安装图文教程(支持 Python3 全版本)

大家好&#xff0c;我是你们的编程搬砖工~ 今天给大家安排一篇超级详细、超接地气、纯小白友好的《Python 安装教程 for Windows》&#xff0c;从下载到安装&#xff0c;从环境变量到验证&#xff0c;手把手带你装好 Python&#xff0c;不管你是 Python3.7、3.9、3.10 还是 3.1…

【IEEE/EI/Scopus检索】2025年第五届机器学习与大数据管理国际会议 (MLBDM 2025)

2025年第五届机器学习与大数据管理国际会议 (MLBDM 2025) 2025 5th International Conference on Machine Learning and Big Data Management(MLBDM 2025)会议地点&#xff1a;南京&#xff0c;中国 时间&#xff1a;2025年12月26日- 28日 ● 会议简介 2025年第五届机器学习…

前端实现ios26最新液态玻璃效果!

先看效果图 实现步骤 先定义玻璃元素和液态滤镜 <!--玻璃容器--> <div class"glass-container"><!--使用液态滤镜--><div class"glass-filter"></div><!--边沿效果--><div class"glass-specular">…

麒麟系统集成开发环境Kylin-IDE初体验,菜鸟小白入门教程

一、安装Kylin-IDE 1、打开应用商店&#xff0c;转到“软件”->“开发”页面&#xff0c;找到“Kylin-IDE”&#xff0c;点下载。&#xff08;也可以在搜索栏搜索Kylin-IDE&#xff09; 2、等待Kylin-IDE下载并自动安装完成。 3、双击桌面的Kylin-IDE图标。 4、自动弹出“开…

Python爬虫实战:研究Bleach库相关技术

一、引言 1.1 研究背景与意义 随着互联网的快速发展,网络上的数据量呈爆炸式增长。网络爬虫作为一种自动获取网页内容的技术,能够高效地从互联网上收集所需信息,为数据分析、信息检索、舆情监测等应用提供基础。然而,爬取到的网页内容往往包含大量的 HTML 标签、JavaScri…

分布假设学习笔记

文章目录 分布假设学习笔记自然语言处理中的分布假设应用场景适用范围 Word2vec、BERT和GPTWord2vecBERTGPT 假设成立吗 分布假设学习笔记 自然语言处理中的分布假设 分布假设&#xff08;Distributional Hypothesis&#xff09;是指&#xff1a;词语在相似上下文中出现&…

提升开发思维的设计模式(上)

1. 设计模式简介 [设计模式]&#xff08;Design pattern&#xff09; 是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的[可重用性]、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码…

LINUX613计划测put

FTP put ┌────────────────────────────────────────────────────────────────────┐│ • MobaXterm 20.0 • ││ (SSH client, X-serv…

NB-IoT-下行同步、广播信道和信号

这一篇主要讲解以下NPSS/NSSS/NPBCH信号的具体细节。还是依然先分析时频资源&#xff0c;再分析具体信号细节。 1、NPSS信道和信号 NPSS信号总是在每个无线帧的子帧5上。使用符号为3~13个OFDM符号&#xff0c;子载波使用0~10号&#xff08;11个子载波&#xff09;。如果部署为…

Java TCP网络编程核心指南

Java网络编程中TCP通信详解 TCP (Transmission Control Protocol) 是互联网中最核心的传输层协议&#xff0c;提供可靠的、面向连接的字节流传输服务。在Java网络编程中&#xff0c;TCP通信主要通过Socket和ServerSocket类实现。 一、TCP核心特性与Java实现 特性描述Java实现…

SVN迁移Git(保留历史提交记录)

第一步&#xff1a;安装git 下载地址&#xff1a;https://gitforwindows.org/ 第二步&#xff1a;先创建一个git创库&#xff0c;&#xff08;创建过程忽略&#xff09; 第三步&#xff1a;本地新建一个空的项目文件夹&#xff0c;用于存放要迁移的项目代码&#xff0c;我这创…

9.IP数据包分片计算

IP数据报分片计算 题目1&#xff1a;主机发送5400字节数据&#xff0c;MTU1400字节&#xff08;IPv4&#xff09;&#xff0c;填写分片后的字段值。 解答&#xff1a; 分片规则&#xff1a; 每片数据长度尽量接近MTU&#xff08;1400B&#xff09;&#xff0c;IP首部20B&…

pmset - 控制 macOS 系统电源、睡眠、唤醒与节能

文章目录 NAME概要描述SETTINGSETTINGSGETTING安全睡眠参数待机参数UPS 专用参数计划事件参数电源参数说明其他参数示例另请参阅文件 NAME pmset – manipulate power management settings概要 pmset [-a | -b | -c | -u] [setting value] [...]pmset -u [haltlevel percent]…

网络安全防护:点击劫持

目录 1、概念 2、攻击原理&#xff1a;视觉欺骗与层叠控制 3、点击劫持的危害 4、防御点击劫持 4.1 X-Frame-Options HTTP 响应头 (最直接有效) 4.2 Content-Security-Policy (CSP) HTTP 响应头 (现代、更强大) 4.3 客户端 JavaScript 防御 (Frame Busting) 1、概念 点…

Spring Boot常用依赖大全:从入门到精通

springboot <!-- Spring Boot 的 Spring Web MVC 集成 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 注解校验代替ifelse --> <de…

Linux系统下安装elasticsearch6.8并配置ik分词

准备安装包和环境 jdk 由于es是基于java开发的所以需要安装jdk。如果没有安装的话 jdk8下载 下载后配置环境变量安装。 es es6.8下载地址 elasticsearch-6.8.14.tar.gz ik分词器 es分词器需要下载对应es版本的 elasticsearch-analysis-ik-6.8.14.zip 安装es es不推荐使…

OceanBase (DBA)一面面经

1. Oracle高可用和ob高可用&#xff0c;和他们的实现方式&#xff1f; 2.ob的三副本了解吗&#xff0c;ob的三副本怎么保障强一致的&#xff1f; 3.三副本能实现强一致吗&#xff1f; 4.了解ob的数据协调协议吗&#xff1f;说说原理 5.聊聊Oracle&#xff0c;讲一些SQL调优…

PyTorch框架详解(1)

目录 代码会放在每条解释的后面 一.概念&#xff1a; 2.张量的概念&#xff1a; 3.张量的创建 4.张量的数据类型及转换 二.tensor和numpy互转 三.张量的运算 四.索引的操作 五.张量形状操作 维度交换&#xff1a; 六.张量拼接操作 代码会放在每条解释的后面 一.概念…

Spring Boot 与 Kafka 的深度集成实践(一)

引言 ** 在当今的软件开发领域&#xff0c;构建高效、可靠的分布式系统是众多开发者追求的目标。Spring Boot 作为 Java 生态系统中极具影响力的框架&#xff0c;极大地简化了企业级应用的开发流程&#xff0c;提升了开发效率和应用的可维护性。它基于 Spring 框架构建&#…