【ROS2零基础入门】纯Python实现三大核心通信机制(服务/话题/动作),无需装ROS2直接运行

Ros2学习梳理_汇总(赵虚左老师) 本篇博客对学习Ros2内容做一个记录,以便随时观看 阅读详情

💡 博主深耕ROS机器人开发多年,主打零基础友好、实战向教程!

一、ROS2三大通信机制核心概述

通信机制是ROS2机器人系统的灵魂,机器人所有的传感器数据传输、指令控制、任务执行,都依赖这三种通信方式。三者针对不同业务场景设计,核心差异集中在同步异步、是否反馈、任务类型三个维度。

1.1 核心特性对比(新手必背)

通信机制

通信模式

进度反馈

同步/异步

核心适用场景

服务通信 Service

请求-响应(一对一)

无(仅最终结果)

同步阻塞

一次性短时任务:参数查询、单次指令执行、数据校验

话题通信 Topic

发布-订阅(一对多)

无

异步非阻塞

持续数据流:雷达/相机传感器数据、机器人状态广播

动作通信 Action

目标-反馈-结果

有(实时进度)

异步非阻塞

长时间任务:自主导航、轨迹运动、机械臂抓取

1.2 通俗核心区别

  • 话题:广播模式,只管发、不管收,适合源源不断的数据传输,无应答机制

  • 服务:问答模式,一问一答,客户端等待服务端响应,阻塞式通信

  • 动作:进阶版服务,专门解决长耗时任务,支持实时进度反馈、任务取消,是ROS2最灵活的通信方式

二、整体架构设计(核心思路)

为最大程度还原原生ROS2的设计逻辑,本次手写模拟系统搭建了轻量化核心架构,完全对标ROS2节点通信逻辑,五大核心类各司其职:

  • Node 节点类:核心管理类,统一管理话题、服务、动作、定时器,模拟ROS2节点核心能力

  • Topic 话题类:实现发布/订阅异步通信逻辑

  • Service 服务类:实现请求/响应同步阻塞通信

  • Action 动作类:实现带进度反馈的长任务异步通信

  • Logger 日志类:模拟ROS2时间戳日志输出,贴合原生开发体验

核心设计亮点:通过全局静态字典实现多节点数据共享,完美复刻ROS2分布式节点通信的核心特性。

三、完整可运行代码

以下代码无需任何ROS2依赖,纯原生Python库,直接复制保存为 robot_comm.py 即可运行。


import threading import time from datetime import datetime class Topic: """ ROS2 话题通信模拟类 核心:发布/订阅模式,一对多异步通信 """ def __init__(self, name): self.name = name self.subscribers = [] # 存储所有订阅者回调函数 def subscribe(self, callback): """订阅话题,注册回调函数""" self.subscribers.append(callback) def publish(self, message): """发布消息,异步触发所有订阅者回调""" for cb in self.subscribers: # 守护线程异步执行,不阻塞主线程 threading.Thread(target=cb, args=(message,), daemon=True).start() class Service: """ ROS2 服务通信模拟类 核心:请求/响应模式,同步阻塞一对一通信 """ def __init__(self, name, callback): self.name = name self.callback = callback # 服务处理回调 def call(self, request): """同步调用服务,等待结果返回""" return self.callback(request) class Action: """ ROS2 动作通信模拟类 核心:目标下发+实时反馈+最终结果,长耗时任务专用 """ def __init__(self, name, execute_callback): self.name = name self.execute_callback = execute_callback def send_goal(self, goal, feedback_callback=None, result_callback=None): """下发任务目标,异步执行并推送反馈与结果""" def run(): # 执行核心任务,实时推送反馈 result = self.execute_callback(goal, feedback_callback) # 任务结束推送最终结果 if result_callback: result_callback(result) threading.Thread(target=run, daemon=True).start() class Node: """ ROS2 节点核心类 统一管理全局话题、服务、动作、定时器,模拟分布式节点通信 """ # 全局通信资源,多节点共享 _global_topics = {} _global_services = {} _global_actions = {} def __init__(self, name): self.name = name self.timers = [] self._timer_running = True def create_publisher(self, topic_name): """创建话题发布者,无则新建话题""" if topic_name not in Node._global_topics: Node._global_topics[topic_name] = Topic(topic_name) return Node._global_topics[topic_name] def create_subscription(self, topic_name, callback): """创建话题订阅者,绑定回调函数""" if topic_name not in Node._global_topics: Node._global_topics[topic_name] = Topic(topic_name) Node._global_topics[topic_name].subscribe(callback) def create_service(self, service_name, callback): """注册服务,对外开放调用接口""" Node._global_services[service_name] = Service(service_name, callback) def create_action(self, action_name, execute_callback): """注册动作服务,接收客户端目标""" Node._global_actions[action_name] = Action(action_name, execute_callback) def get_service(self, service_name): """获取全局服务对象,用于客户端调用""" return Node._global_services.get(service_name) def get_action(self, action_name): """获取全局动作对象,用于客户端下发目标""" return Node._global_actions.get(action_name) def create_timer(self, period, callback): """创建定时器,模拟ROS2周期任务""" def timer_loop(): while self._timer_running: callback() time.sleep(period) t = threading.Thread(target=timer_loop, daemon=True) t.start() self.timers.append(t) def stop_timers(self): """停止当前节点所有定时器""" self._timer_running = False def get_logger(self): """获取日志器,统一格式输出""" return Logger(self.name) class Logger: """自定义日志类,带时间戳+节点名称,贴合ROS2日志风格""" def __init__(self, node_name): self.node_name = node_name def info(self, msg): now = datetime.now().strftime("%H:%M:%S") print(f"[{now}] [{self.node_name}] INFO: {msg}") # ====================== 三大通信演示案例 ====================== def run_service_demo(): """服务通信演示:两数加法计算(典型短时单次任务)""" print("\n" + "="*50) print("=== 服务通信演示 (Service) | 同步问答模式 ===") print("="*50 + "\n") # 1. 创建服务端节点,注册服务 server_node = Node("service_server") def add_two_ints(request): """服务核心处理函数:接收请求,返回计算结果""" a, b = request['a'], request['b'] res = a + b server_node.get_logger().info(f"接收请求:{a} + {b} = {res}") return {"sum": res} server_node.create_service("add_two_ints", add_two_ints) server_node.get_logger().info("加法服务已启动,等待客户端请求...") time.sleep(1) # 2. 创建客户端节点,调用服务 client_node = Node("service_client") service = client_node.get_service("add_two_ints") # 多组测试用例 test_list = [(2, 3), (10, 20), (100, 200)] for num1, num2 in test_list: resp = service.call({"a": num1, "b": num2}) client_node.get_logger().info(f"调用成功:{num1} + {num2} = {resp['sum']}") time.sleep(0.5) def run_topic_demo(): """话题通信演示:周期性广播消息(典型持续数据流)""" print("\n" + "="*50) print("=== 话题通信演示 (Topic) | 异步发布订阅 ===") print("="*50 + "\n") # 1. 创建发布者、订阅者节点 pub_node = Node("topic_publisher") sub_node = Node("topic_subscriber") # 2. 订阅者回调函数:接收并打印话题消息 def sub_callback(msg): sub_node.get_logger().info(f"订阅到消息:{msg['data']}") sub_node.create_subscription("chatter_topic", sub_callback) # 3. 发布者周期性发布消息 pub = pub_node.create_publisher("chatter_topic") count = [0] def pub_task(): msg_data = f"ROS2 Topic 测试消息 {count[0]}" pub.publish({"data": msg_data}) pub_node.get_logger().info(f"发布消息:{msg_data}") count[0] += 1 # 每0.5秒发布一次 pub_node.create_timer(0.5, pub_task) pub_node.get_logger().info("话题发布者已启动,持续广播消息中...") # 运行4秒后停止 time.sleep(4) pub_node.stop_timers() pub_node.get_logger().info("话题演示结束,定时器已停止") def run_action_demo(): """动作通信演示:进度递增任务(典型长耗时带反馈任务)""" print("\n" + "="*50) print("=== 动作通信演示 (Action) | 实时反馈长任务 ===") print("="*50 + "\n") # 1. 创建动作服务端,注册任务执行函数 action_server = Node("action_server") def progress_task(goal, feedback_cb): """长耗时任务:根据目标值模拟进度加载""" target = goal["target"] action_server.get_logger().info(f"接收任务目标:进度加载至 {target}") # 循环推送实时进度 for i in range(target + 1): if feedback_cb: feedback_cb({"current_progress": i}) time.sleep(0.3) # 返回最终结果 return {"final_result": f"任务完成,最终进度:{target}"} action_server.create_action("progress_action", progress_task) action_server.get_logger().info("动作服务端已启动,等待任务目标...") time.sleep(1) # 2. 创建动作客户端,下发任务并监听反馈、结果 action_client = Node("action_client") action = action_client.get_action("progress_action") # 实时进度回调 def feedback_handler(feedback): action_client.get_logger().info(f"实时进度:{feedback['current_progress']}") # 任务结束结果回调 def result_handler(result): action_client.get_logger().info(f"任务最终结果:{result['final_result']}") # 下发目标:加载至进度5 action.send_goal({"target": 5}, feedback_handler, result_handler) time.sleep(3) if __name__ == '__main__': import sys print("="*50) print("=== ROS2 三大通信机制 Python 模拟系统 ===") print("=== 支持参数运行:1服务 2话题 3动作 4全部 ===") print("="*50) # 解析运行参数 run_mode = sys.argv[1] if len(sys.argv) > 1 else "4" if run_mode == "1": run_service_demo() elif run_mode == "2": run_topic_demo() elif run_mode == "3": run_action_demo() elif run_mode == "4": run_service_demo() run_topic_demo() run_action_demo() else: print("参数错误!可选参数:1/2/3/4")

四、代码逐模块深度解析

很多同学只会抄代码,不懂底层逻辑!下面拆解三大通信的核心工作流程,帮你吃透原理,适配真实ROS2开发。

4.1 服务通信(Service)解析

核心特性:同步阻塞、一对一、无中间反馈、仅最终响应

工作流程:

  1. 服务端创建节点,定义任务处理函数,注册全局服务名称

  2. 客户端通过服务名称获取服务对象,传入请求参数

  3. 服务端同步执行任务,处理完成后返回结果

  4. 客户端阻塞等待,接收结果后继续执行后续代码

适用场景总结:所有短时、单次、需要应答的操作,比如查询机器人姿态、设置设备参数、开关设备等。

4.2 话题通信(Topic)解析

核心特性:异步非阻塞、一对多、无应答、持续广播

工作流程:

  1. 订阅者先绑定话题名称,注册消息接收回调函数

  2. 发布者通过定时器周期性生成数据,发布到指定话题

  3. 话题自动遍历所有订阅者,异步触发回调函数

  4. 发布者无需等待订阅者处理,持续发布,互不阻塞

适用场景总结:所有连续流式数据,激光雷达、摄像头、IMU传感器数据全部基于话题通信,是ROS2使用频率最高的通信方式。

4.3 动作通信(Action)解析

核心特性:异步非阻塞、带实时进度、支持长任务、有最终结果

工作流程:

  1. 服务端注册动作任务,定义任务执行逻辑和反馈机制

  2. 客户端下发任务目标,同时绑定进度、结果回调

  3. 服务端后台异步执行任务,过程中持续推送进度

  4. 任务完成后推送最终结果,客户端全程不阻塞

适用场景总结:所有耗时数秒以上的机器人任务,导航行走、机械臂运动、路径追踪等,是复杂机器人任务的核心通信方式。

五、代码运行方式与效果

5.1 运行命令

将代码保存为 robot_comm.py,终端执行以下命令:


# 运行全部通信演示(默认) python robot_comm.py # 单独运行服务通信 python robot_comm.py 1 # 单独运行话题通信 python robot_comm.py 2 # 单独运行动作通信 python robot_comm.py 3

5.2 核心运行效果

1. 服务通信:依次接收三组加法请求,同步返回计算结果,请求与响应一一对应

2. 话题通信:每0.5秒自动发布消息,订阅者实时接收,持续输出数据流

3. 动作通信:逐步输出0-5的实时进度,任务结束后输出最终完成结果,完美体现长任务反馈特性

六、核心技术亮点(面试/实操重点)

6.1 分布式节点共享机制

通过Node 类的全局静态字典存储所有话题、服务、动作资源,不同节点可以跨实例共享通信资源,完美复刻ROS2分布式通信的核心设计思想,而非简单的单进程模拟。

6.2 异步线程隔离设计

所有话题消息推送、动作任务执行均采用守护线程实现异步处理,不会阻塞主线程,贴合真实ROS2节点的异步并发机制,避免任务卡死问题。

6.3 可拓展的定时器系统

封装了可创建、可停止的定时器功能,模拟ROS2 Timer 周期任务,可直接拓展用于传感器周期采集、状态实时更新等场景。

七、新手常见误区避坑

  • ❌ 误区1:认为服务和动作功能重复 ✅ 纠正:服务只能短时单次应答,动作支持进度反馈,长任务必须用Action ❌ 误区2:话题通信可以做指令控制 ✅ 纠正:话题无应答,无法确认指令是否执行,控制指令必须用Service/Action ❌ 误区3:所有通信都是同步执行 ✅ 纠正:仅Service同步阻塞,Topic和Action均为异步非阻塞 八、学习总结与进阶拓展8.1 本文核心收获通过无依赖Python模拟,彻底理清了ROS2三大通信的底层逻辑:所有真实ROS2机器人开发,都是基于这三种通信机制组合实现。8.2 进阶拓展方向(可自主开发)九、写在最后ROS2学习切忌死记硬背,真正掌握核心原理,才能在实际项目中灵活选用通信方式。本文通过纯Python手写模拟,剥离了复杂的ROS2环境依赖,让大家聚焦通信本质。代码亲测可直接运行,适合新手入门、课程设计、面试复习、底层原理学习。💖 如果对你有帮助,欢迎点赞+收藏+关注!后续持续更新ROS2零基础实战教程!

    • 话题:异步流式传输,适配持续数据

    • 服务:同步问答传输,适配单次指令

    • 动作:异步反馈传输,适配长时任务

    • 新增ROS2参数服务器功能,实现节点参数动态配置

    • 添加消息序列化与反序列化,贴合原生ROS2消息机制

    • 实现任务取消功能,完善Action动作通信体系

    • 对接真实ROS2节点,实现模拟节点与原生节点互通

【ros2】ROS2话题(Topic)通信完全指南:订阅与发布详解 标准消息:ROS2内置多种消息类型(如std_msgs:字符串:图像数据:运动速度指令自定义消息:需在接口功能包中定义.msg文件(如int32 age使用前需编译接口包,并在发布者/订阅者中导入依赖。话题是ROS2中实现异步数据传输的核心机制,其发布-订阅模式适合传感器数据、状态监控等场景。本文通过Python和C++示例,详细介绍了话题通信的实现步骤,包括节点创建、消息发布/订阅、编译配置等。高级知识中,QoS策略、话题工具、命名空间等内容可帮助优化通信性能和灵活性。 阅读详情

相关推荐

ROS话题通信从入门到实战:手把手实现发布/订阅模式并剖析核心机制

本文详细介绍了ROS话题通信的核心机制与实战应用。通过广播电台的生动比喻,阐述了发布/订阅模式的解耦与异步特性,并手把手指导读者使用C++和Python实现发布者与订阅者节点。文章深入剖析了连接建立、消息队列及回调函数等核心原理,对比了ROS 1与ROS 2的差异,并提供了避坑指南与性能优化建议,帮助开发者从入门到精通掌握ROS话题通信。

weixin_29266007的博客 579

ROS基础学习—话题、服务、动作编程

在ROS(Robot Operating System)中,工作空间(Workspace)是一个用户可以用来组织并构建自定义ROS软件包的文件夹结构。通常,这个工作空间被称为,得名于ROS的构建系统catkin。一个典型的catkin工作空间包含以下几个部分:src (source)目录:这是工作空间的核心目录,包含所有的ROS软件包源代码。当你创建一个新的ROS工作空间时,会从创建这个目录开始。任何你下载或创建的自定义ROS软件包都应该放在这个目录下。build目录。

LX567567的博客 2000

ROS2小海龟实验:从零掌握节点、话题、服务与动作通信机制

在机器人操作系统(ROS)中,节点、话题、服务和动作是构建分布式机器人软件的核心通信模型。节点作为独立的执行单元,通过话题进行异步数据发布与订阅,适用于传感器数据流等持续性信息交换;服务提供同步的请求-响应机制,适合执行瞬时任务;动作则支持带反馈的异步长任务执行,满足导航等复杂场景需求。这些机制共同构成了ROS的计算图,实现了机器人系统中各模块的解耦与高效协作。通过经典的turtlesim小海龟仿真实验,开发者可以直观地可视化并实践这些核心概念,例如通过/turtle1/cmd_vel话题控制运动,调用/s

weixin_30700977的博客 520

ROS2入门到精通教程(五)ROS2通信机制核心

(cpp创建)

熊猫小妖的AI世界 879

ROS2——通信接口(十)

通信并不是一个人自言自语,而是两个甚至更多个人,你来我往的交流,交流的内容是什么呢?为了让大家都好理解,我们可以给传递的数据定义一个标准的结构,这就是通信接口。接口可以让程序之间的依赖降低,便于我们使用别人的代码,也方便别人使用我们的代码,这就是ROS的核心目标,减少重复造轮子。 ROS有三种常用的通信机制,分别是话题、服务、动作,通过每一种通信种定义的接口,各种节点才能有机的联系到一起。为了保证每一个节点可以使用不同语言编程,ROS将这些接口的设计做成了和语言无关的,比如这里看到的int32表示32位的整

戚晨夕的博客 1861

看完这篇爽文我终于学会了示波器(一)

示波器基础篇的介绍,希望对你有用,下次分享一下如何测试。

qq_45508321的博客 973

ROS2 零基础到实战 完整学习指南(保姆级,循序渐进)

ROS2 的学习是循序渐进、层层递进的,绝对不要贪多求快,按这个节奏学,稳扎稳打,你能扎实掌握 ROS2 的核心能力:plaintext第1-2周:基础概念 + 核心命令 + 小乌龟仿真 → 吃透所有基础操作,能熟练使用命令行;第3-5周:Python编程(话题+服务+launch) → 能独立编写、编译、运行自己的Python节点;第6周:C++编程入门 → 掌握C++的基础编程范式,能看懂和修改C++代码;第7周:核心工具链(rqt、rviz2、gazebo) → 能可视化调试自己的代码;

baidu_37973494的博客 2万+

opencv的cmake报错

1、下载 ippicv_2021.8_win_intel64_20230330_general.zip、v0.1.2a.zip、opencv_videoio_ffmpeg.dll、opencv_videoio_ffmpeg_64.dll、ffmpeg_version.cmake。由于下载源在https://raw.githubusercontent.com,由于网络原因下载不顺畅,可以先找到文件下载到对应文件夹下,或者更改网络环境。ffmpeg_version.cmake文件,打开后显示如下, 另存即可。

nownow_的博客 1298

具身智能干货|ROS2理论与实践系列(二):ROS2通信机制核心

机器人是一种高度复杂的系统性实现,一个完整的机器人应用程序可能由若干功能模块组成,每个功能模块可能又包含若干功能点,在不同功能模块、不同功能点之间需要频繁的进行数据交互。比如以导航中的路径规划模块为例: 路径规划时就需要其他功能模块输入数据,并输出数据以被其他模块调用。 输入的数据有地图服务提供的地图数据、定位模块提供的机器人位姿数据、人机交互模块提供的目标点数据......。 输出的路径信息则被运动控制订阅或是回显在人机交互界面上。 那么这些相对独立的功能模块或功能点之间是如何实现数据交互的呢?在此,我

weixin_48649532的博客 1554

Golang实战:用Quic-Go v0.46.0搭建高性能文件传输服务(附完整代码)

本文详细介绍了如何使用Golang和Quic-Go v0.46.0构建高性能文件传输服务,涵盖服务端和客户端的完整实现。通过QUIC协议的多路复用、零RTT连接等特性,显著提升文件传输效率,特别适合高延迟或不稳定网络环境。文章提供完整代码示例和性能调优技巧,帮助开发者快速部署高效的文件传输解决方案。

weixin_33737134的博客 447

小红书x-mini签名逆向实战:Frida动态Hook与算法还原

在移动App协议分析中,请求签名机制是保障接口安全的核心技术,其本质是客户端对请求参数、时间戳、设备指纹等要素进行加密认证的过程。理解签名原理需掌握Native层加密流程、JNI调用机制及密钥动态派生逻辑。Frida作为主流动态插桩工具,能绕过符号剥离、字符串加密和控制流混淆等反分析手段,在函数执行瞬间捕获寄存器状态、内存数据与调用上下文,实现签名算法的完整还原。该技术广泛应用于合规内容监测、API自动化调用与竞品协议研究等工程场景。本文聚焦小红书x-mini签名这一典型样本,详解从JNI_OnLoad定位

weixin_31264565的博客 457

ROS2动作通信实现

以下以“模拟机械臂移动”为例,完整实现动作通信(包含C++和Python版本)。首先需要创建功能包,并通过.action文件定义动作的数据结构。在功能包中创建action目录,用于存放.actiontouch MoveRobot.action # 定义机械臂移动的动作类型编辑# 目标(Goal):机械臂需要移动到的目标位置(x, y坐标)float64 xfloat64 y---# 结果(Result):任务结束后返回实际到达位置和是否成功---

u010632343的博客 1352

Silvaco Atlas从头开始(四)——定义材料参数和模型

这部分是关于定义材料参数和模型。

qsz1425AWD2121的博客 4649

【ROS】如何让ROS中节点实现数据交换Ⅰ--ROS话题通信

如何让ROS中节点实现数据交换Ⅰ--ROS话题通信

qq_62839589的博客 2595

PostgreSQL14 离线安装全攻略:从下载到配置详解

本文详细介绍了PostgreSQL14在无网络环境下的离线安装全流程,涵盖RPM包与源码编译两种主流方法。文章重点解析了安装前的系统环境检查、依赖包准备、数据库初始化、远程访问配置以及安装后的关键检查与性能调优,旨在帮助运维和开发人员在离线服务器上高效、稳定地部署PostgreSQL14数据库。

p5l2m9n4o6q的博客 707

Spec Kit:GitHub 官方推出的规范驱动开发工具包,让 AI 编程真正可控、高效、高质量

先明确“做什么”和“为什么”,再考虑“如何做”。它通过一系列标准化命令(如/specify/plan/implement可验证的功能规格(spec)可执行的技术方案(plan)可追溯的开发任务(tasks)高质量的实现代码(code)最终实现“规范即代码,代码即规范”的闭环。📌项目地址许可证:MIT(完全开源,欢迎贡献)Spec Kit 代表了 GitHub 对AI 原生开发(AI-Native Development)AI 不应替代开发者,而应放大开发者的意图。

lpfasd123的博客 1711

【ROS2学习笔记】话题通信篇:话题通信再探

本文介绍了ROS2话题通信机制的基础概念与实战开发流程。主要内容包括:1)话题通信的核心模型(发布/订阅模式)及特性(多对多、异步);2)消息接口的定义与作用;3)两个实战案例(HelloWorld通信和机器视觉识别)的完整代码实现;4)从创建工作空间到编译运行节点的全流程步骤;5)常用调试工具和常见问题解决方案。通过本文教程,读者可以系统掌握ROS2话题通信的开发方法,为后续深入学习服务、动作等ROS2通信机制奠定基础。一等

YZYZYYNO_2的博客 1338

大数据与宠物:健康监测数据分析

随着全球宠物市场规模的快速增长(2023年全球宠物产业规模已达3500亿美元),宠物健康管理需求呈现指数级上升。传统宠物医疗依赖定期体检和症状观察,存在滞后性和主观性缺陷。本文聚焦如何通过物联网(IoT)设备采集宠物生理数据(体温、心率、活动量等),利用大数据分析技术构建实时健康监测系统,实现宠物健康状态的动态评估、异常预警和疾病预测。研究范围涵盖数据采集技术、数据预处理方法、机器学习模型构建及实际应用场景落地。背景介绍:明确研究目的、目标读者及核心术语核心概念与联系。

2502_91592937的博客 1067

ros2话题通信

本文精心编纂的源码,灵感深植于赵虚左老师卓越的教学精髓之中,源自其精心打造的视频课程与详尽文档。

weixin_74808846的博客 1387

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ROS2话题、服务、动作通讯

介绍了如何在工作空间中,创建包,并在包中创建一个或多个可执行程序,程序里定义了单个或多个节点类对象,以便可执行程序运行起来的时候,类对象能够执行动作,干一些事情。那多个可执行程序运行起来时,他们之间靠什么来通讯呢,常规是走tcp/ip通讯、共享内存等其它,但在ROS2中,已定定义了一些现成的方式,封装好了三种标准通信方式:话题,服务,动作通讯。注:话题,服务,动作通讯其实是在填充节点对象的功能,后面的节点对象就不再像前面博客演示那样,只打印几句话而已。为什么要有动作,它和话题,服务的区别是什么?

jiugeshao的专栏 339

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ROS2零基础入门:从环境搭建到话题、服务、动作通信实战

机器人操作系统(ROS)是机器人开发的核心框架,而ROS2作为新一代分布式架构,采用DDS通信中间件,彻底摒弃了ROS1的中心节点机制。理解节点、话题、服务与动作是掌握ROS2的关键:话题适用于传感器数据流,服务适合请求-响应式调用,动作则用于带反馈的长时任务。本文从Ubuntu环境配置出发,逐步引导读者创建工作空间、编写功能包,并通过发布订阅、服务调用与动作执行的完整示例,演示ROS2通信机制的实际应用。掌握这些基础概念后,即可顺畅过渡到Nav2导航、MoveIt机械臂控制等高级应用。无论你是初学者还是R

weixin_33985679的博客 455

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ROS2 学习笔记2 通信机制核心

准备工作:创建接口文件功能包 接口功能包只能用 C++ 创建功能包时可以在依赖中加入 base_interfaces_demo 该命名空间下,定时器可以直接传入所需的时间间隔() 作用: 创建一个周期为1秒的定时器,触发on_timer回调。 参数解析: 参数1: 1s 表示时间间隔(需要using namespace std::chrono_literals;)。 参数2: std::bind(&Talker::on_timer, this) 将成员函数on_timer绑定到当前对象(this)。 初

tech1001的博客 880

ROS2核心模块-动作通信、参数服务

创建.action文件编辑配置文件编译测试。

qq_45827638的博客 687

ROS 话题通信全解析:从代码实现到终端操作,再到运行原理(小白友好教程)

本文全面介绍ROS话题通信机制,涵盖核心概念、代码实现和终端操作。主要内容包括:1) 话题通信四大组件(话题、发布者、订阅者、消息)及其异步通信原理;2) C++和Python实现发布/订阅节点的代码示例及关键解析;3) 终端调试命令(rostopic pub/echo等)的快速使用方法;4) C++与Python节点的运行机制差异(编译型vs解释型)。文章通过具体代码和操作演示,帮助初学者掌握ROS话题通信的基础技能,并提供常见问题解决方案,适用于传感器数据传输等异步通信场景。

冰冻三尺非一日之寒 1864

ROS2 话题通信(四)

本文介绍了ROS2中话题订阅与发布的实现方法,包括Python和C++两种语言版本。主要内容涵盖: Python实现 发布者节点创建步骤:导入依赖、定义节点类、创建发布者、设置定时器、编写发布逻辑 订阅者节点实现:消息回调函数处理、节点初始化 实践案例:小说发布与语音合成订阅系统 C++实现 发布者节点要素:消息类型定义、发布者创建、定时器设置 订阅者节点要点:回调函数绑定、消息处理逻辑 实践案例:海龟模拟器的运动控制(开环画圆和闭环位置控制) 开发流程 功能包创建与配置 节点编译与运行方法 消息类型选择与

weixin_60193745的博客 1612

【ROS 2】深入探索 ROS 2 机器人开发:从海龟仿真器到节点通信实战

本文以ROS 2海龟仿真器为切入点,系统介绍了机器人操作系统的核心概念与实战开发。通过启动turtlesim_node和turtle_teleop_key节点,演示了基于话题的发布/订阅通信模式,并利用rqt工具可视化节点拓扑。文章深入剖析了ros2 run命令的完整格式与设计理念,并引导读者动手创建第一个Python节点,实现从仿真到实际开发的平滑过渡。

salt9的博客 929
上一篇: [特殊字符]从零构建企业级多智能体学习助手|Flask+智谱AI实战(含A2A协议+RAG+源码)
Yuki(zhouzhiwei)
博客等级 码龄1年 5粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值