【ROS 最简单教程 013/300】ROS 话题通信 -- 自定义消息

ROS消息及消息自定义 1.创建新软件包xx_msgs,依赖项roscpp、 rospy、 std_msgs 、***message_generation、message_runtime***【消息包也是软件包,以msg结尾来区分】2.软件包添加msg目录,新建自定义消息文件,以.msg结尾。3.在CMakeLists.txt中,将新建的.msg文件加入add_message_files()4.在CMakeLists.txt中,去掉generate_messages()注释符号,将依赖的其他消息包名称添加进去。 阅读详情

在这里插入图片描述

ROS 通信机制:ROS是进程(也称为 Nodes)的分布式框架。 这些进程甚至还可分布于不同主机协同工作,所以结点之间如何通信非常重要!

⭐ 基本通信机制一:话题通信(发布订阅模式) 【用于不断更新的、少逻辑处理的数据传输场景】 👉话题通信理论图解必懂 指路
  • ROS Master 负责保管 Talker 📢和 Listener 注册的信息,并匹配话题相同的 Talker📢 与 Listener 👂
  • 帮助 Talker 📢与 Listener 👂 建立连接
  • 连接建立后,Talker 📢 可以发布消息,发布的消息会被 Listener 👂订阅

自定义 message 的三步实现:创建 msg 文件 → 编辑配置文件 → 编译

💜 根据需求创建 msg 文件 msgxxx.msg

正确路径:工作空间 / src / 功能包 / msg / msgxxx.msg 👉 ROS 文件结构指路

  • 每行包括字段类型和字段名称;可选择的字段类型如下:
    • int8, int16, int32, int64 (或者无符号类型: uint*)
    • float32, float64
    • string
    • time, duration
    • other msg files
    • variable-length array[] and fixed-length array[C]
  • 示例 person.msg 内容如下:
    string name
    uint16 age
    

💜 编辑配置文件

package.xml 中添加编译依赖与执行依赖

正确路径:工作空间 / src / 功能包 / package.xml 👉 ROS 文件结构指路

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
修改 CMakeLists.txt

正确路径:工作空间 / src / 功能包 / CMakeLists.txt 👉 ROS 文件结构指路

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs  # 需要加入 message_generation,必须有 std_msgs
  message_generation  ##
)

add_message_files(  
  FILES
  msgxxx.msg  ##
)

generate_messages(  # 生成消息时依赖于 std_msgs
  DEPENDENCIES
  std_msgs  ##
)

catkin_package(  # 执行时依赖
#  INCLUDE_DIRS include
#  LIBRARIES demo02_talker_listener
  CATKIN_DEPENDS roscpp rospy std_msgs message_runtime  ##
#  DEPENDS system_lib
)
  • 对于 C++,还需要进行多一步的配置 (可执行文件相关配置不熟悉的友友 👉快速体验)
    add_dependencies(可执行文件名称 ${PROJECT_NAME}_generate_messages_cpp)
    

💜 编译后即可正常使用

编译会自动生成:(可自己打开对应目录查看、学习)
  • C ++ 需要调用的中间文件(工作空间 / devel / include / 功能包 / msgxxx).
  • Python 需要调用的中间文件(工作空间 / devel / lib / python3 / dist-packages / 功能包 / msg / msgxxx).

【C++ 版】使用时 #include "功能包名/msgxxx.h",创建实例 功能包名::msgxxx x, x.name=?, x.age=? ... 即可使用消息~)

【python 版】使用时 from pkg.msg import msgxxx,创建实例 x=msgxxx(), x.name=?, x.age=? ... 即可使用消息~)

希望对你有帮助呀!!💜💜 如操作遇到任何问题,欢迎大家留言互助 ~ 一起加油叭 💦
欢迎关注、订阅专栏 【ROS 学习笔记】谢谢你的支持!


另外,使用ROS需要 C++ 或者Python的编程经验,我的博客主页也有相关的教程发布,需要的友友自取!
参考资料: ROS理论与实践在线文档, B站视频教程

ROS知识:消息自定义的操作 我们一般用的消息,是系统定义的;然而系统定义的消息格式往往不够用,需要自定义消息数据, 这里介绍自定义消息的几个步骤。 2 首先定义xxx.msg文件 自定义消息,首先需要定义一个数据结构文件如: Person.msg string name uint8 sex uint8 age uint8 unknown = 0 uint8 male =1 uint8 fmale = 2 Person.msg的存放路径: 3 第二步修改package.xml文件 定义编译依赖messa. 阅读详情

相关推荐

swupdate-签名验证

swupdate加密部分具体在中可以查看。

qq_28219531的博客 1148

ROS学习总结十七:自定义消息的使用

在初学ROS时,一般都是使用的ROS标准库,包括激光电云laserscan、位姿posetamp等。这些库基本满足了我们的日常使用,但是在开发时,难免会遇到一些情况使用标准库不太合适,这时候使用自己的自定义消息格式就变得非常方便。

YiYeZhiNian的博客 2789

【智能教育实践】MOOPer数据集在个性化学习路径规划中的应用

本文探讨了如何利用MOOPer数据集实现从“千人一面”到“千人千面”的个性化学习路径规划。通过分析学习者与平台的交互数据(如练习、反馈、讨论)并结合知识图谱,系统能够动态诊断学生知识状态,并为其推荐最优学习序列。文章详细介绍了基于数据驱动的推荐系统核心技术,包括知识追踪、图谱关联挖掘及排序策略,旨在解决传统在线教育的僵化问题,提升学习效率与动力。

read5的博客 230

ROS:话题消息(Message)的定义与使用

ROS:话题消息(Message)的定义与使用

立于皓月之边,不弱星光之势 3827

基于 Wi-Fi 的室内定位系统

目前,随着国内外相关从业人员的研究,研究者们提出了众多室内定位技术的理论与方法。在此仅讨论基于 Wi-Fi 的室内定位技术。 WI-FI室内定位 近年来Wi-Fi技术飞速发展,城市中的公共场所如大型超市商场、学校、企业等都已经广泛部署Wi-Fi。Wi-Fi室内定位技术已经出现了很多具有代表性的研究成果,如RADAR系统、Nibble系统、Weyes系统等室内定位系统。2012年,Google把Wi...

温染的笔记 9567

泛微 OA - 根据流程 requestid 获取流程中的附件

在泛微 OA 流程中,附件是通过加密上传的,如果在第三方系统想要调用 OA 系统获取 OA 附件,暂时没有很好的方法实现。但是可以在本地进行调用,得到附件信息,拿到这些信息后,可以用过 url 地址在本地下载。

小松鼠的博客 5829

使用ros发布自定义的消息

在拿相机玩ORB-SLAM3时涉及到了ROS topic的收发与时间同步问题,而且在得到相机位姿后还需要将位姿信息封装成一定的消息格式发布出去,这就又涉及到自定义消息的使用。以往只是在代码中改改相应的topic的名称就直接运行了,这里简单学习一下其中的消息收发机制。......

超爱吃小蛋糕的66的博客 3651

别再死记硬背了!用Amesim HCD库亲手搭建单向阀、锥阀、球阀模型(附详细参数设置)

本文详细介绍了如何使用Amesim HCD库从零构建单向阀、锥阀和球阀的仿真模型,帮助工程师摆脱死记硬背,掌握物理建模的核心技巧。通过实战案例和参数设置指南,读者将学会如何优化阀门动态响应、验证流量特性以及处理旋转运动等独特挑战,提升液压系统设计效率。

weixin_29248611的博客 501

启扬RK3588部署OpenClaw实战:边缘具身智能全链路落地指南

具身智能是AI从感知走向行动的关键范式,其核心在于将自然语言指令转化为视觉识别、位姿估计、运动规划与硬件执行的闭环流程。OpenClaw作为轻量级具身智能执行引擎,依赖NPU加速推理、实时Linux调度与ROS2通信中间件协同工作;而启扬RK3588凭借6TOPS NPU、双VPU、PCIe 3.0及预集成Ubuntu 22.04 BSP,成为少有的开箱即用边缘AI平台。本文聚焦OpenClaw在RK3588上的工程化落地,覆盖NPU内存池配置、RGA零拷贝图像处理、RT-Preempt内核加固、ROS2精

babing2770的博客 546

Unity URP项目里Post Processing死活没效果?别慌,这5个坑我帮你踩过了

本文详细解析了Unity URP项目中Post Processing效果失效的五大常见问题,包括渲染管线配置冲突、Volume作用域误判、摄像机参数漏配、Layer层级冲突和Profile引用异常。通过实际项目案例和代码示例,提供专业级解决方案,帮助开发者快速排查并修复后处理效果不生效的问题。

weixin_33721427的博客 333

芒果YOLO11改进44:主干Backbone篇之MobileViT::结合最新 ICLR2022 顶会|轻量通用的MobileViT结构(一)Transformer,轻量级、通用且移动友好的视觉转换

MobileViT::结合最新 ICLR2022 顶会|轻量通用的MobileViT结构(一)Transformer,轻量级、通用且移动友好的视觉转换

包括YOLOv5、YOLOv7、YOLOv8等模型改进 370

IROS 2024 | ROG-Map 技术解析:面向大场景高分辨率激光雷达运动规划的机器人中心占据栅格地图

ROG-Map:面向大场景高分辨率激光雷达运动规划的机器人中心占据栅格地图。

Robot-Nav的博客 649

080、多轴运动控制:插补器设计(螺旋线插补)

本文分享了螺旋线插补器设计的实战经验。针对五轴点胶机Z轴抖动问题,作者分析了螺旋线数学本质,提出基于归一化时间参数的速度规划方法,强调各轴严格同步的重要性。文章详细介绍了速度分解、加减速处理、嵌入式优化技巧(查表法、定点化),并总结了起点闭合、速度波动、数值处理等常见问题解决方案。最后给出5条实用建议:注重速度规划而非纯数学推导、预先仿真、保留调试接口、考虑机械谐振、防范编码器丢脉冲。通过优化插补周期、电子齿轮比和S形速度曲线,成功将设备良率从60%提升至95%。

m0_50546716的博客 85

ROS通信机制--话题通信自定义消息讲解C++代码示例

在ros中,内置的消息数据类型显然不能满足我们大部分需求。例如:小车激光雷达的数据、小车电机数据、小车的电池数据等等。ros也给我们提供了另外一个解决方案---使用自定义消息类型来进行数据的发布和订阅。与内置的数据类型相比多了很多配置,但代码编写上差异不大。

Sun 1603

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【ROS入门-7】ROS自定义消息

文章目录引言ROS系列文章ROS 消息文件自定义消息添加源码文件添加依赖修改编译规则尝试编译查看生成的消息源码文件使用自定义的消息关于ros::Time例程源码运行效果参考 引言 这篇文章讲解我们自己按需定义消息。 ROS系列文章 【ROS入门-1】手把手教你在Ubuntu18.04安装ROS Melodic 【ROS入门-2】带你看ROS文件系统及其工具 【ROS入门-3】嘴对嘴讲解...

杰杰的博客 7675

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ROS话题通信自定义msg

在 ROS 通信协议中,数据载体是一个较为重要组成部分,ROS 中通过 std_msgs 封装了一些原生的数据类型,比如:String、Int32、Int64、Char、Bool、Empty… 但是,这些数据一般只包含一个 data 字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如: 激光雷达的信息… std_msgs 由于描述性较差而显得力不从心,这种场景下可以使用自定义的消息类型。int8, int16, int32, int64 (或者无符号类型: uint*)string。

振华OPPO的博客世界 2613

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[ROS 系列学习教程] ROS话题(Topic)通信:自定义msg - 例程与讲解

在 ROS 通信协议中,数据是以约定好的结构传输的,即数据类型,比如Topic使用的msg,Service使用的srv,ROS 中的 std_msgs 封装了一些原生的数据类型,比如:Bool、Char、Float32、Int64、String等,但这些类型结构简单,常常不能满足我们的需要,这时我们可以使用自定义的消息类型。比如我们创建一个自定义消息,定义一个机器人的ID,位置(x, y)。

淋曦的进击手记 6233

ROS笔记(6)——自定义消息类型

在ROS中,可以使用自定义消息类型来表示应用程序中使用的特定数据类型。自定义消息类型可以用于发布和订阅ROS主题,也可以用于ROS服务和ROS动作等。这个目录通常被称为“消息目录”,其中包含了用于定义自定义消息类型的.msg文件。消息定义文件中还可以使用其他ROS标准消息类型或用户自定义的消息类型。这些行将告诉ROS在构建过程中使用消息生成器,并将自定义消息类型添加到该包的构建中。接下来,需要编写发布和订阅节点,这些节点将使用自定义消息类型。是自定义消息的名称。应该是在第一步中创建的消息定义文件的名称。

陈子青的博客 1940

ROS入门保姆级教程:7-ROS话题通信实现2:自定义消息类型(msg)

ROS话题通信(自定义message)

tjuzjc的博客 3398

ros发布和订阅msg,自定义msg

我是把发布方和订阅方都放在了一个src下,所以下图对应的add_executable里面的节点名字要改成自己定义的,否则就会报错,因为如果不改的话,就会生成以包名开头的节点,而又添加了其他的可执行文件,就会发生冲突。以下是订阅刚才发布的消息的示例:ConstPtr&表示拿到的消息的常量指针的引用。创建订阅对象的时候,我们可以不写范型,直接写topic,它会自动搜索;头文件要包含刚才的结构体,采用#include"包名/结构体.h"因为有自定义msg,所以CMakeLists需要进行更多的配置,

swsauto的博客 2030

ROS消息自定义、调用及问题解决

ROS消息自定义及调用

weixin_45702256的博客 1702

ROS自定义消息---发布数组和整型数据

ROS自定义消息---发布数组和整型数据

weixin_44126988的博客 5455

ROS第 7 课 话题消息的自定义与使用

注意:在自定义话题消息之前,需要先创建工作空间和功能包,具体操作过程可前往目录“ROS第4课 创建工作空间与功能包”查看文档。打开命令行终端。输入进入功能包所在目录的指令“roscd beginner_hiwonder”,并按下回车。注意:若出现提示“No such package/stack ‘beginner_hiwonder’”,即功能包不存在于环境变量ROS_PACKAGE_PATH中,具体解决方法可前往目录“ROS第4课 创建工作空间与功能包。

m0_73841621的博客 2497

ros(noetic)——自定义消息类型(学习笔记)

进入工作空间并创建软件包,相比以前要多使用两个创建消息包的依赖项message_generation和message_runtime从这里可以看出,所谓的消息包也是一个软件包。①引入新的自定义消息类型from my_msgs.msg import person #从my_msgs自定义消息包中导入person消息类型②修改发布者对象pub、消息包msg的消息类型,并填充消息包内容msg.name = "自定义消息类型~name~"msg.age = 28 #自定义消息类型的int64 age属性。

2401_90042281的博客 1214

【ROS1】07-话题通信中使用自定义msg

本文详细介绍了在ROS中创建和使用自定义消息的完整流程。主要内容包括: 自定义msg的必要性:相比标准消息类型,自定义msg能更好地表达特定业务数据,提高代码可读性和效率。 实现步骤: 创建msg文件并定义数据结构 配置package.xml和CMakeLists.txt 编译生成中间文件 应用案例:分别演示了C++和Python两种语言的实现方式,包含发布方和订阅方的完整代码示例,以及相关环境配置和编译说明。

ChaoChao66666的博客 1456

ROS实现自定义信息以及使用

ROS实现自定义数据包和使用

m0_49586319的博客 1300
上一篇: 快速设置 terminator 透明背景
下一篇: LeetCode 热题 HOT 100 (014/100)【宇宙最简单版】
CODE_RabbitV
博客等级 码龄7年 2931粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值