主题 vs 服务 vs 动作

在设计系统时,有三种主要的接口风格。有关内容规范的规范在 接口概述 中。这是为了向读者提供关于何时使用每种类型的接口的准则。

主题

  • 应该用于连续的数据流(传感器数据、机器人状态等)。

  • 适用于连续的数据流。数据可以在任何时间发布和订阅,独立于任何发送者/接收者。多对多的连接。回调函数在数据可用时接收数据。发布者决定何时发送数据。

服务

  • 应用于快速终止的远程过程调用,例如查询节点状态或进行快速计算,如逆运动学。不应用于较长时间运行的进程,特别是在出现异常情况时可能需要抢占的进程,并且不应根据状态进行更改或依赖状态,以避免对其他节点产生意外的副作用。

  • 简单的阻塞调用。主要用于相对较快的任务,如请求特定数据。语义上用于处理请求。

动作

  • 应该用于任何移动机器人或在执行过程中提供反馈的持续性行为。

  • 动作的最重要属性是可以被抢占,而且抢占应该始终由动作服务器进行干净地实现。

  • 动作可以在目标的生命周期内保持状态,即在同一个服务器上并行执行两个动作目标时,可以针对每个客户端保持单独的状态实例,因为目标由其 ID 唯一标识。

  • 慢的感知例程需要几秒钟才能终止或启动较低级别的控制模式,这是使用动作的好例子。

  • 更复杂的非阻塞后台处理。用于执行机器人动作等较长时间的任务。在语义上用于真实世界的动作。