ros2中的话题、订阅、发布和服务简介

1. 话题 (Topic)

话题 是ROS 2中最基本的通信方式,采用发布/订阅(Publish/Subscribe)模式,是一种异步、单向、多对多的通信机制。

  • 特点:

    • 发布者和订阅者解耦(不需要知道对方是否存在)
    • 支持多个发布者向同一个话题发布消息
    • 支持多个订阅者接收同一个话题的消息
    • 数据流是单向的(持续传输)
  • 适用场景:传感器数据流(如摄像头图像、激光雷达点云)、状态广播等持续更新的数据


2. 发布 (Publisher)

发布者是向特定话题发送消息的节点。

python 复制代码
# Python示例
from std_msgs.msg import String

# 创建发布者
publisher = node.create_publisher(String, 'topic_name', 10)  # 队列大小为10

# 发布消息
msg = String()
msg.data = 'Hello ROS 2'
publisher.publish(msg)
  • 10 是**QoS(服务质量)**的队列深度,用于控制消息缓存

3. 订阅 (Subscription)

订阅者是接收特定话题消息的节点。

python 复制代码
# Python示例
def callback(msg):
    node.get_logger().info(f'Received: {msg.data}')

# 创建订阅者
subscription = node.create_subscription(
    String, 
    'topic_name', 
    callback, 
    10
)
  • 当有新消息到达时,自动触发回调函数(callback)
  • 订阅是被动的,不需要轮询检查

4. 服务 (Service)

服务 采用请求/响应(Request/Response)模式,是一种同步、双向、一对一的通信机制。

特性 话题 服务
通信模式 发布/订阅 请求/响应
方向性 单向 双向
关系 多对多 一对一
实时性 异步 同步(阻塞等待)
适用场景 持续数据流 偶尔调用、需要反馈的操作
  • 服务客户端(Client):发送请求并等待响应
  • 服务端(Server):接收请求,处理完成后返回响应
python 复制代码
# 服务端示例
from example_interfaces.srv import AddTwoInts

def add_callback(request, response):
    response.sum = request.a + request.b
    return response

service = node.create_service(AddTwoInts, 'add_two_ints', add_callback)

# 客户端示例
client = node.create_client(AddTwoInts, 'add_two_ints')
request = AddTwoInts.Request()
request.a = 2
request.b = 3
future = client.call_async(request)  # 异步调用

总结对比

复制代码
话题通信(异步广播):
[传感器节点] ──publish──► [/camera/image] ◄──subscribe── [处理节点A]
                                                    ◄──subscribe── [处理节点B]

服务通信(同步调用):
[控制节点] ──request──► [计算节点] ──response──► [控制节点]
     "请计算路径"              处理中...           "这是路径结果"

选择建议:

  • 需要持续传输数据 → 使用话题
  • 需要偶尔调用并获取结果 → 使用服务(如获取参数、执行特定动作)
  • 需要长时间运行并可能反馈进度 → 考虑Action(服务的扩展版)
相关推荐
xcLeigh16 小时前
FreeRTOS实战:用STM32+SEGGER打造工业级实时嵌入式系统
人工智能·stm32·单片机·嵌入式硬件·ai
路上有只喵17 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇1
单片机·嵌入式硬件
芯岭技术郦17 小时前
XL4460 FSK 无线透传模组
stm32·单片机·嵌入式硬件
半导体憨包17 小时前
共源共栅(Cascode)功率器件:让 SiC / GaN “兼容“你的硅栅驱动
嵌入式硬件·生成对抗网络·硬件工程·半导体·dc-dc·半导体芯片
天空'之城17 小时前
单片机基础核心知识点汇总(五十)
单片机·嵌入式硬件
新晨单片机设计20 小时前
S033A-基于STM32单片机拼图游戏机【Proteus仿真+Keil程序+原理图】
stm32·单片机·嵌入式硬件·拼图游戏机
Silicore_Emma20 小时前
D2596HV:高压异步DC-DC降压芯片简介
嵌入式硬件·消费电子·dc-dc系列电路·电源管理电路·降压(buck)开关稳压器
2501_9226395820 小时前
率能半导体 SS6811H双通道H桥驱动芯片:38V/1.6A,覆盖舞台灯光、安防相机、办公自动化、游戏机、机器人五大应用场景
单片机·嵌入式硬件·硬件工程
恒锐丰科技林技术员1 天前
EG2304L 高压半桥驱动芯片:中小功率电力电子方案优选器件
经验分享·嵌入式硬件·硬件工程
OIDCAT1 天前
CH9433技术解析:一颗芯片搞定CAN总线和9线串口
单片机·嵌入式硬件·工控·调试工具·国产芯片