陳 彬,黎曉東,尹作重
(北京機(jī)械工業(yè)自動(dòng)化研究所有限公司,北京 100120)
國(guó)內(nèi)外現(xiàn)有的機(jī)器人云平臺(tái)架構(gòu)并不統(tǒng)一,或多或少的還存在一定的局限性,造成了很多重復(fù)技術(shù)性研究。例如DAvinCi云計(jì)算平臺(tái)是機(jī)器人技術(shù)結(jié)合云計(jì)算優(yōu)勢(shì)的一次重要嘗試,證明了在云端執(zhí)行算法來(lái)構(gòu)建大區(qū)域地圖的執(zhí)行時(shí)間可以顯著縮短,極大地提升了機(jī)器人的性能。但其架構(gòu)設(shè)計(jì)主要針對(duì)即時(shí)定位與地圖構(gòu)建這一具體場(chǎng)景,通用性并不強(qiáng)。RoboEarth架構(gòu)沒(méi)有考慮到在云中如何部署服務(wù)這個(gè)問(wèn)題,如何提高資源的使用效率是該系統(tǒng)的難點(diǎn)。知識(shí)共享的機(jī)器人云平臺(tái)架構(gòu)主要用于多機(jī)器人(包括異構(gòu))之間協(xié)作:包括知識(shí)共享合作、物理任務(wù)合作和計(jì)算任務(wù)合作。服務(wù)機(jī)器人云平臺(tái)總體架構(gòu)用面向服務(wù)的架構(gòu)(SOA)來(lái)構(gòu)建機(jī)器人云服務(wù),重在研究對(duì)云平臺(tái)服務(wù)的調(diào)度和管理。但SOA集成機(jī)制和集中式治理在系統(tǒng)需要擴(kuò)展時(shí)預(yù)先確定了瓶頸,所以微服務(wù)架構(gòu)似乎準(zhǔn)備取代SOA作為占主導(dǎo)地位的產(chǎn)業(yè)架構(gòu)。
本文按照以下三個(gè)部分展開(kāi):對(duì)機(jī)器人云平臺(tái)進(jìn)行需求分析;提出一種基于ROS的機(jī)器人云平臺(tái)架構(gòu);總結(jié)與展望。
結(jié)合國(guó)內(nèi)外現(xiàn)有的機(jī)器人云平臺(tái)架構(gòu),機(jī)器人云平臺(tái)架構(gòu)設(shè)計(jì)需要從以下這些方面來(lái)考慮:
1)機(jī)器人云平臺(tái)用戶有哪些,需要提供哪些云服務(wù)。機(jī)器人云平臺(tái)適用對(duì)象有機(jī)器人生產(chǎn)廠家和機(jī)器人用戶:
對(duì)于機(jī)器人生產(chǎn)廠家來(lái)說(shuō),需要通過(guò)機(jī)器人云平臺(tái)云服務(wù)來(lái)實(shí)現(xiàn)產(chǎn)品的優(yōu)化設(shè)計(jì),達(dá)到經(jīng)濟(jì)效益的增長(zhǎng)的目的。應(yīng)用數(shù)據(jù)分析、數(shù)據(jù)挖掘技術(shù),主動(dòng)生成產(chǎn)品分析報(bào)告和用戶畫(huà)像并推送給用戶,從而為用戶提供遠(yuǎn)程數(shù)據(jù)監(jiān)測(cè)、遠(yuǎn)程控制與參數(shù)配置、遠(yuǎn)程維護(hù)等通用服務(wù)。通過(guò)對(duì)機(jī)器人運(yùn)行數(shù)據(jù)上傳到云平臺(tái),對(duì)日志文件及系統(tǒng)故障剖析,在產(chǎn)品設(shè)計(jì)及運(yùn)行上對(duì)機(jī)器人出現(xiàn)的常見(jiàn)故障進(jìn)行技術(shù)性的改進(jìn)。建立機(jī)器人大數(shù)據(jù)分析和故障預(yù)測(cè)模型,預(yù)測(cè)機(jī)器人何時(shí)會(huì)出現(xiàn)運(yùn)行方面的問(wèn)題,避免因?yàn)橐馔馔C(jī)而造成機(jī)器人任務(wù)的終止。實(shí)現(xiàn)機(jī)器人產(chǎn)品設(shè)計(jì)優(yōu)化,提供故障預(yù)測(cè)與診斷、全生命周期監(jiān)控、遠(yuǎn)程維護(hù)和健康管理服務(wù)等增值服務(wù)。
對(duì)于機(jī)器人用戶來(lái)說(shuō),需要利用機(jī)器人云平臺(tái)的提供的開(kāi)發(fā)環(huán)境研究機(jī)器人的應(yīng)用創(chuàng)新并進(jìn)行實(shí)施驗(yàn)證。通過(guò)使用機(jī)器人云平臺(tái)的大數(shù)據(jù)分析以及數(shù)據(jù)挖掘套件,研究機(jī)器人的應(yīng)用創(chuàng)新。對(duì)機(jī)器人進(jìn)行建模,提出機(jī)器人領(lǐng)域大數(shù)據(jù)解決方案,并進(jìn)行實(shí)驗(yàn)驗(yàn)證。還要為用戶提供測(cè)試與調(diào)試、售后管理和預(yù)測(cè)性維護(hù)等專用 服務(wù)。
2)機(jī)器人云平臺(tái)如何實(shí)現(xiàn)虛擬化。云平臺(tái)即“平臺(tái)上云”,又稱為硬件虛擬化,是將很多臺(tái)計(jì)算機(jī)的物理硬件資源,予以抽象、轉(zhuǎn)換后呈現(xiàn)出來(lái)并可供分割、組合為一個(gè)或多個(gè)計(jì)算機(jī)配置環(huán)境[1]。由此,打破實(shí)體構(gòu)造間的不能分割的妨礙,使用戶能夠比原來(lái)的配置更好的形式來(lái)使用這些計(jì)算機(jī)硬件資源[2~4]。虛擬化是完成硬件資源池化的一種方式,衍生出了很多種開(kāi)源或商業(yè)的工具,例如vmware軟件中的exsi技術(shù)等。本文用OpenStack將機(jī)器人云平臺(tái)虛擬化,它是一個(gè)大規(guī)模可伸縮的完全分布式的,由Rackspace和NASA發(fā)起,Apache許可授權(quán)的開(kāi)源云操作系統(tǒng)[5]。旨在幫助企業(yè)或個(gè)人能夠簡(jiǎn)單的部署和大規(guī)模擴(kuò)展云計(jì)算服務(wù)來(lái)滿足公共或私有云的需求。OpenStack是建立在各種虛擬化軟件上的管理服務(wù)總線,提供了大量的基于http/https的REST(Representational State Transfer)API[6]去管理計(jì)算資源。云主要為遠(yuǎn)程環(huán)境中的終端用戶提供計(jì)算功能,在遠(yuǎn)程環(huán)境中,實(shí)際的軟件作為服務(wù)運(yùn)行在可靠的、可伸縮的服務(wù)器上,而不需要在每個(gè)用戶的計(jì)算機(jī)上部署。OpenStack為部署虛擬機(jī)(VMs)和其他實(shí)例提供了便利,這些實(shí)例處理管理云環(huán)境的不同任務(wù)。它提供了非常容易的水平擴(kuò)展,這意味著可以方便地同時(shí)在云中運(yùn)行更多的虛擬機(jī),為更多用戶提供Iaas服務(wù)。
3)機(jī)器人與云平臺(tái)如何交互。統(tǒng)一的數(shù)據(jù)交換規(guī)范有利于實(shí)現(xiàn)云服務(wù)平臺(tái)與機(jī)器人快速對(duì)接,保證數(shù)據(jù)實(shí)時(shí)動(dòng)態(tài)匹配,減少不兼容帶來(lái)的資源浪費(fèi)等。機(jī)器人云平臺(tái)定義的接口只能處理特定格式的數(shù)據(jù),輸入接口需要將異構(gòu)數(shù)據(jù)轉(zhuǎn)換格式。早期是通過(guò)網(wǎng)關(guān)將機(jī)器人連接到廣域網(wǎng),在處理上傳和下載數(shù)據(jù)時(shí)對(duì)數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換來(lái)實(shí)現(xiàn)機(jī)器人與云服務(wù)平臺(tái)的互聯(lián)互通。數(shù)據(jù)上傳下載前必須先進(jìn)行預(yù)處理,但數(shù)據(jù)交換的魯棒性和實(shí)時(shí)性對(duì)從一種形式到另一種數(shù)據(jù)格式的轉(zhuǎn)換有很大的影響[7]。本文采用ROS通訊機(jī)制來(lái)實(shí)現(xiàn)機(jī)器人與云平臺(tái)之間的交互。
4)ROS功能軟件包如何快速部署與如何實(shí)現(xiàn)接口服務(wù)化的支持。現(xiàn)代機(jī)器人控制系統(tǒng)通常邏輯上設(shè)計(jì)為基于組件的分布式系統(tǒng),每個(gè)單元能夠抽象一些硬件部分或功能,并向其余系統(tǒng)公開(kāi)一個(gè)標(biāo)準(zhǔn)接口。構(gòu)建、運(yùn)行和交付復(fù)雜的ROS應(yīng)用程序和服務(wù)對(duì)于非專業(yè)人士來(lái)說(shuō)可能是一項(xiàng)艱巨的任務(wù)。軟件行業(yè)初期,程序員大多編程不規(guī)范、代碼沒(méi)有模塊化,都有著可靠性不高、維護(hù)成本高和擴(kuò)展性不好的問(wèn)題。企業(yè)應(yīng)用程序的不斷增長(zhǎng)的復(fù)雜性,以及變更和進(jìn)化管理帶來(lái)了SOA(面向服務(wù))體系結(jié)構(gòu)的興起。但SOA體系結(jié)構(gòu)在系統(tǒng)的擴(kuò)展性上存在瓶頸,微服務(wù)架構(gòu)是將應(yīng)用程序拆分為一些小服務(wù)部署在平臺(tái)中,正成為一種更為開(kāi)發(fā)人員所接受的服務(wù)封裝方法。
本文提出一種基于ROS的機(jī)器人云服務(wù)平臺(tái)架構(gòu),根據(jù)功能層次分為基礎(chǔ)層、平臺(tái)層和服務(wù)層三個(gè)層次,如圖1所示。
基礎(chǔ)層是為機(jī)器人云平臺(tái)提供基礎(chǔ)設(shè)施資源的物理硬件層次,包括服務(wù)器、存儲(chǔ)和網(wǎng)絡(luò)資源等。云是基于存儲(chǔ)在由網(wǎng)絡(luò)工程師運(yùn)營(yíng)的數(shù)據(jù)中心中的物理計(jì)算硬件(服務(wù)器,節(jié)點(diǎn),PDU,刀片,管理程序,冷卻設(shè)備等)。基礎(chǔ)層可基于公有云IaaS層,也可自建私有云,為用戶提供Iaas服務(wù),所要解決的是IT資源的虛擬化和自動(dòng)化管理問(wèn)題。
公有云是云提供商用大量服務(wù)器虛擬化后組成的基礎(chǔ)設(shè)施,作為計(jì)價(jià)服務(wù)提供給客戶。云提供商提供即用即付的彈性資源如CPU,內(nèi)存,磁盤(pán)和網(wǎng)絡(luò)帶寬,用戶能低成本獲得所需的硬件資源,按需租用相應(yīng)的計(jì)算能力、存儲(chǔ)容量和網(wǎng)絡(luò)帶寬,而且省去了硬件運(yùn)維方面的成本[8~10],大大降低了用戶在購(gòu)買硬件上的花費(fèi)。云提供商給用戶按需提供硬件資源,可用于開(kāi)發(fā)、運(yùn)行和測(cè)試機(jī)器人應(yīng)用程序。私有云是用戶自己構(gòu)建云,可以滿足硬件的彈性定制。
基于R O S 的機(jī)器人云服務(wù)平臺(tái)基礎(chǔ)層采用OpenStack開(kāi)源云平管理系統(tǒng)將物理服務(wù)器、存儲(chǔ)設(shè)備以及網(wǎng)絡(luò)資源進(jìn)行整合并虛擬化,從而完成資源的動(dòng)態(tài)分配和實(shí)現(xiàn)平臺(tái)的水平擴(kuò)展達(dá)到硬件的定制和靈活管理的目的,為整個(gè)機(jī)器人云平臺(tái)提供Iaas服務(wù)。
平臺(tái)層是用于促進(jìn)用戶應(yīng)用開(kāi)發(fā)、部署的中間件云服務(wù),為機(jī)器人軟件程序提供開(kāi)發(fā)、測(cè)試和運(yùn)行環(huán)境的層次。機(jī)器人開(kāi)發(fā)者使用云的平臺(tái)層來(lái)創(chuàng)建應(yīng)用程序,構(gòu)建軟件和Web工具。
基于ROS的機(jī)器人云平臺(tái)預(yù)裝平臺(tái)通用組件和機(jī)器人通用組件,提供在云計(jì)算環(huán)境中開(kāi)發(fā)、測(cè)試、運(yùn)行和管理應(yīng)用服務(wù)所需的基本功能。組件是一種可以動(dòng)態(tài)地從網(wǎng)絡(luò)中添加或刪除的軟件對(duì)象,它通過(guò)一種中立的、獨(dú)立于編程語(yǔ)言的內(nèi)部接口提供服務(wù)。
1)平臺(tái)通用組件
平臺(tái)層以平臺(tái)軟件為核心,提供動(dòng)態(tài)負(fù)載、并行調(diào)度、數(shù)據(jù)檢索、數(shù)據(jù)挖掘等通用組件。
2)機(jī)器人通用組件
平臺(tái)層在ROS軟件框架的基礎(chǔ)上將ROS代碼進(jìn)行二次開(kāi)發(fā)部署成機(jī)器人通用組件。ROS封裝好了機(jī)器人的底層硬件,提供了一系列接口,并且自帶一系列開(kāi)箱即用的默認(rèn)軟件功能包,包括機(jī)器人仿真和可視化工具、自主建圖與定位導(dǎo)航算法、軌跡生成算法、反饋控制律、設(shè)備運(yùn)動(dòng)學(xué)、進(jìn)程間通信支持、運(yùn)動(dòng)估計(jì)算法、3D點(diǎn)云解釋、坐標(biāo)轉(zhuǎn)換tf庫(kù)、機(jī)器視覺(jué)開(kāi)源庫(kù)OpenCV和OpenNI等,以及使用Dijkstra和*算法實(shí)現(xiàn)ALCL定位和最短路徑規(guī)劃等流行機(jī)器人控制算法[11]。基于ROS代碼模塊化、軟件復(fù)用性高和擴(kuò)展性強(qiáng)的特點(diǎn),可以利用GitHub中共享的代碼進(jìn)行二次開(kāi)發(fā)打包部署在平臺(tái)層。平臺(tái)層基于ROS開(kāi)發(fā)人臉、表情識(shí)別,場(chǎng)景識(shí)別與理解,定位與導(dǎo)航,語(yǔ)音交互,行為識(shí)別、動(dòng)作體感交互和機(jī)器人自主推理、決策與規(guī)劃等軟件組件。
在機(jī)器人軟件開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)人員都要浪費(fèi)很多時(shí)間重復(fù)構(gòu)建開(kāi)發(fā)環(huán)境,造成了很多重復(fù)技術(shù)性研究。開(kāi)發(fā)、測(cè)試好機(jī)器人應(yīng)用程序后,將機(jī)器人應(yīng)用程序部署在平臺(tái)上既困難又耗時(shí),大大浪費(fèi)人力成本。所以平臺(tái)層還提供用于開(kāi)發(fā)機(jī)器人應(yīng)用程序的集成開(kāi)發(fā)環(huán)境。
服務(wù)層是將資源抽象和虛擬化封裝成服務(wù)部署在云平臺(tái)上,以提供軟件的模式(例如提供SDK或API)的方式為用戶提供服務(wù),是 云的最頂層。它們?cè)试S在多租戶環(huán)境中交付軟件和業(yè)務(wù)流程。用戶使用存儲(chǔ)在位于世界各地的數(shù)據(jù)中心的Web服務(wù)器中的任何基于云的軟件時(shí),都是在訪問(wèn)服務(wù)層。由服務(wù)提供商負(fù)責(zé)在機(jī)器人云平臺(tái)上部署軟件并維護(hù)好版本,用戶只需接入互聯(lián)網(wǎng),就能隨時(shí)隨地使用部署在云上的應(yīng)用服務(wù)。Github就是SaaS的一個(gè)很好的例子,它們隱藏了軟件的基本細(xì)節(jié),只是提供了一個(gè)在系統(tǒng)上工作的Web界面。在幕后,可以輕松更改軟件版本。
通過(guò)對(duì)機(jī)器人進(jìn)行資源服務(wù)化封裝,在平臺(tái)中構(gòu)建機(jī)器人的云端數(shù)字孿生,為業(yè)務(wù)應(yīng)用提供抽象世界與現(xiàn)實(shí)世界的聯(lián)接,提供不同層次的機(jī)器人云服務(wù)。機(jī)器人生產(chǎn)廠家可基于機(jī)器人云平臺(tái),開(kāi)發(fā)符合自身需要的監(jiān)控、分析系統(tǒng),為市場(chǎng)售后、研發(fā)等環(huán)節(jié)提供指引。提供機(jī)器人全生命周期監(jiān)控、遠(yuǎn)程控制與參數(shù)配置、遠(yuǎn)程數(shù)據(jù)監(jiān)測(cè)、數(shù)據(jù)追溯、健康狀況分析、健康管理、遠(yuǎn)程維護(hù)等服務(wù)。機(jī)器人用戶將機(jī)器人接入云平臺(tái),使用所提供的平臺(tái)服務(wù)。機(jī)器人云平臺(tái)主要為機(jī)器人用戶提供數(shù)據(jù)查詢、可視化交互、預(yù)測(cè)性維護(hù)、測(cè)試與調(diào)試等云服務(wù)。通過(guò)Web界面在機(jī)器人云平臺(tái)中做仿真測(cè)試,方便可視化。
本文提出的基于ROS的機(jī)器人云服務(wù)平臺(tái)架構(gòu)根據(jù)功能層次分為基礎(chǔ)層、平臺(tái)層和服務(wù)層三個(gè)層次,能夠?yàn)榇罱C(jī)器人云平臺(tái)提供參考;機(jī)器人云平臺(tái)能夠解決機(jī)器人開(kāi)發(fā)人員在開(kāi)發(fā)過(guò)程中需要重復(fù)構(gòu)建開(kāi)發(fā)環(huán)境和部署機(jī)器人軟件服務(wù)的問(wèn)題,為機(jī)器人程序的開(kāi)發(fā)提供便利。