0%

每周更新 weekly update (7/52)ROS通讯方式

2020年第七周

哦豁,上周忘了更新。

ROS 的信息传递机制

ROS毫无疑问是当前机器人玩家必须要用的一个工具,即使它并没有那么好用(ROS2并不在本文讨论范围中,今后有机会再研究)。但不得不说,从通讯和进程管理的角度,它至少还做得挺不错。这周我就想去总结一下过去使用ROS上的一些通讯方式,以及各自优缺点。

首先,ROS主要有这三种机制:

  • Topic订阅
  • Service
  • Parameter Server
  • Actions

Topic Subscription

Topic订阅机制无疑在ROS里面用得最广泛的形式。它实际上就是多对多广播,Publishers能够用特定的topic去发布数据(messages),Subscribers在订阅后能够获得对应topic的数据。 这种不定向的特性,使得通讯变得更加简单而且“松散”。 发布者(publishers)和订阅者(subscribers)各司其职,彼此之间可以独立运作,即独立成node。

Service

对比Topic的机制,Service对每次请求(request)都有一个反馈,可以反映请求的执行状态或者是传递信息,这种通讯模式比较适合带有状态的执行,对执行的结果有一定的“交代”。但由于在请求过程中会处于blocking状态,所以不太适合长时间的任务执行,比较适合有time bound的任务。

Parameter Server

Parameter Server更像我们online key-value数据库的思路,它存在于master主线程,所以其他各个线程需要访问的时候,都要经过它。但它设计的初衷也只是用于设置(configure)运行的进程(launch),并不是用来stream data的。

Actions

Actions主要是用于需要执行时长比较长的任务,如让机器人运动到某个位置(moveTo),或者是一些可能会timeout、亦或者是出现异常(exception)的任务,这时候比较适合用actionlib来完成。

Reference

[1] ROS topic

[2] ROS Services

[3] ROS parameter server

[4] actionlib