初识机器人操作系统--ROS

1.ROS是什么

ROS是一个适用于机器人的开源的元操作系统。其实它并不是一个真正的操作系统,其底层的任务调度、编译、寻址等任务还是由Linux操作系统完成,也就是说ROS实际上是运行在Linux上的次级操作系统。但是ROS提供了操作系统应用的各种服务(如:硬件抽象、底层设备控制、常用函数实现、进程间消息传递、软件包管理等),也提供了用于获取、编译、跨平台运行代码的工具和函数。ROS主要采用松耦合点对点进程网络通信,目前主要还是支持Ubuntu系统,windows和Mac OS目前支持的还不好,所以推荐在Ubuntu系统上安装使用ROS。
在这里插入图片描述

2.ROS的概念

ROS 是一个用于开发机器人应用程序的、类似操作系统的机器人软件平台。ROS 提供开发机器人应用程序时所需的硬件抽象、子设备控制,以及机器人工程中广泛使用的传感、识别、绘图、运动规划等功能。此外 ROS 还提供进程之间的消息解析、功能包管理、库和丰富的开发及调试工具。
主节点
主节点(master)负责节点到节点的连接和消息通信,类似于名称服务器(Name Server) 。
roscore 是它的运行命令,当您运行主节点时,可以注册每个节点的名字,并根据需要获取信息。没有主节点,就不能在节点之间建立访问和消息交流(如话题和服务)
节点
节点(node)是指在 ROS 中运行的最小处理器单元。可以把它看作一个可执行程序。在
ROS 中,建议为一个目的创建一个节点,建议设计时注重可重用性。例如,在移动机器人的情况下,为了驱动机器人,将每个程序细分化。也就是说,使用传感器驱动、传感器数据转换、 障碍物判断、电机驱动、编码器输入和导航等多个细分节点。
功能包
功能包(package)是构成 ROS 的基本单元。ROS 应用程序是以功能包为单位开发的。功能包包括至少一个以上的节点或拥有用于运行其他功能包的节点的配置文件。它还包含功能 包所需的所有文件,如用于运行各种进程的 ROS 依赖库、数据集和配置文件等。
消息
节点之间通过消息(message)来发送和接收数据。消息是诸如 integer, floatingpoint 和 boolean 等类型的变量。用户还可以使用诸如消息里包括消息的简单数据结构或列举消息的消息数组的结构。使用消息的通信方法包括 TCPROS, UDPROS 等,根据情况使用单向消息发送/接收方式的话题(topic)和双向消息请求(request) /响应(response)方式的服务
(service) 。
话题
话题(topic)就是“故事" 。在发布者(publisher)节点关于故事向主节点注册之后,它以消息形式发布关于该故事的广告。希望接收该故事的订阅者(subscriber)节点获得在主节 点中以这个话题注册的那个发布者节点的信息。基于这个信息,订阅者节点直接连接到发布者节点,用话题发送和接收消息。
发布与发布者
发布(publish)是指以与话题的内容对应的消息的形式发送数据。为了执行发布,发布者(publisher)节点在主节点上注册自己的话题等多种信息,并向希望订阅的订阅者节点发送消息。发布者在节点中声明自己是执行发布的个体。单个节点可以成为多个发布者。
订阅与订阅者
订阅是指以与话题内容对应的消息的形式接收数据。为了执行订阅,订阅者节点在主节 点上注册自己的话题等多种信息,并从主节点接收那些发布此节点要订阅的话题的发布者节
点的信息。基于这个信息,订阅者节点直接联系发布者节点来接收消息。订阅者在节点中声 明自己执行订阅的个体。单个节点可以成为多个订阅者。
在这里插入图片描述

3.ROS的架构

OS层

ROS并不是一个传统意义上的操作系统,无法像Windows、Linux一样直接运行在计算机硬件之上。ROS1主要构建于Linux系统之上,ROS2带来了改变,支持构建的系统包括Linux、Windows、Mac、RTOS,甚至没有操作系统的裸机。

中间层

Linux是一个通用系统,并没有针对机器人开发提供特殊的中间件,ROS在中间层做了大量的工作,其中最为重要的就是基于TCPROS/UDPROS的通信系统,这是基于TCP/UDP网络所做的再次封装。通信系统使用发布/订阅、客户端/服务器等模型,实现多种通信机制的数据传输。

除了TCPROS/UDPROS的通信机制外,ROS还提供一种进程内的通信方法——Nodelet,可以为多进程通信提供一种更优化的数据传输方式,适合对数据传输实时性方面有较高要求的应用。

ROS1的通讯系统基于TCPROS/UDPROS,而ROS2的通讯系统基于DDS。DDS是一种分布式实时系统中数据发布/订阅的标准解决方案。ROS2内部提供了DDS的抽象层实现,用户不需要关注底层DDS的提供厂家。

在ROS1的架构中Nodelet和TCPROS/UDPROS是并列的层次,为同一个进程中的多个节点提供一种更优化的数据传输方式。ROS2中也保留了这种数据传输方式,只不过换了一个名字,叫做“Intra-process”,同样也是独立于DDS。

在通信机制之上,ROS提供了大量机器人开发相关的库,如数据类型定义、坐标变换、运动控制等,可以提供给应用层使用。

应用层

ROS1强依赖于ROS Master(通过远程过程调用提供登记列表和对其他计算图表的查找功能,帮助ROS节点之间相互查找、建立连接,同时还为系统提供参数服务器,管理全局参数),一旦Master宕机,整个系统会面临崩溃的处境。但是从右边ROS2的架构中可以发现,之前让人耿耿于怀的Master终于消失了,节点之间使用一种称为“Discovery”的发现机制来获取彼此的信息。

ROS社区内共享了大量的机器人应用功能包,这些功能包内的模块以节点为单位运行,以ROS标准的输入输出作为接口,开发者不需要关注模块的内部实现机制,只需要了解接口规则即可实现复用,极大地提高了开发效率。

从系统实现的角度,ROS也可以分为三个层次:文件系统(程序文件的组织和构建)、计算图(从计算图的角度来看,ROS系统软件的功能模块以节点为单位独立运行,可以分布于多个相同或不同的主机中,在系统运行时通过端到端的拓扑结构进行连接)和开源社区。

4.ROS 的工作过程

ROS可以形象的描述为一个工厂的运行机制,创建好一个工作空间(workspace)就像一个工厂,工厂里又有好多个生产车间,每个功能包(pkg)看作是一个生产车间,每个生产车间又有好多工人在配合,每个节点(node)看作是一个工人,节点是又是可执行程序的最小单位,工人们之间相互沟通通过消息(mesage)来完成。
在这里插入图片描述
话题(topic)
  话题是单向的,一般用于连续发送数据的传感器,建立一次联系后,一个发布者可以向多个订阅者发送信息,同样,一个订阅者也可以订阅多个发布者的消息。
服务(service)
  服务是同步双向的通信机制,服务器只有在有请求的时候才响应,客户端在发出请求后才接受响应。当服务的请求和响应完成时,两个连接点自动断开。
动作(action)
  动作的通讯方式与服务有类似的情况,不同的是服务器收到请求后直至完成响应所需时间较长,中途需要反馈给客户端目前完成的情况,报告当前的现状。
  由以上三种通讯方式完成ROS节点间的信息交流,但是发布者,订阅者,服务服务器,服务客户端,动作服务器,动作客户端分布在不同的节点中。这些节点需要一个让它们建立联系的主节点构建通信的桥梁。分布在外面的不同节点,向主节点注册自己的信息,以便其它节点访问,同时向主节点获取那些访问自己节点的信息。获取后节点和节点间就可以通讯,不再需要主节点。

5.ROS中话题与服务的区别

话题和服务是 ROS 中使用最多的通信方法,它们之间有很多不同之处:

条目 话题 服务
同步性 异步 服务
通信模型 发布/订阅 客户端/服务器
反馈机制
实时性
底层协议 ROSTCP/ROSUDP ROSTCP/ROSUDP
缓冲区
节点关系 多对多 一对多(一个Server)
使用场景 弱逻辑处理,多数据传输 强逻辑处理,少数据传输

话题是 ROS 中基于发布者/订阅者模型的异步通信,发布者与订阅者双方解耦,常用于不断更新,含有较少逻辑处理的数据通信;
服务是 ROS 中基于客户端。服务器模型的同步通信,适用于逻辑性强的数据交换;

6.ROS的优缺点

ROS为我们开发机器人带来了许多方便,然而它也确实存在一些问题:

优点
提供框架、工具和功能
方便移植
庞大的用户群体
免费开源
缺点
通信实时性能有限
系统稳定性尚不满足工业级要求
安全性上没有防护措施

posted @ 2021-06-15 22:56  冷色调的夏天  阅读(2731)  评论(0编辑  收藏  举报