一种基于ROS的机器人云平台架构设计
2019-01-19黎晓东尹作重
陈 彬,黎晓东,尹作重
(北京机械工业自动化研究所有限公司,北京 100120)
0 引言
国内外现有的机器人云平台架构并不统一,或多或少的还存在一定的局限性,造成了很多重复技术性研究。例如DAvinCi云计算平台是机器人技术结合云计算优势的一次重要尝试,证明了在云端执行算法来构建大区域地图的执行时间可以显著缩短,极大地提升了机器人的性能。但其架构设计主要针对即时定位与地图构建这一具体场景,通用性并不强。RoboEarth架构没有考虑到在云中如何部署服务这个问题,如何提高资源的使用效率是该系统的难点。知识共享的机器人云平台架构主要用于多机器人(包括异构)之间协作:包括知识共享合作、物理任务合作和计算任务合作。服务机器人云平台总体架构用面向服务的架构(SOA)来构建机器人云服务,重在研究对云平台服务的调度和管理。但SOA集成机制和集中式治理在系统需要扩展时预先确定了瓶颈,所以微服务架构似乎准备取代SOA作为占主导地位的产业架构。
本文按照以下三个部分展开:对机器人云平台进行需求分析;提出一种基于ROS的机器人云平台架构;总结与展望。
1 机器人云平台需求分析
结合国内外现有的机器人云平台架构,机器人云平台架构设计需要从以下这些方面来考虑:
1)机器人云平台用户有哪些,需要提供哪些云服务。机器人云平台适用对象有机器人生产厂家和机器人用户:
对于机器人生产厂家来说,需要通过机器人云平台云服务来实现产品的优化设计,达到经济效益的增长的目的。应用数据分析、数据挖掘技术,主动生成产品分析报告和用户画像并推送给用户,从而为用户提供远程数据监测、远程控制与参数配置、远程维护等通用服务。通过对机器人运行数据上传到云平台,对日志文件及系统故障剖析,在产品设计及运行上对机器人出现的常见故障进行技术性的改进。建立机器人大数据分析和故障预测模型,预测机器人何时会出现运行方面的问题,避免因为意外停机而造成机器人任务的终止。实现机器人产品设计优化,提供故障预测与诊断、全生命周期监控、远程维护和健康管理服务等增值服务。
对于机器人用户来说,需要利用机器人云平台的提供的开发环境研究机器人的应用创新并进行实施验证。通过使用机器人云平台的大数据分析以及数据挖掘套件,研究机器人的应用创新。对机器人进行建模,提出机器人领域大数据解决方案,并进行实验验证。还要为用户提供测试与调试、售后管理和预测性维护等专用 服务。
2)机器人云平台如何实现虚拟化。云平台即“平台上云”,又称为硬件虚拟化,是将很多台计算机的物理硬件资源,予以抽象、转换后呈现出来并可供分割、组合为一个或多个计算机配置环境[1]。由此,打破实体构造间的不能分割的妨碍,使用户能够比原来的配置更好的形式来使用这些计算机硬件资源[2~4]。虚拟化是完成硬件资源池化的一种方式,衍生出了很多种开源或商业的工具,例如vmware软件中的exsi技术等。本文用OpenStack将机器人云平台虚拟化,它是一个大规模可伸缩的完全分布式的,由Rackspace和NASA发起,Apache许可授权的开源云操作系统[5]。旨在帮助企业或个人能够简单的部署和大规模扩展云计算服务来满足公共或私有云的需求。OpenStack是建立在各种虚拟化软件上的管理服务总线,提供了大量的基于http/https的REST(Representational State Transfer)API[6]去管理计算资源。云主要为远程环境中的终端用户提供计算功能,在远程环境中,实际的软件作为服务运行在可靠的、可伸缩的服务器上,而不需要在每个用户的计算机上部署。OpenStack为部署虚拟机(VMs)和其他实例提供了便利,这些实例处理管理云环境的不同任务。它提供了非常容易的水平扩展,这意味着可以方便地同时在云中运行更多的虚拟机,为更多用户提供Iaas服务。
3)机器人与云平台如何交互。统一的数据交换规范有利于实现云服务平台与机器人快速对接,保证数据实时动态匹配,减少不兼容带来的资源浪费等。机器人云平台定义的接口只能处理特定格式的数据,输入接口需要将异构数据转换格式。早期是通过网关将机器人连接到广域网,在处理上传和下载数据时对数据格式进行转换来实现机器人与云服务平台的互联互通。数据上传下载前必须先进行预处理,但数据交换的鲁棒性和实时性对从一种形式到另一种数据格式的转换有很大的影响[7]。本文采用ROS通讯机制来实现机器人与云平台之间的交互。
4)ROS功能软件包如何快速部署与如何实现接口服务化的支持。现代机器人控制系统通常逻辑上设计为基于组件的分布式系统,每个单元能够抽象一些硬件部分或功能,并向其余系统公开一个标准接口。构建、运行和交付复杂的ROS应用程序和服务对于非专业人士来说可能是一项艰巨的任务。软件行业初期,程序员大多编程不规范、代码没有模块化,都有着可靠性不高、维护成本高和扩展性不好的问题。企业应用程序的不断增长的复杂性,以及变更和进化管理带来了SOA(面向服务)体系结构的兴起。但SOA体系结构在系统的扩展性上存在瓶颈,微服务架构是将应用程序拆分为一些小服务部署在平台中,正成为一种更为开发人员所接受的服务封装方法。
2 基于ROS机器人云平台系统架构
本文提出一种基于ROS的机器人云服务平台架构,根据功能层次分为基础层、平台层和服务层三个层次,如图1所示。
2.1 基础层
基础层是为机器人云平台提供基础设施资源的物理硬件层次,包括服务器、存储和网络资源等。云是基于存储在由网络工程师运营的数据中心中的物理计算硬件(服务器,节点,PDU,刀片,管理程序,冷却设备等)。基础层可基于公有云IaaS层,也可自建私有云,为用户提供Iaas服务,所要解决的是IT资源的虚拟化和自动化管理问题。
公有云是云提供商用大量服务器虚拟化后组成的基础设施,作为计价服务提供给客户。云提供商提供即用即付的弹性资源如CPU,内存,磁盘和网络带宽,用户能低成本获得所需的硬件资源,按需租用相应的计算能力、存储容量和网络带宽,而且省去了硬件运维方面的成本[8~10],大大降低了用户在购买硬件上的花费。云提供商给用户按需提供硬件资源,可用于开发、运行和测试机器人应用程序。私有云是用户自己构建云,可以满足硬件的弹性定制。
基于R O S 的机器人云服务平台基础层采用OpenStack开源云平管理系统将物理服务器、存储设备以及网络资源进行整合并虚拟化,从而完成资源的动态分配和实现平台的水平扩展达到硬件的定制和灵活管理的目的,为整个机器人云平台提供Iaas服务。
2.2 平台层
平台层是用于促进用户应用开发、部署的中间件云服务,为机器人软件程序提供开发、测试和运行环境的层次。机器人开发者使用云的平台层来创建应用程序,构建软件和Web工具。
基于ROS的机器人云平台预装平台通用组件和机器人通用组件,提供在云计算环境中开发、测试、运行和管理应用服务所需的基本功能。组件是一种可以动态地从网络中添加或删除的软件对象,它通过一种中立的、独立于编程语言的内部接口提供服务。
1)平台通用组件
平台层以平台软件为核心,提供动态负载、并行调度、数据检索、数据挖掘等通用组件。
2)机器人通用组件
平台层在ROS软件框架的基础上将ROS代码进行二次开发部署成机器人通用组件。ROS封装好了机器人的底层硬件,提供了一系列接口,并且自带一系列开箱即用的默认软件功能包,包括机器人仿真和可视化工具、自主建图与定位导航算法、轨迹生成算法、反馈控制律、设备运动学、进程间通信支持、运动估计算法、3D点云解释、坐标转换tf库、机器视觉开源库OpenCV和OpenNI等,以及使用Dijkstra和*算法实现ALCL定位和最短路径规划等流行机器人控制算法[11]。基于ROS代码模块化、软件复用性高和扩展性强的特点,可以利用GitHub中共享的代码进行二次开发打包部署在平台层。平台层基于ROS开发人脸、表情识别,场景识别与理解,定位与导航,语音交互,行为识别、动作体感交互和机器人自主推理、决策与规划等软件组件。
在机器人软件开发过程中,开发人员都要浪费很多时间重复构建开发环境,造成了很多重复技术性研究。开发、测试好机器人应用程序后,将机器人应用程序部署在平台上既困难又耗时,大大浪费人力成本。所以平台层还提供用于开发机器人应用程序的集成开发环境。
2.3 服务层
服务层是将资源抽象和虚拟化封装成服务部署在云平台上,以提供软件的模式(例如提供SDK或API)的方式为用户提供服务,是 云的最顶层。它们允许在多租户环境中交付软件和业务流程。用户使用存储在位于世界各地的数据中心的Web服务器中的任何基于云的软件时,都是在访问服务层。由服务提供商负责在机器人云平台上部署软件并维护好版本,用户只需接入互联网,就能随时随地使用部署在云上的应用服务。Github就是SaaS的一个很好的例子,它们隐藏了软件的基本细节,只是提供了一个在系统上工作的Web界面。在幕后,可以轻松更改软件版本。
通过对机器人进行资源服务化封装,在平台中构建机器人的云端数字孪生,为业务应用提供抽象世界与现实世界的联接,提供不同层次的机器人云服务。机器人生产厂家可基于机器人云平台,开发符合自身需要的监控、分析系统,为市场售后、研发等环节提供指引。提供机器人全生命周期监控、远程控制与参数配置、远程数据监测、数据追溯、健康状况分析、健康管理、远程维护等服务。机器人用户将机器人接入云平台,使用所提供的平台服务。机器人云平台主要为机器人用户提供数据查询、可视化交互、预测性维护、测试与调试等云服务。通过Web界面在机器人云平台中做仿真测试,方便可视化。
3 结语
本文提出的基于ROS的机器人云服务平台架构根据功能层次分为基础层、平台层和服务层三个层次,能够为搭建机器人云平台提供参考;机器人云平台能够解决机器人开发人员在开发过程中需要重复构建开发环境和部署机器人软件服务的问题,为机器人程序的开发提供便利。