ROS 话题通信实战详解|发布者 Publisher 与订阅者 Subscriber 完整代码实现(含运行截图 + 原理分析)
文章目录实验概述ROS 话题通信底层原理实验环境说明项目完整代码实现4.1 创建 ROS 功能包4.2 发布者 talker.py 代码4.3 订阅者 listener.py 代码项目编译与运行步骤运行效果展示常见报错问题解决实验总结与心得一、实验概述本次实验以 ROS 话题通信为核心实现发布者Publisher持续向指定话题发送字符串消息订阅者Subscriber监听话题并接收打印消息。实验目标理解 ROS Master、节点、话题、消息、发布 / 订阅五者的协作关系掌握 Python 实现 ROS 话题通信完整流程熟练使用 rosrun、roscore、catkin_make 等 ROS 基础命令区分话题通信的异步单向通信特性理解其适用场景。话题通信是机器人开发最常用的数据传输方式相机图像、激光雷达数据、底盘速度指令全部基于话题传输是机器人技术入门核心知识点。二、ROS 话题通信底层原理2.1 核心四大角色MasterROS 核心管理器节点注册中心记录所有节点与话题信息匹配发布者和订阅者Publisher 发布节点主动创建话题周期性向外发送自定义消息Topic 话题数据传输通道同一话题只能使用统一消息类型Subscriber 订阅节点向 Master 申请绑定指定话题收到消息自动触发回调函数。2.2 完整通信流程启动roscore开启 Master 管理中心发布节点启动向 Master 注册自己要发布的话题chatter订阅节点启动向 Master 声明订阅chatter话题Master 匹配两者信息建立发布者与订阅者点对点 TCP 连接发布者循环发送消息订阅者实时接收并执行回调逻辑。2.3 通信特点单向异步通信发布者只管发送无需等待订阅者回复多对多支持一个话题可多个发布者、多个订阅者适合高频连续数据流传输传感器、运动控制。三、实验环境说明操作系统Ubuntu 20.04 LTSROS 版本ROS Noetic Ninjemys编程语言Python3依赖库rospy、std_msgs标准消息库四、项目完整代码实现4.1 创建工作空间与功能包打开终端依次执行以下命令搭建项目工程# 1. 创建ROS工作空间 mkdir -p ~/topic_ws/src cd ~/topic_ws/src # 2. 创建话题通信功能包声明依赖 catkin_create_pkg topic_demo rospy roscpp std_msgs # 进入功能包新建脚本文件夹存放python代码 cd topic_demo mkdir scripts4.2 发布者代码 talker.py路径topic_ws/src/topic_demo/scripts/talker.py#!/usr/bin/env python3 # 导入ros核心库与标准字符串消息 import rospy from std_msgs.msg import String def talker(): # 1. 创建发布对象话题名chatter消息类型String消息队列长度10 pub rospy.Publisher(chatter, String, queue_size10) # 2. 初始化节点节点名称talker_nodeanonymous自动加后缀避免重名 rospy.init_node(talker_node, anonymousTrue) # 设置发布频率1Hz每秒发送1条消息 rate rospy.Rate(1) count 0 # 消息计数变量 # 未关闭ros节点时循环发送 while not rospy.is_shutdown(): # 拼接发送内容 send_msg fROS话题通信测试消息当前计数{count} # ROS日志打印输出相当于print rospy.loginfo(f【发布端】发送消息{send_msg}) # 将消息发布到chatter话题 pub.publish(send_msg) count 1 # 控制发送频率休眠1秒 rate.sleep() if __name__ __main__: try: talker() # 捕获CtrlC终止程序异常 except rospy.ROSInterruptException: pass4.3 订阅者代码 listener.py路径topic_ws/src/topic_demo/scripts/listener.py#!/usr/bin/env python3 import rospy from std_msgs.msg import String # 消息回调函数收到话题消息自动执行 def msg_callback(data): # 打印接收到的消息内容 rospy.loginfo(f【订阅端】成功接收消息{data.data}) def listener(): # 初始化订阅节点 rospy.init_node(listener_node, anonymousTrue) # 创建订阅对象订阅chatter话题绑定回调函数msg_callback rospy.Subscriber(chatter, String, msg_callback) rospy.loginfo(订阅节点启动等待接收chatter话题消息...) # 循环阻塞持续监听话题消息 rospy.spin() if __name__ __main__: listener()4.4 添加脚本执行权限代码写完后必须赋予可执行权限否则 rosrun 无法启动节点cd ~/topic_ws/src/topic_demo/scripts chmod x talker.py listener.py五、项目编译与运行步骤5.1 编译工作空间# 返回工作空间根目录编译 cd ~/topic_ws catkin_make # 刷新环境变量让系统识别新建功能包 source devel/setup.bash5.2 多终端分步启动需要 3 个独立终端窗口终端 1启动 ROS 核心 Masterroscore输出started core service [/rosout]代表启动成功。终端 2运行发布者节点rosrun topic_demo talker.py终端持续打印发送日志循环输出计数消息。终端 3运行订阅者节点rosrun topic_demo listener.py启动瞬间接收发布者实时推送的所有消息。六、运行效果展示这里插入你的运行截图文字描述如下终端 1roscore 启动成功显示核心服务运行终端 2发布者持续输出【发布端】日志计数持续自增终端 3订阅者实时同步打印和发布端完全一致的消息无延迟丢包。现象说明发布者与订阅者节点建立通信话题chatter数据传输正常实验功能全部实现。七、常见报错问题解决rosrun 找不到包解决执行source devel/setup.bash刷新环境变量PermissionError 权限不足解决给 py 文件添加chmod x执行权限消息接收空白 / 无输出解决确认发布者、订阅者话题名称完全一致大小写敏感roscore 启动失败端口占用解决执行killall roscore关闭残留进程后重启。八、实验总结与心得通过本次 ROS 话题通信实验我完整掌握了机器人底层最基础的通信模型理清了 Master、发布节点、订阅节点、话题消息之间的协作逻辑。话题通信适合传感器连续数据流传输是自动驾驶、移动机器人底盘控制的基础发布者依靠rospy.Publisher创建通道订阅者通过回调函数异步处理消息rospy.spin()是订阅节点持续监听的核心开发流程固定创建工作空间→新建功能包→编写节点代码→授权→编译→多终端分步调试实际开发中需要严格统一话题名、消息类型否则会出现节点无法通信的问题。本次实验为后续 ROS 服务通信、动作通信、自定义消息打下坚实基础理解异步通信模型对后续人工智能机器人项目开发至关重要。

相关新闻

YOLOv10模型改进-Neck改进-第71篇:YOLOv10改进策略【Neck】| PAFPN路径增强特征金字塔

YOLOv10模型改进-Neck改进-第71篇:YOLOv10改进策略【Neck】| PAFPN路径增强特征金字塔

一、本文介绍 本文记录的是利用PAFPN(Path-Augmented Feature Pyramid Network)改进YOLOv10的Neck部分,实现路径增强的特征融合。 二、PAFPN模块介绍 2.1 设计出发点 传统FPN的特征融合路径有限,PAFPN通过增加额外的融合路径,实现更丰富的特征融合。 2.2 模块结构 P…

2026/7/6 3:24:18阅读更多 →
AI 应用真正落地前,企业最需要先想清楚的三个问题

AI 应用真正落地前,企业最需要先想清楚的三个问题

引言:热潮之下的冷思考 2024年到2025年,几乎所有行业都在喊"AI转型"。大厂发布产品路线图,咨询公司推出AI战略框架,各类峰会上的PPT塞满了"智能化"、“降本增效”、“大模型赋能”。但一个残酷的现实是&#…

2026/7/6 3:24:18阅读更多 →
第五次作业提交

第五次作业提交

CSDN博客完整文章## 一、实验环境 远程连接工具:Xshell 操作系统:Ubuntu Linux 实验说明:所有命令均在Xshell终端实操,配套运行截图记录结果,梳理完整命令知识框架。 第一部分:Shell文本处理命令知识框架 1…

2026/7/6 3:19:18阅读更多 →
Web安全实战:SQL注入、XSS、CSRF、SSRF漏洞攻防与防御实践

Web安全实战:SQL注入、XSS、CSRF、SSRF漏洞攻防与防御实践

1. 项目概述:从“知道”到“防住”的实战之路干了这么多年安全,我越来越觉得,Web安全这东西,光看理论、背概念,真到事儿上一点用没有。你背得再熟,知道SQL注入是“通过构造特殊SQL语句来操作数据库”&#…

2026/7/6 9:44:55阅读更多 →
如何在5分钟内免费解锁9大网盘高速下载权限

如何在5分钟内免费解锁9大网盘高速下载权限

如何在5分钟内免费解锁9大网盘高速下载权限 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 / 夸克…

2026/7/6 9:44:55阅读更多 →
Undici WebSocket安全实战:认证、授权与生产环境部署指南

Undici WebSocket安全实战:认证、授权与生产环境部署指南

1. 项目概述:为什么Undici的WebSocket安全值得你投入精力如果你正在用Node.js构建需要WebSocket连接的实时应用,比如在线聊天、实时仪表盘或者游戏服务器,那你大概率听说过或者已经在用undici这个库了。作为Node.js核心团队维护的高性能HTTP/…

2026/7/6 9:44:55阅读更多 →
2026年7月女装单品推荐干货|连衣裙/上衣/外套/内衣质感单品甄选指南

2026年7月女装单品推荐干货|连衣裙/上衣/外套/内衣质感单品甄选指南

深耕穿搭领域不难发现,真正能够提升个人气质、适配多场景的女装单品,核心不在于堆砌潮流元素,而在于设计、面料、剪裁与工艺的全方位平衡。当下女装消费市场两极分化明显,大众平价服饰主打款式更新,却普遍存在版型松散…

2026/7/6 9:44:55阅读更多 →
IEEE 9节点系统综合负荷建模与参数辨识Matlab全流程仿真工具包

IEEE 9节点系统综合负荷建模与参数辨识Matlab全流程仿真工具包

本文还有配套的精品资源,点击获取 简介:面向电力系统暂态分析的教学与科研需求,提供一套即装即用的Matlab/Simulink综合负荷建模与参数辨识完整流程。内含已配置好的IEEE 9节点系统Simulink模型(IEEE_9bus_new_wow_mach_9_CLM.…

2026/7/6 9:44:55阅读更多 →
基于LLM的智能测试框架testzeus-hercules:从Gherkin到自动化执行

基于LLM的智能测试框架testzeus-hercules:从Gherkin到自动化执行

1. 项目概述:当LLM成为你的全能测试工程师 如果你和我一样,在软件测试领域摸爬滚打了十几年,从Selenium的脚本维护地狱,到Pytest的框架封装,再到面对现代Web应用频繁的UI变更、复杂的业务逻辑和跨平台需求,…

2026/7/6 9:39:55阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/6 4:26:20阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/6 2:48:33阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/6 0:10:35阅读更多 →
Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南

Seraphine:基于LCU API的英雄联盟智能游戏助手技术解析与应用指南 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 技术架构先行:官方接口的合规应用 你是否曾在BP阶段手忙脚乱&#x…

2026/7/6 0:03:39阅读更多 →
多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理

多协议远程连接管理工具mRemoteNG:告别混乱,统一你的远程桌面管理 【免费下载链接】mRemoteNG mRemoteNG is the next generation of mRemote, open source, tabbed, multi-protocol, remote connections manager. 项目地址: https://gitcode.com/gh_m…

2026/7/6 0:03:39阅读更多 →
COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南

COUNT(DISTINCT) 与 GROUP BY 去重统计:5 亿数据量下的性能实测与选型指南在数据分析和处理领域,去重统计是最基础也是最频繁使用的操作之一。当数据量达到亿级规模时,不同的去重统计方法在性能上可能产生天壤之别。本文将基于 5 亿行数据的实…

2026/7/6 0:03:39阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/6 4:45:01阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/6 4:45:01阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/6 4:45:03阅读更多 →