ROS学习笔记(2)——ROS通信机制

ROS的通信机制主要有话题通信,服务通信和参数,这里先简单介绍一下话题通信和服务通信。在介绍这两者之前先简单介绍一下节点与节点管理器的内容。

节点

  • 执行具体任务的进程、独立运行的可执行文件;
  • 不同节点可使用不同的编程语言,可分布式运行在不同的主机;
  • 节点在系统中的名称必须是唯一的。

一个节点即为一个执行单元,通过节点管理器建立与其他节点之间建立联系完成通信。

节点管理器

  • 为节点提供命名和注册服务;
  • 跟踪和记录话题/服务通信,辅助节点相互查找、建立连接;
  • 提供参数服务器,节点使用此服务器存储和检索运行时的参数。

节点管理器是整个ROS运行的核心。通过roscore可以启动节点管理器,通过rosrun可运行所需要的节点,这些节点受节点管理器运行、记录和维护。

具体关系图如下:
在这里插入图片描述

话题通信

在这里插入图片描述话题通信是ROS通信机制中最为频繁最为复杂的通信模式。上面的这张图很好的体现了话题通信的内容。ROS Master(节点管理器)管理所有结点。这里有两个主要节点,分别是发布者和订阅者。这两个节点的启动顺序没有先后关系。当publisher节点启动后会发布一个消息,这个消息会通过topic这个总线管道把数据传输给subscriber,subscriber订阅得到这个消息并执行相应的操作。看到个很形象的比喻,就好比微信群里某个人(publisher)发了个消息,其他的人(subscriber)就都能看到。

服务通信

在这里插入图片描述对于服务通信,在上图中有两个主要节点。client客户端先产生一个请求,通过Serivce服务传递给Server端。Server端收到请求后会执行相应的操作,同时会有一个反馈Response反馈给client,这样客户端也会知道服务端的指令是否执行成功。这里的服务端和之前的话题通信中的订阅者有相似之处,它的代码实现中回调函数是十分重要的部分。

话题与服务的区别
在这里插入图片描述由于话题和服务通信模式的不同,适用的场景也不尽相同。话题通信更适合用于连续高频的数据发布和接收,而服务通信则适合用于偶尔调用或执行的某一项功能。同时话题通信数据传输的可靠性比较低,若要考虑高精度传输,则应优先选择服务通信。

以上则是ROS通信机制的一个简单介绍,若有疑问或错误的地方可在评论区留言,共同讨论。