ROS2中的srv、action、发布订阅三种方式
以下是ROS2中srv、action、发布订阅三种方式的差异和使用场景的表格形式呈现:
特性/方式 | srv(服务) | action(动作) | 发布订阅(Publish-Subscribe) |
---|---|---|---|
通信模式 | 请求-响应 | 目标-反馈-结果 | 异步消息传递 |
消息结构 | 自定义请求和响应消息 | 目标、反馈和结果消息 | 单一消息类型 |
通信方向 | 双向(客户端-服务端) | 双向(客户端-服务端),带反馈流 | 单向(发布者-订阅者) |
同步性 | 同步(客户端等待服务端响应) | 异步,但客户端可跟踪状态 | 异步 |
适用场景 | 需要明确请求和响应的场景 | 长时间运行的任务,需要反馈和可抢占 | 连续数据流,无需立即响应 |
实例 | 查询节点状态、数学运算 | 机械臂运动控制、路径规划 | 传感器数据发布、控制指令接收 |
使用方式 | 定义.srv文件,创建服务端和客户端 | 定义action接口,创建action server和action client | 定义消息类型,创建发布者和订阅者 |
差异说明:
- srv(服务):在ROS2中,服务是一种同步的通信机制,允许节点之间进行请求-响应模式的通信。服务类型定义了请求和响应的消息结构,可以使用.srv文件来定义自定义服务类型。服务通常用于需要明确请求和相应结果的应用场景,如查询节点状态或进行数学运算。
- action(动作):动作是ROS2中用于处理长时间运行任务的通信类型。它们由目标、反馈和结果三部分组成,允许客户端在任务执行过程中接收反馈,并可以取消任务。动作建立在服务和发布订阅之上,提供了更丰富的交互模式。动作通常用于机械臂运动控制、路径规划等需要长时间运行和反馈的任务。
- 发布订阅(Publish-Subscribe):发布订阅是ROS2中最基本的通信方式,允许节点之间异步地传递消息。发布者将消息发送到主题上,订阅者则从主题上接收消息。这种方式适用于连续数据流和无需立即响应的场景,如传感器数据发布和控制指令接收。
使用场景:
- srv:适用于那些需要明确请求和响应的场景,如查询一个节点的状态或进行数学运算。
- action:适用于需要长时间运行的任务,如机械臂的运动控制或路径规划。动作提供了稳定的反馈流,允许客户端在任务执行过程中跟踪状态,并可以取消任务。
- 发布订阅:适用于连续数据流和无需立即响应的场景。发布者将消息发送到主题上,订阅者从主题上接收消息,实现数据的异步传递。