ROS2 服务通信
2026/7/27...大约 1 分钟
ROS2 服务通信 (Service Communication)
服务通信是 ROS2 中用于请求/应答模式的通信方式,客户端发送请求、服务端处理后返回响应,一对一同步通信。
与话题通信的对比
| 维度 | 话题通信 (Topic) | 服务通信 (Service) |
|---|---|---|
| 模式 | 发布/订阅 | 请求/应答 |
| 方向 | 单向 | 双向 |
| 关系 | 多对多 | 一对一(一次调用一个服务端响应) |
| 同步 | 异步 | 同步(客户端阻塞等待响应) |
| 适用 | 持续数据流 | 快速查询、控制指令 |
接口定义
ROS2 使用 Interface(接口)定义服务消息格式:
- 服务请求/应答:
.srv文件(包含 Request 和 Response 两部分)
典型应用
- 节点配置查询("现在参数 X 是多少?")
- 触发一次性动作("拍张照片")
- 状态切换指令("切到手动模式")
- 不适合长期任务(用 Action 代替)
注意事项
- 同步阻塞:客户端调用时阻塞直到收到响应或超时
- 一对一:同一时刻一个请求由一个服务端响应
- 不适合高频数据流(用 Topic 代替)
- 不适合长时间任务(用 Action 代替)
相关
- [[../concepts/话题通信.md]] — 同一文件夹下的话题通信概念
- [[../concepts/动作通信.md]] — 长期任务通信(支持取消 + 反馈)
- [[../entities/ROS2.md]] — ROS2 实体聚合页
