一、动作通信基础
1.Action背景
话题适用于节点间单向的频繁的数据传输,
服务则适用于节点间双向的数据传递,
参数则用于动态调整节点的设置。
ROS2针对机器人控制这一场景,基于原有的话题和服务,设计了动作(Action)这一通信方式来解决这一问题。
2.Action的组成部分
三大组成部分
- 目标:即Action客户端告诉服务端要做什么,服务端针对该目标要有响应。解决了不能确认服务端接收并处理目标问题
- 反馈:即Action服务端告诉客户端此时做的进度如何(类似与工作汇报)。解决执行过程中没有反馈问题
- 结果:即Action服务端最终告诉客户端其执行结果,结果最后返回,用于表示任务最终执行情况。
参数是由服务构建出来的,而Action是由话题和服务共同构建出来的(一个Action = 三个服务+两个话题) 三个服务分别是:1.目标传递服务 2.结果传递服务 3.取消执行服务 两个话题:1.反馈话题(服务发布,客户端订阅) 2.状态话题(服务端发布,客户端订阅)
二、通信机制总结
基于ROS2的通信机制,可以方便的编写程序将机器人各个组件互相连接。
1.话题
话题(Topic)是一种轻量级的通信方式,用于实现发布-订阅模式,即一个节点发布数据,另一个节点订阅数据。话题是一种单向的通信方式,发布者发布数据后,无法获知数据是否被订阅者成功接收。话题的数据类型可以是ROS中定义的任意消息类型。常见的使用话题实现的场景包括传感器数据的传递、节点间的状态信息交换等。
2.服务
服务是双向的,提供了一种客户端-服务器模式,即客户端向服务器发送请求,服务器响应请求并返回结果。服务可以实现双向通信,并且支持传递任意的ROS消息类型。服务的实现需要定义两个消息类型,一个用于请求,一个用于响应。常见的使用服务实现的场景包括节点之间的命令调用、请求数据等。
3.参数
参数(Parameter)是ROS 2中节点的一种配置机制,它可以用于对节点进行设置。参数可以存储整数、浮点数、布尔值、字符串等基本类型数据,也可以存储ROS消息类型。参数的读写操作可以通过服务实现。在节点启动时,可以通过ROS参数服务器将参数传递给节点,也可以在运行时动态修改参数。常见的使用参数的场景包括节点的配置、调试等。,原理基于服务。
4.动作
动作(Action)是ROS 2中的高级通信机制,它可以实现异步的双向通信,并且支持取消、暂停、恢复等操作。动作通常用于需要执行较长时间的任务,如机器人的导航、物体识别等。与服务不同,动作可以通过话题实时发布执行状态、进度等信息,以便客户端监控执行情况。动作的实现需要定义三个消息类型,一个用于请求,一个用于响应,一个用于反馈。常见的使用动作的场景包括机器人的自主导航、物体抓取等。