开源机器人操作系统ROS——机器人领域的安卓系统

网站首页_2019    开源机器人操作系统ROS——机器人领域的安卓系统

文 | 上海托华机器人有限公司CEO 柳智,陈嬖嬖、唐兴福对此文亦有贡献
本文原载于 《3C智造系统》杂志 2019年第1期

 

一、ROS简介

 

机器人操作系统的发展与计算机操作系统类似,计算机操作系统的出现,给计算机软硬件的开发带来了极大的便利,操作系统提供了标准的接口、使用方法和驱动程序模型,硬件厂商只需要按照驱动模型开发驱动程序,软件开发人员不需要再直接面对硬件编程,用户使用计算机时不必过于关心底层细节。机器人领域快速发展中也对机器人系统的软件开发提出了巨大挑战,在近几年里,为解决代码可复用性、易用性、开发效率、跨平台、多编程语言、分布式部署等共性问题。产生了许多优秀的机器人软件框架,其中最为突出的就是机器人操作系统(Robot Operating System, ROS)。ROS最初应用于斯坦福大学人工智能实验室与机器人技术公司Willow Garage合作的个人机器人项目,2008年后由Willow Garage维护。2010年,Willow Garage正式以开放源码的形式发布了ROS框架,很快,在机器人研究领域掀起了ROS开发与应用的热潮。

 

ROS的主要目标是让机器人领域的代码尽可能复用,减少大家的编码量。ROS是一个用于编写机器人软件的灵活框架,它集成了大量的工具、库、协议,提供了类似操作系统所提供的功能,可以极大简化机器人平台下的复杂任务创建与稳定行为控制。

 

ROS采用了分布式框架,各个构件可以各自独立地设计,松散、即时地组合起来,并可以按照功能包/功能包集的方式分组,便于分享和发布。ROS的运行架构是一种基于SOCKET(套接字)网络连接的松耦合架构,一切可执行程序被抽象为Node(节点),各个节点之间均使用ROS提供的消息传递机制进行通信。如图1列示了ROS架构的三个层次:OS层、中间层和应用层。

图1 ROS架构

 

1. OS

ROS是次级操作系统,不直接运行在计算机硬件之上,而是依托于Linux系统。在OS层,我们可以直接使用ROS官方支持度最好的Ubuntu操作系统,也可以使用macOS、Arch、Debian等操作系统。

 

2. 中间层

Linux是一个通用系统,并没有针对机器人开发提供特殊的中间件,所以ROS在中间层做了大量工作,其中最为重要的就是基于TCPROS/UDPROS的通信系统。通信系统使用发布/订阅、客户端/服务器等模型,实现多种通信机制的数据传输。此外,ROS还提供一种进程内的通信方法——Nodelet,可以为多进程通信提供一种更优化的数据传输方式,适合对数据传输实时性方面有较高要求的应用。在通信机制之上,ROS提供了大量机器人开发相关的库,如数据类型定义、坐标变换、运动控制等,可以提供给应用层使用。

 

3. 应用层

在应用层,ROS需要运行一个管理者——Master,负责管理整个系统的正常运行。ROS社区内共享了大量的机器人应用功能包,开发者只需要了解接口规则即可实现复用,极大地提高了开发效率。如图2列示了ROS通信层模型及其对应的OSI模型,应用层协议是基于构建在TCP/IP架构上的XML-RPC HTTP协议实现的,节点间的消息是通过满足HTTP协议的网页文件进行传递的。

图2 ROS通信模型及其对应的OSI模型

 

ROS系统软件的功能模块以节点为单位独立运行。节点(Node)指一些执行运算任务的进程,一个系统一般由多个节点组成,也可以称为“软件模块”。节点之间最重要的通信机制就是基于发布/订阅模型的消息(Message)通信。每一个消息都是一种严格的数据结构。消息以一种发布/订阅(Publish/Subscribe)的方式传递。一个节点可以针对一个给定的话题(Topic)发布消息(称为发布者/Talker),也可以关注某个话题并订阅特定类型的数据(称为订阅者/Listener)。

图3 ROS中基于发布/订阅模型的话题通信

 

ROS中还有适合用于双向的同步传输模式称为服务(Service),其基于客户端/服务器(Client/server)模型,包含两个部分的通信数据类型:一个用于请求,另一个用于应答,类似于Web服务器。

 

为了统筹管理以上概念,系统中需要有一个控制器使得所有节点有条不紊地执行,这就是ROS节点管理器(ROS Master)。ROS Master 通过远程过程调用(RPC)提供了登记列表和对其他计算图表的查找,节点间通过ROS Master来找到彼此,然后交换消息或调用服务。

 

而在文件系统管理方面,ROS与操作系统类似,将所有文件按照一定的规则进行组织,不同功能的文件被放置在不同的文件夹下。

图4 ROS中的文件系统结构

 

ROS开源社区中的资源十分丰富,而且可以用过网络共享多种软件和知识。

 

图5 ROS社区资源的组织形式

 

ROS是一个分布式框架,它的所有软件功能和工具都建立在这种分布式通信机制上,所以ROS的通信机制是最底层也是最核心的技术。ROS有三种最核心的通信机制,分别是话题通信机制、服务通信机制、参数管理机制。

 

1. 话题通信机制

话题在ROS中使用最为频繁,其通信模型也较为复杂。在ROS中有两个节点:发布者Talker,订阅者Listener。两个节点分别发布、订阅同一个话题,启动顺序没有强制要求。我们在这里假设Talker先启动,整个通信过程可以分解成以下七步:

图6 基于发布订阅模型的话题通信机制

 

A. Talker注册

Talker启动,通过1234端口使用RPC向ROS Master注册发布者的信息,包含所发布消息的话题名;ROS Master会将节点的注册信息加入注册列表。

A. Listener注册

Listener启动,同样通过RPC向ROS Master注册订阅者的信息,包含需要订阅的话题名。

C. ROS Master进行信息匹配

Master根据Listener的订阅信息从注册列表中进行查找,如果没有找到匹配的发布者,则等待发布者的加入;如果找到匹配的发布者信息,则通过RPC向Listener发送Talker的RPC地址信息。

D. Listener发送连接请求

Listener接收到Master发回的Talker地址信息,尝试通过RPC向Talker发送连接请求,传输订阅的话题名、消息类型以及通信协议(TCP/UDP)。

E. Talker确认连接请求

Talker接收到Listener发送的连接请求后,继续通过RPC向Listener确认连接信息,其中包含自身的TCP地址信息。

F. Listener尝试与Talker建立网络连接

Listener接收到确认信息后,使用TCP尝试与Talker建立网络连接。

G. Talker向Listener发布数据

成功建立连接后,Talker开始向Listener发送话题消息数据。

 

2. 服务通信机制

服务是一种带有应答的通信机制,其通信原理如下图所示。与话题的通信相比,它减少了Listener与Talker之间的RPC通信。

图7 基于服务器客户端的服务通信机制

 

A. Talker注册
Talker启动,通过1234端口使用RPC向ROS Master注册发布者的信息,包含所提供的服务名;ROS Master会将节点的注册信息加入注册列表中。
B. Listener注册
Listener启动,同样通过RPC向ROS Master注册订阅者的信息,包含需要查找的服务名。
C. ROS Master进行信息匹配
Master根据Listener的订阅信息从注册列表中进行查找,如果没有找到匹配的服务提供者,则等待该服务的提供者加入;如果找到匹配的服务提供者信息,则通过RPC向Listener发送Talker的TCP地址信息。
D. Listener与Talker建立网络连接
Listener接收到确认信息后,使用TCP尝试与Talker建立网络连接,并且发送服务的请求数据。
E. Talker向Listener发布服务应答数据
Talker接收到服务请求和参数后,开始执行服务功能,执行完成后,向Listener发送应答数据。

 

3. 参数管理机制

参数类似于ROS中的全局变量,由ROS Master进行管理,其通信机制较为简单,不涉及TCP/UDP的通信。

图8 基于RPC的参数管理机制

 

A. Talker设置变量
Talker使用RPC向ROS Master发送参数设置数据,包含参数名和参数值;ROS Master会将参数名和参数值保存到参数列表中。
B. stener查询参数值
Listener通过RPC向ROS Master发送参数查找请求,包含索要查找的参数名。
C. ROS Master向Listener发送参数值
Master根据Listener的查找请求从参数列表中进行查找,查找到参数后,使用RPC将参数值发送给Listener。

 

以上三种方式中,话题和服务是ROS中最基础也是使用最多的通信方法。他们两者有着明确的差别。

 

话题

服务

同步性

异步

同步

通信模型

发布/订阅

客户端/服务器

底层协议

ROSTCP/ROSUDP

ROSTCP/ROSUDP

反馈机制

缓冲区

实时性

节点关系

多对多

一对多(一个Server)

适用场景

数据传输

逻辑处理

 

二、ROS-I简介

 

随着ROS的迅猛发展,它的应用不断渗入工业领域,从而产生了一个新的分支——ROS-Industrial(ROS-I)。ROS将其丰富的功能和特性带给工业机器人,比如运动规划、运动学算法、视觉感知,以及rviz、Gazebo等工具,不仅降低了原本复杂、严格的工业机器人的研发门槛,而且还能帮助企业和单位降低研发成本。它为工业机器人创建了一个强大的社区支持,并提供一站式的工业级ROS应用开发支持。

 

从整体架构来看,ROS-I在ROS的基础上,针对工业应用增加了不少功能模块。

 

http://www.guyuehome.com/wp-content/uploads/2016/09/clip_image0044.png

图9 ROS-I的总体架构

 

  1. GUI:上层UI分为两部分,一部分是ROS中现有的UI工具;另一部分是专门针对工业机器人通用的UI工具,但目前还是未来规划中的一个模块。
  2. ROS Layer:ROS基础框架,提供核心通信机制。
  3. MoveIt! Layer:为工业机器人提供规划、运动学等核心功能的解决方案。
  4. ROS-I Application Layer (Future):处理工业生产的具体应用,目前也是针对未来的规划。
  5. ROS-I Interface Layer:接口层,包括工业机器人的客户端,可以通过simple message协议与机器人的控制器通信。
  6. ROS-I Simple Message Layer:通信层,用于定义通信的协议、打包和解析通信数据。
  7. ROS-I Controller Layer:机器人厂商开发的工业机器人控制器。

 

从整体架构可以看到,ROS-I在复用已有ROS框架、功能的基础上,在工业领域进行了针对性的拓展,而且可以通用于不同厂家的机器人控制器。需要指出的是,ROS-I始终处于开发测试阶段,未见公开地推广应用,在Willow Garage破产之后,ROS-I联盟中的其他厂商是否有足够的动力推动ROS-I的发展尚有待观察;而ROS2推出之后,ROS-I是否有必要作为独立体系存在,也是值得商榷的话题。

 

三、ROS2简介

 

经过十年的发展,如今ROS应用的机器人领域越来越广,机器人已经开始从科研领域走向人们的日常生活。ROS虽然仍是机器人领域的开发利器,但介于最初设计时的局限性,也逐渐暴露出不少问题。其中主要存在以下问题。

 

1. 没有构建多机器人系统的标准方法。

2. ROS 1 基于Linux系统,在Windows、macOS、RTOS等系统上无法应用或者功能有限。

3. ROS 1缺少实时性方面的设计,所以在很多行业领域应用中捉襟见肘。

4. ROS 1的分布式机制需要良好的网络环境才能保证数据完整性,而且网络不具备数据加密、安全防护等功能,网络中的任何主机都可以获得节点发布或接收的消息数据。

5. ROS 1的稳定性欠佳,这就导致很多机器人从研究开发到消费产品的过渡非常艰难。

 

由于ROS 1这些缺陷的存在,开发者们对于新一代ROS的需求越来越急迫,呼声越来越大。终于,在2017年12月8日,ROS 2的第一个正式版发布了。众多的新技术和新概念应用到新一代的ROS中,不仅带来了整体架构的颠覆,更是增强了ROS 2的综合性能。相比ROS 1,ROS 2的设计目标更加丰富,弥补了许多第一代的不足。

 

图10 ROS 2的设计目标

 

除此之外,ROS 2重新设计了系统架构,我们可以从下图看到两代ROS之间架构的变化。

 

图11 ROS 2与ROS 1的系统架构对比

 

1. OS

ROS 1主要构建在Linux系统上;ROS 2支持构建的系统包括Linux、Windows、macOS、RTOS,甚至没有操作系统的裸机。

2. 中间层

ROS 1的通信系统基于TCPROS/UDPROS,而ROS 2的通信系统基于DDS。DDS是一种分布式实时系统中数据发布/订阅的标准解决方案。它最早应用于美国海军,用于解决舰船复杂网络环境中大量软件升级的兼容性问题,目前已经成为美国国防部的强制标准,同时广泛应用于国防、民航、工业控制等领域,成为分布式实时系统中数据发布/订阅的标准解决方案。

3. 应用层

ROS 1十分依赖于ROS Master,因此一旦Master宕机,整个系统将面临窘境。而在ROS 2架构中,让人耿耿于怀的Master终于消失了,节点之间使用的是一种成为“Discovery”的发现机制来帮助彼此建立连接。

 

在通信模型方面,ROS 2引入了DDS(Data Distribution Service)的通信机制,这是ROS迈向工业化的关键一步。DDS最早应用于美国海军来解决舰船复杂网络环境中大量软件升级的兼容性问题,已经成为美国国防部的强制标准,同时广泛应用于国防、民航、工业控制等领域,成为分布式实时系统中数据发布/订阅的标准解决方案。一句话,有了DDS,用户再也不用担心ROS2的通讯不稳定啦。

图12 ROS 2的通信模型

 

参与者(Participant):在DDS中,每一个发布者或者订阅者都成为参与者,对应于一个使用DDS的用户。

发布者(Publisher):数据发布的执行者。

订阅者(Subscriber):数据订阅的执行者。

数据写入器(DataWriter):上层应用向发布者更新数据的对象。

数据读取器(DataReader):上层应用从订阅者读取数据的对象。

话题(Topic):话题需要定义一个名称和一种数据结构,每个话题都是一个实例,可以存储该话题中的历史消息数据。

质量服务原则(Quality of Service Policy):这是ROS 2中新增的,也是非常重要的概念,控制各方面与底层的通信机制,主要从时间限制、可靠性、持续性、历史记录这几个方面满足用户针对不同场景的数据需求。

图13 ROS 2的质量服务原则

 

ROS 2相比于ROS 1,在以下方面有所提升:

1. 实时性增强:数据必须在deadline之前完成更新。

2. 持续性增强:DDS可以为ROS 2提供数据历史服务,新加入的节点也可以获取发布者发布的所有历史数据。

3. 可靠性增强:配置可靠性原则,用户可以根据需求选择性能模式(BEST_EFFORT)或者稳定模式(RELIABLE)。

 

在ROS过去十年的发展中,一直是作为学习和研究的平台,而以ROS2的推出为标志,ROS的性能终于可以达到商业和工业的应用要求。

 

四、ROS的应用优势

 

目前机器人技术的应用以项目定制的方式为主体,缺乏统一的标准化硬件和平台化软件;除了机械臂领域由于起步较早,形成了一定的产业上下游分工及生态系统之外,其他的机器人公司往往是集硬件、软件、系统集成实施、维护于一身,缺乏专业化分工,造成了研发及生产效率低下,项目周期长、费用高,阻碍了机器人技术的更广泛应用。如何打造最柔性的机器人供应生态,解决行业多样化、需求多样化、产品多样化的难题,是整个机器人行业面临的课题,很多厂商在尝试搭建通用软硬件组态平台(例如微软的Microsoft RoboticsStudio MSRS, ABB的RobotWare + RobotStudio;AGV领域里KOLLMORGAN的NDC平台,浙江国自机器人的GRACE平台等等),以达到开放、灵活、自主、快速响应各类定制需求,便捷构建各类产品与应用的目标。然而,靠单一厂商搭建的平台,而且又没有开源的情况下,很难被广大从业者所接受。在这个时候,ROS的出现正当其时,逐步成为机器人领域中软件平台的事实标准,使软件的互联互通有了统一的平台和标准,使硬件的研发和生产标准化,使上下游专业化分工出现曙光,正如智能手机行业在安卓系统出现之后迎来了突破性的大发展一样,ROS系统的普及势必带动机器人领域更快的技术发展和广泛应用。归结起来,ROS作为机器人领域的软件平台有如下优势:

 

1. ROS提供了一个开源免费的统一软件平台,为世界各地的机器人开发者所接受,并形成了广泛而快速发展的社区生态系统,很多有志于投身于机器人事业的工科学生及工程师在自发学习实践ROS系统。ROS支持多种编程语言,一个懂C++或者PYTHON的有经验的工程师在一周内就能上手使用ROS的功能;使用ROS来开发项目在人员招募、培训、技术交流等方面都提供了显著的便利。

2. ROS生态提供了大量开源包和可复用的代码资源,例如机械臂的运动解算、AGV的激光SLAM、视觉SLAM算法、可靠并具有实时性的通讯框架(特指ROS2/DDS)、机器视觉OpenCV库、点云库PCL等,使机器人项目开发及应用的门槛大为降低;在当前机器人项目开发中,大量的研发人员时间被消耗在打通各个组件的通讯协议、重复开发GOOGLE等公司已经开源的算法等重复性工作上面,而没有用来创造性地解决客户所面临的实际问题。ROS为各种软硬件组件提供了一个很方便的互联互通的框架,不仅新开发的代码可以很快接入,历史上的陈旧代码也能很方便地使用ROSlink开源项目(或者ROS 官网上的rosbridge提供的JSON API)等方式接入,使机器人项目的开发难度和周期显著降低。

3. ROS这样的软件平台促使硬件的研发和生产通用化,而不再为特定项目定制,硬件的标准化、批量化生产将使机器人的销售价格快速降低,推动机器人的普及化应用。例如,上海托华机器人生产的AGV是基于ROS2的通用搬运机器人,图14是该AGV的软件架构,托华ATOVO AGV可以很方便地与同样基于ROS的客户WMS(仓库管理系统)、MES(生产执行系统)、机械臂、升降梯等系统连接并协同工作(用户的WMS、MES等业务系统可以很快地包装成ROS2的节点,或者使用ROS 官网上的rosbridge提供的JSON API)等方式接入)。

图14 AGV的软件架构

 

4. ROS提供了很多过程可视化工具、以及物理级、系统级仿真工具,不仅使机器人项目更便于开发,并使开发工程师与产品人员、管理人员、客户之间的沟通更直观顺畅,便于各方把控项目的进度和方向。开发人员如果能良好地使用仿真工具,在项目具体实施之前就能估测出项目实施的效果,并做出直观的动画视频方便甲方乙方之间的沟通,使项目实施的风险大为降低。下图是上海托华机器人使用ROS中的GAZEBO仿真工具进行AGV搬运机器人的AR(增强现实)系统仿真,其中的蓝色机器是在现实场地中运行的AGV真机,白色机器是系统虚拟出来的AGV。通过AGV真机与虚拟机的混合仿真,既可以进行真实软硬件系统的联调、检验,又可以以虚拟的方式提供现实中难以提供的大量机器和大面积场地,来检验软硬件系统在大规模应用下的性能和表现。

 

图15

 

未来已来,时不我待,ROS为机器人行业提供了软件平台化、硬件通用化、分工专业化、各厂商互联互通的行业大发展的契机,我们每一个从业者应该顺应行业发展的潮流,抓住这样的时机,用好这样的工具,为客户提供更有创造力、更具性价比的解决方案,降低客户应用机器人的门槛,推动机器人更广泛地应用。

 

 

  

参考资料:

1. 《ROS机器人开发实践》 胡春旭 编著 机械工业出版社2018年5月

2. 机器人博客“古月居”http://www.guyuehome.com

3. 《机器人操作系统ROS原理与应用》 周兴社 杨刚 王岚 等编著 机械工业出版社2017年6月

4. ROS 官网 http://www.ros.org/

5. ROS2官网 https://index.ros.org/doc/ros2/

  

 

2019年1月23日 15:05