Topics
特点:
1.单向,分工明确,处理连续数据流,topic是一种多对多的形式,一个Node可以订阅多个Topic,可以publish到多个topic上。
2.topic中的数据只要准备好了,就可以被回调函数调用。而发送端的topic的发送时机由publisher自己决定。
场景:
1.连续
比如收发传感器数据,收发控制指令
Service
特点:
1.双向,有反馈
2.往往不是固定频率发送,处理不连续数据,需要时才发送请求和处理
场景:
1.离散
2.少量时间
用于那些快速停止的程序,如查询一个node的状态,做数学运算,机械臂的运动学反解(action也可以)等。
Actions
特点:
升级版service
场景:
1.离散
2.需要反馈 / 状态跟踪
3.需要花费大量时间
4.运行过程中可以被中断(中断通常是靠Action server来实现)
如让小车前进一段时间,并在运行过程中提供反馈。比如《ROS by Example》书中想让小车走1米,运行过程中需要不断检测是否走了1米,走到了就中断它,让它停下来。
即使在同一个Action Server上运行不同的两个action goal, 它们的状态也能够利用各自的ID被区分开来。像视觉处理等需要较多时间来启动或终止的程序也是利用action来实现的一个不错的例子。
用Topic和Action能完成大部分操作