前言很多ROS2新手在学习话题、服务通信时,都会卡在一堆底层疑问:ROS2发布消息到底发到哪里?没有Master怎么通信?订阅队列queue_size=10是什么作用?生产速度大于消费速度会怎样?服务回调为什么必须用std::bind?_1、_2占位符到底是什么?服务的Request、Response是谁创建的?为什么不能写死参数?服务端、客户端谁先启动?wait_for_service原理是什么?rclcpp::spin为什么是阻塞的?get_node_base_interface作用是什么?本文结合最简可编译C++代码,从零讲透ROS2话题+服务通信全逻辑,根治90%新手困惑,全程通俗易懂、无废话、重原理。适配版本:ROS2 Humble / Jazzy | 编程语言:C++一、先搞懂核心架构:ROS1 vs ROS2 本质区别ROS1(有Master中心节点)所有节点通信依赖 roscore 主节点:发布者、订阅者、服务都需要先注册到MasterMaster统一管理话题、服务列表,再转发通信信息ROS2(无Master、去中心化DDS架构)ROS2 没有任何中心服务器,底层基于DDS数据分发协议:节点启动后自动在局域网广播自身话题/服务信息匹配的发布/订阅、服务端/客户端点对点直接通信消息不经过任何中间节点,效率更高、更稳