|
@@ -4,20 +4,25 @@
|
|
|
|
|
|
## 1.Action背景
|
|
|
|
|
|
-前面章节学习了话题、服务、参数。话题适用于节点间单向的频繁的数据传输,服务则适用于节点间双向的数据传递,而参数则用于动态调整节点的设置,动作Action和他们三个有什么不同之处呢?
|
|
|
+前面章节学习了话题、服务、参数。
|
|
|
+
|
|
|
+话题适用于节点间单向的频繁的数据传输,服务则适用于节点间双向的数据传递,而参数则用于动态调整节点的设置,动作Action和他们三个有什么不同之处呢?
|
|
|
|
|
|
小鱼举个例子,在前面的章节中王二通过话题获取李四写的小说。张三通过服务向李四购买小说。
|
|
|
|
|
|
流程是张三将钱通过服务给王二,然后王二凑够对应章节数量的小说返回给张三,这个过程看似没有问题,假设你是张三,你就会发现下面这些问题:
|
|
|
+
|
|
|
- 你把100块钱给了王二,你并不知道王二有没有收到自己的钱(不能确认服务端接收并处理目标)
|
|
|
- 假设王二收到了,但库存没有100章的小说,王二开始攒小说,此时你也无法得知王二攒小说的进度(没有反馈)
|
|
|
- 假设王二攒小说攒一半,你不想要了,也没办法通知王二退款
|
|
|
|
|
|
+
|
|
|
如果这些问题体现在机器人上,可能是这样子的。我们通过服务服务发送一个目标点给机器人,让机器人移动到该点:
|
|
|
- 你不知道机器人有没有处理移动到目标点的请求(不能确认服务端接收并处理目标)
|
|
|
- 假设机器人收到了请求,你不知道机器人此时的位置和距离目标点的距离(没有反馈)
|
|
|
- 假设机器人移动一半,你想让机器人停下来,也没有办法通知机器人
|
|
|
|
|
|
+
|
|
|
上面的场景在机器人控制当中经常出现,比如控制导航程序,控制机械臂运动,控制小乌龟旋转等,很显然单个话题和服务不能满足我们的使用,因此ROS2针对控制这一场景,基于原有的话题和服务,设计了动作(Action)这一通信方式来解决这一问题。
|
|
|
|
|
|
## 2.Action的组成部分
|
|
@@ -29,6 +34,10 @@
|
|
|
- 结果:即Action服务端最终告诉客户端其执行结果,结果最后返回,用于表示任务最终执行情况。
|
|
|
|
|
|
> 参数是由服务构建出来了,而Action是由话题和服务共同构建出来的(一个Action = 三个服务+两个话题)
|
|
|
+三个服务分别是:1.目标传递服务 2.结果传递服务 3.取消执行服务
|
|
|
+两个话题:1.反馈话题(服务发布,客户端订阅) 2.状态话题(服务端发布,客户端订阅)
|
|
|
+
|
|
|
+
|
|
|
|
|
|

|
|
|
|