【ROS入门-3】嘴对嘴讲解ROS的核心概念——节点与节点管理器

前言

我要给大家来介绍一下ROS当中一些核心的概念,帮助大家去在后面的ROS学习当中更快地吸收这些概念。

ROS系列文章

【ROS入门-1】手把手教你在Ubuntu18.04安装ROS Melodic
【ROS入门-2】带你看ROS文件系统及其工具

ROS的通信机制

ROS的通信机制是一个 松散耦合的分布式软件框架 设计而来的,比如下面这张图:

ros009

在这个图当中看到这里面有很多Node(节点),每个节点是在整个机器人中完成一个具体功能的这样一个一个的进程,比如说一个Node是完成图像的识别,另一个Node就完成图像驱动,然后它们之间会有一系列的图像之间的一个数据的传输,所有节点之间它的位置也不是固定的,比如说我们这有两台电脑,一个A,一个B,一些节点运行在A当中,一些节点运行在B当中,它们可以通过一系列的这个数据的传输方式来完成通讯(后面会讲解这个通信方式)。

还有每个节点它的编程语言也不是也不是固定的,比如说这个Node是用Python开发,它有很好的便利性,另一个节点是用C++开发,它有很高的效率等等。我们可以分布式完成这件的开发,最终只要有统一的这个通讯的标准,就可以完成我们整个系统这样一个搭建了,那这里面就会有很多的节点,节点之间会有很多的通讯,很多的数据,然后它包括通讯的方式,包括所有节点的一个管理,会涉及到很多核心通信机制。

我们接下来讲解ROS的核心概念——节点与节点管理器。

节点(Node)

首先看一张图片,我们结合图片来讲解:

ros010

首先最重要的概念就是节点啊,节点在ROS当中是一个最小处理器单元,它是一个执行单元。

比如说它要执行某个任务,它其实相当于我们系统里面的某一个具体的进程,无论是完成图像识别也好,完成摄像头的驱动也好,或者是完成你的思路算法的这个处理也好,它都是一个处理任务的进程。建议为一个目的创建一个节点,建议设计时注重可重用性,将每个程序细分化,但节点在整个系统中的名称必须是唯一的。

不同节点之间我们可以用不同的编程语言,比如说有的人善于做图像处理,他就可以用Python来做处理,有的人善于做驱动。他可能要用C++或C来完成这个设备的驱动,最终大家可以通过ROS框架完成很快这个功能的拼接,那这个ROS里面也是给我们提供了这样一系列的机制,很快速完成这样一个分布式的工作。

节点在整个系统当中的名称必须是唯一的啊,比如说你要干一个什么事儿,要做一个命名,而为了方便我们整个的管理,每一个节点的名字都必须是唯一的,否则会重名重名之后你的ROS就找不到具体是哪个节点了。

总结一下节点的特性:

  • 执行具体任务的进程、独立运行的可执行文件。

  • 不同节点可使用不同的编程语言,可分布式运行在不同的主机。

  • 节点在系统中的名称必须是唯一的。

  • 所有节点之间的消息通信都必须使用节点管理器。

可以使用rosrun命令运行一个包内的节点(不需要知道这个包的路径)。

rosrun [包名字] [节点名字]

节点管理器(Master)

在某些书籍资料中,节点管理器也被称作是主节点,都是一个意思的东西。

节点管理器(Master)负责节点到节点的连接和消息通信,类似于服务器(Server)。roscore是它的运行命令,当运行节点管理器时,你可以注册每个节点的名字,并根据需要获取信息。没有节点管理器,就不能在节点之间建立访问和消息交流(如话题和服务),所以我们从上面的途中就看到一个很关键的成员——ROS Master。

系统中的每个节点都需要去找Master去注册,需要告诉Master,我要启动了,我要干个什么事,我要跟谁去发什么数据,这些的管理的这个注册信息都是由Master一手掌握的,简单来说就是Master里面会有一个小本本,它会把所有的节点的各种信息都记下来,然后帮助它们,比如让节点与节点之间去建立连接等。

就拿上面的图来说,Image Processing Node节点要去处理数据,Camera Node节点要去发布图像数据,Image Display Node节点要去显示图像的数据,那这里面两个节点之间就会发生一个图像的传输,那Master就是要帮助两者建立起来一个传输数据的渠道啊,不然两个毫无瓜葛的节点怎么知道彼此的存在呢。

Master里面还有很重要的功能,就是它提供一个参数服务器的功能,这个东西很重要,上面会记录一些全局变量的变量名跟变量值,那这个变量名和变量值就可以由各个节点去访问、去设置或者去读写,然后节点之间就可以通过这些变量的设置来读取一些配置文件的信息,读取一些参数配置啊等等。

总结一下节点管理器的特性:

  • 为节点提供命名和注册服务。

  • 跟踪和记录话题/服务通信,辅助节点相互查找、建立连接。

  • 提供参数服务器,节点使用此服务器存储和检索运行时的参数。

简单运行

大家可以去运行一下节点管理器与节点:

  • 运行节点管理器:
roscore

节点管理器

  • 在新终端运行一个节点:
rosrun turtlesim turtlesim_node
  • 在新终端列出当前运行的节点:
rosnode list

效果如下:

ros011

引用说明

本文的部分截图来自《古月·ROS入门21讲》的课件。

参考

ROS官方wiki

ROS笔记(6) ROS通讯机制

发布了112 篇原创文章 · 获赞 320 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/jiejiemcu/article/details/105330117