【ROS2】 核心概念2——功能包package

官方英文文档:Creating a package — ROS 2 Documentation: Humble documentation

中文参考:古月ROS2 功能包讲解 - 图书资源

省流,就学习一个命令

ros2 pkg create --build-type <build-type> <package_name>

ROS2的重要概念

工作空间(Workspace)​​:【ROS2 】工作空间(workspace)——ROS2核心概念1
​​功能包(Package)​​:解耦的功能代码,一个workspace可有不同的编译代码(python、C++
​​节点(Node)​​:机器人的“工作细胞”,最小执行单元,负责单一功能(如传感器驱动)。
​​话题(Topic)​​:节点间异步传递数据的“桥梁”,基于发布/订阅模型(如传感器数据流)。
​​服务(Service)​​:同步的“你问我答”机制,适用于需即时响应的短任务(如开关控制)。
​​动作(Action)​​:复杂行为的“流程管理”,支持长时间任务、反馈与取消(如导航到目标点)。
​​通信接口(Interface)​​:数据传递的“标准结构”,定义消息(.msg)、服务(.srv)、动作(.action)格式。
​​参数(Parameter)​​:机器人系统的“全局字典”,动态键值对配置(如超时时间、IP地址)。
​​分布式通信(Distributed Communication)​​:跨多计算平台的“任务分配”,支持机器人集群协同工作。
​​DDS(Data Distribution Service)​​:ROS2底层的“神经网络”,实现实时、可靠的通信中间件

功能包与workspace的关系

在源码下,有多个子代码,不同的编译方式

workspace_folder/src/cpp_package_1/CMakeLists.txtinclude/cpp_package_1/package.xmlsrc/py_package_1/package.xmlresource/py_package_1setup.cfgsetup.pypy_package_1/...cpp_package_n/CMakeLists.txtinclude/cpp_package_n/package.xmlsrc/

功能包的创建

创建命令

ros2 pkg create --build-type <build-type> <package_name>
ros2 pkg create --build-type --help
  • pkg:表示功能包相关的功能;

  • create:表示创建功能包;

  • package_name:新建功能包的名字

  • build-type:说明

  • 可选值 {cmake,  ament_cmake,ament_python} 表示新创建的功能包是C++还是Python的,

    • ament_cmake:使用C++或者C,那这里就跟,如果

    • ament_python:使用Python,;

    • cmake:开发非ROS2的C/C++库 → CMake(避免ROS2生态干扰)

扩展阅读: ament

  • ament 原意为​​植物的「柔荑花序」​(如柳絮),其特点是​​多个小单元紧密连接成链状结构​​,隐喻ROS2构建系统将​​多个独立功能包串联成完整应用​​的过程。
  • 这一命名延续了ROS生态的「自然隐喻」风格(如ROS1的catkin意为「柳絮」​
Q1: 能否在ament_cmake包中混合Python代码?
  • ✅ 可以,但需手动配置安装规则(如ament_python自动处理更便捷)。
Q2: 为什么ament_python不需要CMakeLists.txt
  • 因为它使用setup.py替代了CMake的角色,通过setuptools管理构建流程。

 
案例:分别创建c++ 和python版本的功能包

cd ~/dev_ws/src # 自定义机器人工程的src库
ros2 pkg create --build-type ament_cmake learning_pkg_c               # C++
ros2 pkg create --build-type ament_python learning_pkg_python # Python

c++ 创建后文件

python 创建后文件

编译功能包

在创建好的功能包中,我们可以继续完成代码的编写,之后需要编译和配置环境变量,才能正常运行:

cd ~/dev_ws
colcon build   # 编译工作空间所有功能包
source install/local_setup.bash

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

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

相关文章

Java内存对象实现聚合查询

文章目录 什么是聚合查询excel表格演示插入透视表透视表操作 sql聚合查询创建表和插入数据按照国家业务类型设备类型统计总销量按设备类型统计总销量 Java内存对象聚合查询普通对象方式创建对象聚合查询条件查询方法调用方式结果 Record对象方式Recor对象创建对象聚合查询条件查…

VSCode开发调试Python入门实践(Windows10)

我的Windows10上的python环境是免安装直接解压的Python3.8.x老版本&#xff0c;可参见《Windows下Python3.8环境快速安装部署。 1. 安装VSCode 在Windows 10系统上安装Visual Studio Code&#xff08;VS Code&#xff09;是一个简单的过程&#xff0c;以下是详细的安装方法与…

Tomcat DOS漏洞复现(CVE-2025-31650)

免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前…

使用Qt QAxObject解决Visual Fox Pro数据库乱码问题

文章目录 使用Qt QAxObject解决Visual Fox Pro数据库乱码问题一、问题背景&#xff1a;ODBC读取DBF文件的编码困境二、核心方案&#xff1a;通过QAxObject调用ADO操作DBF1. 技术选型&#xff1a;为什么选择ADO&#xff1f;2. 核心代码解析&#xff1a;QueryDataByAdodb函数3. 连…

HTTP知识速通

一.HTTP的基础概念 首先了解HTTP协议&#xff0c;他是目前主要使用在应用层的一种协议 http被称为超文本传输协议 而https则是安全的超文本传输协议 本章节的内容首先就是对http做一个简单的了解。 HTTP是一种应用层协议&#xff0c;是基于TCP/IP协议来传递信息的。 其中…

制作一款打飞机游戏26:精灵编辑器

虽然我们基本上已经重建了Axel编辑器&#xff0c;但我不想直接使用它。我想创建一个真正适合我们当前目的的编辑器&#xff0c;那就是编辑精灵&#xff08;sprites&#xff09;。这将是今天的一个大目标——创建一个基于模板的编辑器&#xff0c;用它作为我们实际编辑器的起点。…

mac下载homebrew 安装和使用git

mac下载homebrew 安装和使用git 本人最近从windows换成mac&#xff0c;记录一下用homebrew安装git的过程 打开终端 command 空格&#xff0c;搜索终端 安装homebrew 在终端中输入下面命令&#xff0c;来安装homebrew /bin/bash -c "$(curl -fsSL https://raw.githu…

【LeetCode Hot100】图论篇

前言 本文用于整理LeetCode Hot100中题目解答&#xff0c;因题目比较简单且更多是为了面试快速写出正确思路&#xff0c;只做简单题意解读和一句话题解方便记忆。但代码会全部给出&#xff0c;方便大家整理代码思路。 200. 岛屿数量 一句话题意 求所有上下左右的‘1’的连通块…

《社交类应用开发:React Native与Flutter的抉择》

社交类应用以令人目不暇接的速度更新迭代。新功能不断涌现&#xff0c;从更智能的算法推荐到多样化的互动形式&#xff0c;从增强的隐私保护到跨平台的无缝体验&#xff0c;每一次更新都旨在满足用户日益增长且多变的需求。面对如此高频的更新需求&#xff0c;选择合适的跨端框…

关于3D的一些基础知识

什么是2D/3D? 2D&#xff08;二维&#xff09;和3D&#xff08;三维&#xff09;是描述空间维度的概念&#xff0c;它们的核心区别在于空间维度、视觉表现和应用场景。以下是详细对比&#xff1a; 1. 定义与维度 • 2D&#xff08;二维&#xff09; • 定义&#xff1a;仅包…

大连理工大学选修课——机器学习笔记(7):集成学习及随机森林

集成学习及随机森林 集成学习概述 泛化能力的局限 每种学习模型的能力都有其上限 限制于特定结构受限于训练样本的质量和规模 如何再提高泛化能力&#xff1f; 研究新结构扩大训练规模 提升模型的泛化能力 创造性思路 组合多个学习模型 集成学习 集成学习不是特定的…

嵌入式产品运行中数据丢失怎么办?

目录 1、数据丢失现象与根源分析 2、硬件层优化 3、系统/驱动层优化 4、应用软件层优化 5、文件系统选型深度解析 5.1、NAND Flash 适用文件系统 5.2、eMMC 适用文件系统 6、系统挂载选项优化实践 嵌入式系统在运行过程中&#xff0c;尤其是在涉及频繁数据写入&#xf…

第十一节:性能优化高频题-响应式数据深度监听问题

解决方案&#xff1a;watch的deep: true选项或watchEffect自动追踪依赖 Vue响应式数据深度监听与性能优化指南 一、深度监听的核心方案 watch的deep: true模式 • Vue2实现&#xff1a;需显式声明深度监听配置 watch: {obj: {handler(newVal) { /* 处理逻辑 */ },deep: tru…

【Linux实践系列】:进程间通信:万字详解命名管道实现通信

&#x1f525; 本文专栏&#xff1a;Linux Linux实践项目 &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 与其等待完美的风&#xff0c;不如学会在逆风中调整帆的角度——所有伟大航程都始于此刻出发的勇气 ★★★ 本文前置知…

权力结构下的人才价值重构:从 “工具论” 到 “存在论” 的转变​

引言​ 在现在的公司管理里&#xff0c;常常能听到这样一种说法&#xff1a;“我用你&#xff0c;你才是人才&#xff1b;不用你&#xff0c;你啥都不是。” 这其实反映了一种很常见的评判人才价值的标准&#xff0c;就是只看公司的需求&#xff0c;把人才当作实现公司目标的工…

UE实用地编插件Physical Layout Tool

免费插件 https://www.fab.com/zh-cn/listings/a7fb6fcf-596f-48e9-83cc-f584aea316b1 可以通过物理模拟批量放置物体 不用再一个个摆放了 装饰环境从未如此简单&#xff0c;您不必再考虑对齐物体。 物理地放置物体&#xff0c;移动它们&#xff0c;在移动或在地图上放置物体…

Nerfstudio 环境配置与自有数据集(图片和视频)测试全方位全流程实战【2025最新版!!】

一、引言 神经辐射场(Neural Radiance Fields&#xff0c;简称NeRF)是近年来计算机视觉和图形学领域的一项革命性技术&#xff0c;它能够从2D图像中学习复杂的3D场景表示。然而&#xff0c;NeRF技术的实现和应用门槛较高&#xff0c;需要较为专业的计算机视觉和深度学习知识。…

Transformer:颠覆深度学习的架构革命与技术演进

2017年&#xff0c;谷歌团队在论文《Attention Is All You Need》中提出的Transformer架构&#xff0c;彻底改变了人工智能对序列数据的处理范式。它不仅解决了传统循环神经网络&#xff08;RNN&#xff09;的长期依赖和并行化难题&#xff0c;更催生了BERT、GPT等划时代模型&a…

原型模式(Prototype Pattern)详解

文章目录 1. 什么是原型模式&#xff1f;2. 为什么需要原型模式&#xff1f;3. 原型模式的结构4. 原型模式的基本实现4.1 基础示例&#xff1a;简单的原型模式4.2 使用Java的Cloneable接口 5. 深拷贝与浅拷贝5.1 浅拷贝&#xff08;Shallow Copy&#xff09;5.2 深拷贝&#xf…

掉馅饼,八分之一到二分之一:《分析模式》漫谈59

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 “Analysis Patterns”的第6章“存货和会计”原文&#xff1a; The transactions creation would then be the only place that could create entries. ... Providing only the trans…