ROS 学习应用篇(三)话题Topic学习之自定义话题消息的类型的定义与调用
自定义消息类型的定义
Person.msg文件的定义(数据接口文件的定义)
创建msg文件
首先在功能包下新建msg文件夹,接着在该文件夹下创建文件。
定义msg文件内容
一个消息最重要的就是数据结构类型。这就需要引入一个msg文件,用于定义一些宏,换句话说,就是定义字符串和数据类型。
一个人有名字,年龄和性别,名字是以字符串的方式输入的,性别的话男女是可以用1和2或者不知道的0来表示,同样年纪也是数字,所以年纪和性别都用unit8来定义。
package.xml文件的编译
还需要在文件中增加依赖的功能包,这就跟python库的引用一样。这一部分分两步,一个是build_depend一个是exec_depent。
这是我们通过终端建立功能包的时候输入的一些依赖,所以如果需要补充依赖的话,除了文件CMakeList.txt文件需要补充package.xml中也需要补齐。
我们自己做的功能包需要的依赖就安排这上面这部分代码的后面即可。
build_depend
build_depend是编译依赖,message_generation是一个消息的编译依赖。

exec_depent
exec_depent是执行依赖,message_runtime是一个消息的动态执行依赖。

CMakeList.txt文件的修改
添加依赖包
看来我猜的不错,都是在这里添加文件的依赖的。
链接Person.msg文件
添加这一字段,具体在哪里添加的话,可以通过搜索add_message找到该文档中注释的位置,然后输入就可以了。
链接ROS中已有的依赖
注意,这里是ros中的依赖,开头那里的依赖是ros外的依赖。
链接执行依赖
这一步对应的是exec_depent中添加的依赖,也就是message_runtime。
消息的调用
消息发布
这一部分可以参照(二)的内容,其实是一样的。区别在于主循环段不一样,特别的是name字段因为是string字符串所以需要.c_str()一下。


c++ python
消息订阅
跟之前的一模一样。
头文件调用
订阅与发布的主要调用方式,就在代码开始的地方输入头文件,这个Person.h头文件是catkin_make编译功能包后存放在工作空间devel/include下对应的功能包名文件夹下的。
![]()
![]()
c++ python
CMakeList.txt文件
该文件的修改和已有的消息类型的区别在于最后一行代码,最后一行代码是将这个可执行文件与msg文件产生一个依赖的关系,而原有的消息类型则不需要加入这一行代码也是可以运作的。
题外话
roscore打开的窗口叫rosmaster,它是一个婚介所,帮助发布节点与订阅节点产生联系,一旦二者产生联系,那么该窗口进程就可以被杀死,并不影响节点间的通讯。
相关文章:
ROS 学习应用篇(三)话题Topic学习之自定义话题消息的类型的定义与调用
自定义消息类型的定义 Person.msg文件的定义(数据接口文件的定义) 创建msg文件 首先在功能包下新建msg文件夹,接着在该文件夹下创建文件。 定义msg文件内容 一个消息最重要的就是数据结构类型。这就需要引入一个msg文件,用于…...
财税服务展示预约小程序的作用是什么
财税财政往往困扰着很多公司,尤其是公司里没有相应职员或工作压力大的情况下,不少商家就会寻找代理记账、审计服务、会计代理等服务的机构。 对财政服务代理机构(会计公司)来说,市场企业多而广,理论上来说…...
RT-Thread提供的网络世界入口 -net组件
作为一款在RTOS领域对网络支持很丰富的RT-Thread,对设备联网功能的支持的工具就是net组件。 位于/rt-thread/components/net路劲下,作为一款基础组件,env与Studio的工程配置项界面的配置项都依赖该目录下的Kconfig。 我们对网络功能的选择&am…...
分享一些有趣的MATLAB提示音(代码可直接复制)
先做一个声明:文章是由我的个人公众号中的推送直接复制粘贴而来,因此对智能优化算法感兴趣的朋友,可关注我的个人公众号:启发式算法讨论。我会不定期在公众号里分享不同的智能优化算法,经典的,或者是近几年…...
软件测试|selenium执行js脚本
JavaScript是运行在客户端(浏览器)和服务器端的脚本语言,允许将静态网页转换为交互式网页。可以通过 Python Selenium WebDriver 执行 JavaScript 语句,在Web页面中进行js交互。那么js能做的事,Selenium应该大部分也能…...
【源码复现】图神经网络之PPNP/APPNH
目录 1、论文简介2、论文核心介绍2.1、现有方法局限2.2、PageRank&Personalized PageRank2.3、PPNP&APPNP 3、源码复现3.1、模型总体框架3.2、PPNP3.3、APPNP3.4、MLP(两层) 1、论文简介 论文题目——《PREDICT THEN PROPAGATE: GRAPH NEURAL NETWORKS MEET PERSONALI…...
【算法与数据结构】131、LeetCode分割回文串
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题仍然使用回溯算法的一般结构。加入了一个判断是否是回文串的函数,利用起始和终止索引进…...
网络编程学习笔记
参考: 套接字通信部分 《TCP/IP 网络编程》以及《TCP/IP网络编程》学习笔记 socket 编程 1. 字节序 字节序,顾名思义字节的顺序,就是大于一个字节类型的数据在内存中的存放顺序,也就是说对于单字符来说是没有字节序问题的&…...
腾讯待办停运后怎么办呢?导出的ics文件怎么打开查看
待办类工具在日常工作中的应用是比较广泛的,很多人会选择使用待办软件记录备忘事项,其中一些提醒类的工具是比较广泛使用的。腾讯待办属于一款待办事项和日程管理工具,它通常是以微信小程序的形式,为大家提供时间管理规划…...
家长群如何发成绩?
老师们是否经常被家长们追问:“老师,我孩子的成绩出来了吗?”、“老师,我孩子考了多少分?”等等。要想解决这个问题,看完这篇文章你就可以让家长们能够自助查询孩子的成绩了。 一、什么是成绩查询系统&…...
数组区域检索的优化 --- 分块,线段树,树状数组
思考 首先让我们来思考一个问题,给定一个数组,和left与right的值,让你求这个数组中left到right之间元素的和,你会怎么计算?最简单的当然是遍历。如果有人问你这个问题的时候,他决对是会让你优化的ÿ…...
若依侧边栏添加计数标记效果
2023.11.13今天我学习了如何对若依的侧边栏添加技术标记的效果,如图: 我们需要用到两个页面: 先说子组件实现计数标记效果 1.item.vue <script> export default {name: MenuItem,functional: true,props: {icon: {type: String,defau…...
WebSocket技术解析:实现Web实时双向通信的利器
当今互联网的发展中,实时性成为了越来越重要的需求,特别是在Web应用程序中。传统的HTTP协议在处理实时性方面存在一些局限性,因此WebSocket技术的出现填补了这一空白。WebSocket是一种在单个TCP连接上进行全双工通信的协议,它允许…...
深圳联强优创手持PDA身份证阅读器 身份证核验手持机
身份证手持机外观比较小巧,方便携带,支持条码识别、人脸识别、NFC卡刷卡、内置二代证加密模块,可离线采集和识别二代身份证,进行身份识别。信息读取更便捷、安全高效。采用IP65高防护等级,1.5M防摔,可以适应…...
力扣labuladong——一刷day31
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣226. 翻转二叉树二、力扣116. 填充每个节点的下一个右侧节点指针三、力扣114. 二叉树展开为链表 二叉树解题的思维模式分两类: 1、是否可以…...
里氏代换原则
package com.jmj.principles.dmeo2.after;/*** 四边形接口*/ public interface Quadrilateral {double getLength();double getWidth();}package com.jmj.principles.dmeo2.after;/*** 长方形类*/ public class Rectangle implements Quadrilateral{private double length;priv…...
Illumination Adaptive Transformer
Abstract. 现实世界中具有挑战性的照明条件(低光、曝光不足和曝光过度)不仅会产生令人不快的视觉外观,还会影响计算机视觉任务。现有的光自适应方法通常单独处理每种情况。更重要的是,它们中的大多数经常在 RAW 图像上运行或过度…...
【教3妹学编程-算法题】给小朋友们分糖果 II
3妹:1 8得8,2 816, 3 8妇女节… 2哥 : 3妹,在干嘛呢 3妹:双11不是过了嘛, 我看看我这个双十一买了多少钱, 省了多少钱。 2哥 : 我可是一分钱没买。 3妹:我买了不少东西, …...
应急响应练习2
目录 1. 请提交攻击者的ip与系统版本 2. 攻击者通过某个组件漏洞获得服务器权限,请提交该组件的名称 3. 请提交攻击者首次攻击成功的时间 4. 请提交攻击者上传的webshell文件绝对路径 5. 请提交攻击者使用的webshell管理工具 6. 攻击者进一步留下的免杀的webs…...
JS算法练习 11.13
leetcode 2625 扁平化嵌套数组 请你编写一个函数,它接收一个 多维数组 arr 和它的深度 n ,并返回该数组的 扁平化 后的结果。 多维数组 是一种包含整数或其他 多维数组 的递归数据结构。 数组 扁平化 是对数组的一种操作,定义是将原数组部…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
