ROS的几个基本概念,你真的懂了吗?

22 篇文章 10 订阅

入门ROS,第一步应该先看一遍ROS官网的 Getting Started页面,但后来发现,入门已久的我还得常来看这个页面。

这也不能怪草莓熊笨,因为越是基础的东西对上层知识点影响就越大,历久弥新,每每看到这些知识点,总能找到一些之前的盲点。

那么,无论你是否看过ROS的Getting Started页面,下面的这些基本知识点都值得你阅读一遍。我们一起来梳理一下ROS的基本概念。

ROS的主要概念包括节点、消息、话题、服务和master。这些概念是理解ROS框架的必备知识,下面开始敲黑板划重点。

节点(node)

官方定义:

”A node is a process that performs computation.”

节点是ROS中执行运算任务的进程,是ROS运行的基本单位。ROS进程与系统内其他进程本质没有区别,当你打开一个记事本、一个画图板的时候,都是开始了一个新进程,ROS节点也是如此,稍微有点区别的是ROS节点之间通讯很方便,不像记事本和画图板之间毫无联系。

一个系统一般可以拆分为多个模块,每个模块由单独的节点组成。节点的概念使得ROS程序设计更加清晰,也更加利于维护,多个节点在功能上相互配合,从而实现复杂的机器人控制。

消息(message)

官方定义:

”ROS data type used when subscribing or publishing to a topic.”

节点之间通信之所以方便,就是通过相互传递消息来实现通讯。

消息是一种数据结构,支持多种数据类型(整形、浮点、布尔型、数组等),同时也支持消息的嵌套定义。ROS提供了大量的系统默认消息供用户使用,如geometry_msgs、sensor_msgs等,同时也支持用户定义专属数据结构的消息类型。消息所表达的数据结构很类似C语言中的结构体,当然,二者内部能使用的基础数据类型是有区别的,只是一个类比。

话题(topic)

官方定义:

”Topics are named buses over which nodes exchange messages.”

话题是消息的载体,作用是用不同的名称区分不同消息。节点之间传递消息是通过一种订阅发布话题的机制,一个节点可以订阅或发布多个话题,而不需要去了解另一个节点的具体细节。这种机制提供了一种方便的进程间通信方式,有效实现了不同功能节点之间的解耦。

话题与消息是紧密联系在一起的。话题就像公交车,消息是公交车里装的人。公交车里可以没有人(话题上没有有效消息),但能装什么人一定会预先指定(话题一定有类型)。整个公交网络中线路名称不能重复(话题名称不能重复),要是真有两个话题名称相同类型也相同,ROS不会对其中的数据做区分,这种冲突是没有提示的。

服务(service)

官方定义:

”Request / reply is done via a Service, which is defined by a pair of messages: one for the request and one for the reply.”

服务是应答响应模式下的信息交互方式。这种方式是基于客户端/服务器模型的。让我们来看看既然有了订阅/发布话题这种通讯机制,为什么还要有服务。

订阅/发布话题是不同步的,发布的人只管说话,订阅的人只管偷听,发布的人连续说了100句话,这100句话会排成一个队列,偷听的人要一句一句听,哦,对了,偷听的人可能不止一个,说话的人和偷听的人很不走心,他们之间没有眼神的交流(没有应答)。这种方式交换数据的效率高,但完全不具备应答功能。

什么时候要应答呢?比如,节点A对着广场说:借我500,借我500,借我500……估计不会有人理他,正确的操作应该是这样:

节点A对着节点B说:借我500。节点B听到了,说:没钱,滚。

这就是需要应答的场合,所以有了服务这个概念。

与话题不同的是,当服务端收到服务请求后,会对请求做出响应,将数据的处理结果返回给客户端。这种模式更适用于双向同步的信息传输,在同一个ROS网络中节点指定服务名称时不能重名。当节点A找节点B借钱时,整个网络里只有一个B,谁要是冒充B借了钱,那他就是2B。

Master

官方定义:

”The ROS Master provides naming and registration services to the rest
of the nodes in the ROS system. It tracks publishers and subscribers
to topics as well as services. The role of the Master is to enable
individual ROS nodes to locate one another. ”

”The Master also provides the Parameter Server.”

最后,我们来看master,顾名思义,它就是大师一般的存在。在ROS 1.0版本中(当前主流版本),master是整个ROS运行的核心,它主要的功能就是登记注册节点、服务和话题的名称,并维护一个参数服务器。没有它你就甭想启动任何一个节点,roscore就是用来启动master的。

那么,这个核心在干什么呢?

他在抄名单、给人指路,顺带记录点个人隐私。

一旦master被启动,ROS的网络中就有了一位在背后默默抄名单的人。比如,节点A启动了,master就在小本本上记下A的名字,节点B也是一样,这时候,A要订阅B的话题,就问master,谁是B?master给A指了指方向,那个角落里翻白眼的就是,这时A找到了B,话题就联系上了,master也就完成了一次指路。

同样的,master也在记录服务和话题的名称,确保人群里别重名。然后呢,master还在维护一个参数服务器,这个服务器记录各个节点的一些内部数据,比如A节点在程序里写道,请将num这个变量上传到参数服务器,A启动后,master的参数服务器上就有了num,你能够在不关闭A节点的情况下修改num,挺好吧。这就是master。

Master能不启动吗?可以,此时哪个ROS节点也甭想启动。

Master能启动了再关吗?可以,此时,已经启动的节点和建立的话题安然无恙,但后续新节点和新话题甭想再建立了。

Master自己宕机了怎么办?太常见了,习惯就好,重来吧。

ROS可以不要master吗?可以,ROS2.0已经不要master了,但ROS1.0版本下,master永远是你master。

以上是ROS的一些基本知识点,仅仅是基本知识点,ROS的重头概念我们后面再聊。

  • 27
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值