ROS2功能包、节点、可执行程序是怎么来的、之间的关系是什么?详解!

news2024/11/24 16:26:02

在一个简单的ros2工作空间中,一般有一下几个文件夹,

1、src

2、install

3、build

4、log

其中,存放功能包项目的文件夹在src中,一般情况下,当我们要创建一个功能包项目的时候,要在src文件夹下输入以下命令:

ros2 create pkg +my_cpp_node(功能包项目名)

上述命令后我们会在src文件夹下面得到一个功能包项目文件夹,这个文件夹的架构是

由于四部分组成:include文件夹、src文件夹、cmakelists.txt、package.xml。

其中my_cpp_node是我们所创建的功能包项目的名称。src文件夹中的my_firsrt_node.cpp是我们写的源文件。include/my_cpp_node文件夹下放我们的hpp格式的头文件。

注意1:那么我们的节点名称在哪里命名呢?

答案是在my_firsrt_node.cpp文件中,如下所示:

我们的节点名称是 cpp_node,在终端输入 ros2 node list查看:

为了验证这一点,我们修改节点名称为cpp_node_test:

编译运行后,用命令 ros2 node  list查看:

可见节点名称已经变为cpp_node_test。

注意2:那么我们的功能包的名称在哪里命名呢?

我们一开始创建功能包项目时候用的命令是:ros2 create pkg +my_cpp_node,

这里生成的my_cpp_node文件夹是功能包项目的文件夹的名称,而并不是我们功能包的名称,功能包的名称是能够在我们运行命令 ros2 run + 功能包名+ 可执行程序 这个命令调用的名称,这个功能包的名称在cmakelist.txt文件和package.xml文件中命名。

cmakelist.txt文件:

package.xml文件:

由上可知,我们把整个功能包名字命名为my_cpp_pkg22

编译后 在终端运行命令 ros2 run my_cpp_pkg22 +可执行程序名称 即可。

但是一般情况下功能包项目的名称(ros2 create pkg+功能包项目名称 创建的功能包项目)和功能包(在cmakelist.txt文件和package.xml文件中命名的功能包名称)的名称要一致!

注意三:那么我们的可执行程序在哪里命名呢?

在cmakelists.txt文件中:

编译后 运行命令:ros2 run my_cpp_pkg22 cpp_node1 

理解上述就能明白功能包、可执行程序、节点之间的关系!一个功能包项目可以有好几个可执行程序,也可以包含好几个节点。节点在可执行程序基础上建立,同一个可执行程序可以通过重映射创建不同的节点,相当于给复制节点并且重命名:

在终端输入命令:

ros2 run my_cpp_pkg22 cpp_node1 ros=args --ros-args --remap __node:=cpp_node2:

查看节点: 

发现节点名称改成了cpp_node2,其中,可执行程序和功能包还是原来的,只不过我们重映射了一个新的节点 名称是cpp_node2.

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

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

相关文章

安卓真机调试“no target device found“以及“ INSTALL_FAILED_USER_RESTRICTED“两个问题的解决办法

目录 1 no target device found问题解决办法 2 “INSTALL_FAILED_USER_RESTRICTED”解决办法 使用android studio 2023.2.1.23windows版本。手机为小米K70 Pro 1 no target device found问题解决办法 参考小米手机如何开启usb调试功能? (baidu.com) 1 联接手机…

PTT 实验

1. 实验网络拓扑 kali: 192.168.72.128win2008: 192.168.135.129 192.168.72.139win7: 192.168.72.149win2012:(DC) 192.168.72.131 2. EXPLOIT 一般来说,通用的ptt有三种方法: impacketmimikatzcs 这里就以impacket为例。 0x1. 黄金票据 前提条件…

【SpringBoot详细教程】-09-Redis详细教程以及SpringBoot整合Redis【持续更新】

🌲 Redis 简介 🌾 什么是Redis Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库、缓存、消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库 Redis是互联网技术领域使用最为广泛的存储中间件,它是「Remote DictionaryServic…

FP7209: 用于紫外线消毒灯的 升压LED恒流驱动芯片

现在社会对于居家消毒也越发重视起来。而居家消毒除了75%浓度酒精及各类消毒液外,利用紫外线灯给衣物表面、房间消毒也是一种很好的选择。FP7209 定位于低压线性恒流驱动,精度高、外围电路简单、使用方便且可靠性高,更可广泛应用于商业照明系…

【大数据入门 | Hive】函数{单行函数,集合函数,炸裂函数,窗口函数}

1. 函数简介: Hive会将常用的逻辑封装成函数给用户进行使用,类似于Java中的函数。 好处:避免用户反复写逻辑,可以直接拿来使用。 重点:用户需要知道函数叫什么,能做什么。 Hive提供了大量的内置函数&am…

深度学习-19-深入理解并训练自己的Tokenizer分词器

文章目录 1 tokenization是什么2 Tokenization方法简介2.1 单词级的Tokenization2.2 子词Tokenization技术2.3 举例说明2.3.1 字符级别2.3.2 词语级别2.3.3 子词级别3 训练自己的Tokenizer3.1 下载数据集3.2 huggingface的Tokenizer实现3.3 my-tokenizer.json字段说明3.4 验证一…

猫猫cpu的缓存

原题过长,放一下题目大意 题目大意 给你 m m m 个 1 1 1 到 n n n 之间的整数,你要找到若干个大小为固定的 k k k 的闭区间,使得所有这些数都在你找到的某个区间内。你需要最小化这些区间的并集的大小,并输出此大小。本题里…

[RabbitMQ] Spring Boot整合RabbitMQ

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

【AI驱动TDSQL-C Serverless 数据库技术实战营】基于Langchain的电商可视化分析

人工智能技术的飞速发展已深刻影响电商行业,显著提升了个性化推荐、用户行为分析、库存管理和市场预测等领域的效率。构建一个高效的AI驱动电商数据分析平台已成为行业的核心需求。本文里,我们将使用腾讯云的高性能应用平台 HAI(专为AI和科学…

物流行业中的AI平台架构与智能化应用

随着物流行业的迅速发展,尤其是电商、仓储、运输的需求日益增多,AI技术逐渐成为推动物流企业高效运营、提升服务水平的关键力量。AI平台架构为物流行业的各个环节提供了智能化解决方案,助力物流企业在仓储管理、运输调度、客户服务等方面实现…

netty之基于Netty搭建WebSocket,模仿微信聊天页面

前言 模仿微信聊天页面,开发一个基于Netty搭建WebSocket通信案例。Netty的应用方面非常广;聊天、MQ、RPC、数据等等,在5G到来的时候更加需要大量数据传输,Netty的应用也会更加广阔。 1:案例使用SpringBootNettyWebSocket搭建功能。…

c++MFC项目结构中有:外部依赖项、头文件,他们两个有啥区别,好像都是.h文件吧?

目录 头文件(Header Files) 特点 示例 外部依赖项(External Dependencies) 特点 示例 区别 作用和来源不同 内容不同 使用方式不同 结合 示例 总结 在C项目结构中,外部依赖项和头文件确实可能都包含.h文件…

力扣(leetcode)每日一题 983 最低票价 |动态规划

983. 最低票价 题干 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。 火车票有 三种不同的销售方式 : 一张 为期一天 的通…

Linux复习--Linux服务管理类(SSH服务、DHCP+FTP、DNS服务、Apache服务、Nginx服务、HTTP状态码)

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、SSH服务 1、问题引出 哪些设置能够提升SSH远程管理的安全等级? 2、SSH的登录验证方式-口令登录 3、SSH的登录验证方式-密钥登录 4、…

高质量的翻译如何提高界面可用性

翻译质量在提高界面可用性方面起着重要作用,特别是在全球受众使用的应用程序、网站和软件中。有效地翻译界面可以确保清晰度、连贯性和易用性,从而改善不同地区和语言的用户体验。以下是高质量翻译提高界面可用性的关键方法: 清晰直观的导航…

SAP HCM PE51工资单教程

作者:vivi,来源:osinnovation 一:故事背景 最近在做一个越南的ecp集成事情,因为客户是越南,所以对工资单没有国内一样,用微信小程序一套单独开发,而是使用标准的paylisp&#xff0…

【路径规划】路径平滑算法,A星算法拐点的圆弧化处理

摘要 A算法广泛应用于路径规划中,但其生成的路径通常在拐点处呈现不平滑的折线。为了提升路径的平滑性,本文提出了一种基于圆弧的平滑处理方法,用于对A算法产生的路径拐点进行优化。通过在MATLAB中进行仿真验证,该方法能够有效减…

9. 正则表达式

编程工具和技术是以一种混乱、进化的方式生存和传播的。获胜的并不总是最好或最杰出的工具,而是那些在合适的利基市场中发挥足够好的功能,或者恰好与另一项成功的技术相结合的工具。 在本章中,我将讨论这样一种工具--正则表达式。正则表达式是…

YOLOv11改进 | 上采样篇 | YOLOv11引入DySample轻量级动态上采样器

1. DySample介绍 1.1 摘要:我们提出了DySample,一个超轻量和有效的动态上采样器。虽然最近的基于内核的动态上采样器(如CARAFE、FADE和SAPA)的性能提升令人印象深刻,但它们引入了大量工作负载,主要是由于耗…

Spring Boot 中的拦截器 Interceptors

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 Spring Boot中的拦截器(Interceptor)是一种用于拦截和处理HTTP请求的机制,它基于Spring MVC框架中的HandlerInterceptor接口实现。拦截器允许在请求到达控制器&#…