樊澤棟++丁博++史殿習(xí)++張鵬飛
摘要:在分布計(jì)算環(huán)境下機(jī)器人領(lǐng)域?qū)W(wǎng)絡(luò)消息傳輸?shù)膶?shí)時(shí)性有著迫切的需求。目前主流的機(jī)器人中間件ROS(Robot Operatmg System)尚不能提供對(duì)消息實(shí)時(shí)性的支持。在傳統(tǒng)分布計(jì)算件領(lǐng)域,對(duì)網(wǎng)絡(luò)消息傳輸?shù)膶?shí)時(shí)性的研究已經(jīng)非常深入,并涌現(xiàn)出很多優(yōu)秀的研究成果(例如OpenSplice DDS)。本文將OpenSplice DDS集成到ROS內(nèi)核的通信層,使之成為ROS底層可選的通信協(xié)議之一,從而實(shí)現(xiàn)ROS網(wǎng)絡(luò)消息傳輸?shù)膶?shí)時(shí)性。實(shí)驗(yàn)表明,修改后的ROS內(nèi)核具有更好的可伸縮性和消息優(yōu)先級(jí)等實(shí)時(shí)保證能力。
關(guān)鍵詞:機(jī)器人中間件;實(shí)時(shí)性;分布計(jì)算環(huán)境;ROS
中圖分類號(hào):TP31 文獻(xiàn)標(biāo)識(shí)碼:A DOI: 10.3969/j.issn.1003-6970.2015.10.006
引言
隨著機(jī)器人軟件日趨復(fù)雜,特別是機(jī)器人分布式應(yīng)用的普及,中間件等軟件基礎(chǔ)設(shè)施在機(jī)器人軟件領(lǐng)域的地位也日趨重要,其作用主要表現(xiàn)在兩個(gè)方面:(1)通過(guò)平臺(tái)化實(shí)現(xiàn)軟件重用,即通過(guò)規(guī)范化、模塊化的編程模型(例如面向機(jī)器人領(lǐng)域的構(gòu)件模型)來(lái)實(shí)現(xiàn)機(jī)器人應(yīng)用邏輯的有效重用。(2)為分布異構(gòu)提供必要支持。即通過(guò)中間件的引入,使得機(jī)器人應(yīng)用的開發(fā)者無(wú)需關(guān)心底層的分布性,實(shí)現(xiàn)異構(gòu)機(jī)器人計(jì)算結(jié)點(diǎn)之間的互聯(lián)互通。
目前,由著名機(jī)器人公司W(wǎng)illow Garage開發(fā)和維護(hù)的ROS(Robot Operating System)是國(guó)際上比較主流的開源機(jī)器人中間件,并逐漸成為機(jī)器人領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。ROS的首要設(shè)計(jì)目標(biāo)是提高機(jī)器人研究和開發(fā)過(guò)程中的代碼重用,使得開發(fā)者可以將精力聚焦在新的使能技術(shù)上。它具有如下一些顯著的特點(diǎn):
(1)元操作系統(tǒng)。ROS雖然名為“操作系統(tǒng)”,但它是一個(gè)元操作系統(tǒng),即運(yùn)行在已有的通用操作系統(tǒng)之上(如Ubuntu)的一層基礎(chǔ)軟件。在這個(gè)意義上,它更符合傳統(tǒng)中間件的定義。
(2)分布式架構(gòu)。一個(gè)機(jī)器人內(nèi)部往往有多個(gè)計(jì)算/信息處理結(jié)點(diǎn),因此ROS本身設(shè)計(jì)為一個(gè)分布式、點(diǎn)對(duì)點(diǎn)的架構(gòu)。在每個(gè)結(jié)點(diǎn)的通用操作系統(tǒng)之上,它提供了與機(jī)器人密切相關(guān)的各類服務(wù)(如多個(gè)計(jì)算節(jié)點(diǎn)之間的消息發(fā)布/訂閱能力)。
(3)微內(nèi)核和“瘦”化設(shè)計(jì)。ROS內(nèi)部基于微內(nèi)核設(shè)計(jì),它不追求構(gòu)造一個(gè)單一化的巨大的機(jī)器人開發(fā)和運(yùn)行環(huán)境,而是通過(guò)微內(nèi)核集成了大量的工具和模塊。
但是,ROS目前尚不能提供對(duì)實(shí)時(shí)性的支持,而在分布計(jì)算環(huán)境下機(jī)器人領(lǐng)域?qū)?shí)時(shí)性又有著極為迫切的需要?;诖爽F(xiàn)狀,本文對(duì)ROS的內(nèi)核進(jìn)行修改,將OpenSplice DDS集成到ROS中,實(shí)現(xiàn)ROS對(duì)網(wǎng)絡(luò)消息傳輸?shù)膶?shí)時(shí)陛的支持。本文后續(xù)內(nèi)容組織如下:第2節(jié)闡述研究背景與相關(guān)工作,第3節(jié)給出ROS消息實(shí)時(shí)性實(shí)現(xiàn)的內(nèi)核擴(kuò)展方法,第4節(jié)進(jìn)行測(cè)試并得出實(shí)驗(yàn)結(jié)果,第5節(jié)結(jié)束語(yǔ)。
1 研究背景與相關(guān)工作
1.1 機(jī)器人分布計(jì)算環(huán)境下的消息實(shí)時(shí)性
隨著機(jī)器人應(yīng)用規(guī)模的增長(zhǎng)和應(yīng)用領(lǐng)域的擴(kuò)展,分布計(jì)算技術(shù)在機(jī)器人應(yīng)用中日趨重要,主要表現(xiàn)在兩個(gè)方面:(1)真實(shí)機(jī)器人需要感知和處理多種環(huán)境信息,在動(dòng)態(tài)變化的環(huán)境中遂行復(fù)雜任務(wù),本身往往具有多個(gè)信息處理結(jié)點(diǎn);(2)人們希望機(jī)器人能完成更加復(fù)雜的作業(yè),這些復(fù)雜的作業(yè)由單一機(jī)器人已難以完成,需要多機(jī)器人通過(guò)分布計(jì)算相互協(xié)調(diào)與合作共同完成。
機(jī)器人與物理世界緊密結(jié)合,物理世界的時(shí)間約束直接映射到機(jī)器人軟件上,因此實(shí)時(shí)性是機(jī)器人軟件的重要特性,機(jī)器人分布計(jì)算軟件也不例外??紤]如下的機(jī)器人分布計(jì)算場(chǎng)景:用于偵查和作戰(zhàn)的無(wú)人機(jī)系統(tǒng)通常由無(wú)人機(jī)、地面控制站和配套網(wǎng)絡(luò)通信設(shè)施組成(見圖1)。例如一個(gè)典型的美軍“捕食者”系統(tǒng)包括四架無(wú)人機(jī)、一個(gè)地面控制站和一個(gè)“特洛伊精神II”數(shù)據(jù)分發(fā)系統(tǒng)。無(wú)人機(jī)需要向后臺(tái)傳輸飛行狀態(tài)數(shù)據(jù)、實(shí)時(shí)圖像信息等多種類型數(shù)據(jù),這些數(shù)據(jù)有不同的優(yōu)先級(jí)和預(yù)期傳輸時(shí)延,例如飛行狀態(tài)數(shù)據(jù)雖然數(shù)據(jù)量較少,但必須高優(yōu)先級(jí)、低延時(shí)傳送,否則可能會(huì)造成遠(yuǎn)程操控的時(shí)滯,這對(duì)于高速飛行的無(wú)人機(jī)可能是致命的;而高分辨率的地面圖像信息主要用于情報(bào)搜集,這些圖像以流的形式持續(xù)向后臺(tái)傳送,需要占用很大的帶寬,但可以以低先級(jí)傳遞,必要時(shí)可以通過(guò)丟幀等方式來(lái)避免網(wǎng)絡(luò)擁堵。
因此,要滿足機(jī)器人分布計(jì)算場(chǎng)景的需求,在消息層面需要提供消息優(yōu)先級(jí)設(shè)置、預(yù)期傳輸延遲設(shè)置、自動(dòng)夭折時(shí)限設(shè)置、時(shí)間過(guò)濾周期設(shè)置等與時(shí)間相關(guān)的服務(wù)質(zhì)量保證能力。這些消息傳輸過(guò)程中的時(shí)間約束即為本文所稱的消息實(shí)時(shí)性。
1.2 相關(guān)研究工作
針對(duì)上節(jié)提出的消息實(shí)時(shí)性需求,本小節(jié)將具體闡述兩個(gè)方面的相關(guān)工作:首先是介紹在傳統(tǒng)中間件領(lǐng)域是如何實(shí)現(xiàn)消息實(shí)時(shí)性的;其次是介紹目前ROS已有的實(shí)時(shí)性實(shí)現(xiàn)方案。
1.2.1 DDS
在企業(yè)計(jì)算和互聯(lián)網(wǎng)計(jì)算領(lǐng)域,DDS是目前實(shí)現(xiàn)消息實(shí)時(shí)性的主流中間件解決方案。在許多大型網(wǎng)絡(luò)化實(shí)時(shí)系統(tǒng)中,最為關(guān)鍵的是數(shù)據(jù)(如嵌入式設(shè)備運(yùn)行狀態(tài)、各類環(huán)境數(shù)據(jù))的實(shí)時(shí)交換,即數(shù)據(jù)必須按照服務(wù)質(zhì)量QoS(如各類實(shí)時(shí)約束)分發(fā)給感興趣的訂閱者。為此,OMG組織發(fā)布了消息實(shí)時(shí)中間件DDS(Data Distribution Service for Real-timeSystems)。在DDS中消息的傳輸采用的是基于主題的訂閱/發(fā)布模型。在此模型下,數(shù)據(jù)的發(fā)送者不是直接將消息發(fā)送給接收者,而是先將消息發(fā)送到主題(topic)上,然后所有訂閱了這個(gè)消息訂閱者從主題接受消息而不需要知道消息的發(fā)布者。通過(guò)此模型,DDS中消息的發(fā)送者和接受者在時(shí)間和空間上是松耦合的,這樣DDS可以較好的應(yīng)用在高度動(dòng)態(tài)的環(huán)境下,例如分布式機(jī)器人環(huán)境。
與其它消息中間件相比(例如Advanced MessageQueuing Protocol).DDS具有以下兩個(gè)優(yōu)點(diǎn):(1)服務(wù)質(zhì)量設(shè)置。DDS定義了較為全面的與時(shí)間相關(guān)的服務(wù)質(zhì)量QoS控制策略,例如消息的傳輸優(yōu)先級(jí)、消息自動(dòng)夭折、傳輸延遲控制、基于時(shí)間過(guò)濾消息等等。(2)擴(kuò)展性強(qiáng)。首先DDS采用的是點(diǎn)對(duì)點(diǎn)的傳輸模式,其次DDS支持UDP/IP組播,這使得DDS具有良好的可擴(kuò)展性。由于DDS具有上述優(yōu)點(diǎn),DDS數(shù)據(jù)分發(fā)服務(wù)已在國(guó)防、電信、航空、分布控制、工業(yè)自動(dòng)化等領(lǐng)域得到廣泛的運(yùn)用。
OpenSplice DDS是由PrismTech公司研發(fā)的開源實(shí)現(xiàn),是目前唯一完全兼容OMG DDS標(biāo)準(zhǔn)的中間件,提供了對(duì)所有DCPS描述和DLRL對(duì)象描述的支持,能夠?yàn)橄到y(tǒng)應(yīng)用提供在正確的時(shí)間和地點(diǎn)獲取正確的數(shù)據(jù)的能力。因而本文將采用OpenSplice DDS來(lái)實(shí)現(xiàn)機(jī)器人中間件ROS的消息實(shí)時(shí)性。
1.2.2 ROS實(shí)時(shí)性現(xiàn)有解決方案
上文已經(jīng)提到ROS作為當(dāng)前主流的機(jī)器人中間件不能提供對(duì)實(shí)時(shí)性的支持,但是ROS支持與實(shí)時(shí)代碼的集成,即在ROS應(yīng)用中嵌入其他實(shí)時(shí)性保證的類包。目前在此方面主要有兩類具有代表性的實(shí)踐:
(1)與PR2機(jī)器人實(shí)現(xiàn)相關(guān)的實(shí)時(shí)代碼
PR2機(jī)器人是Willow Garage公司自身的產(chǎn)品,在其實(shí)現(xiàn)過(guò)程中需要一些實(shí)時(shí)代碼,這些包的名稱都是pr2_*的形式。例如,PR2機(jī)器人的主控軟件包(原文是Main loop that runs the robot)pr2.etherCAT、控制器軟件包pr2_controller_manager等都提供了對(duì)硬實(shí)時(shí)的支持。
(2) ROS與Orocos實(shí)時(shí)工具包的集成
Orocos是一個(gè)面向機(jī)器人控制的開源軟件框架,其上的軟件以O(shè)rocos構(gòu)件的形式組織。Orocos工具鏈中的實(shí)時(shí)工具包提供了對(duì)操作系統(tǒng)實(shí)時(shí)能力(如線程調(diào)度能力)的高層抽象,以及Orocos構(gòu)件的運(yùn)行容器。開發(fā)人員可以基于Orocos實(shí)時(shí)工具包快速開發(fā)出具有實(shí)時(shí)性保證的機(jī)器人控制構(gòu)件。Orocos的底層可以直接是標(biāo)準(zhǔn)的Linux內(nèi)核,也可以是RTAI/LXRT或Xenomai軟件框架,后二者基于標(biāo)準(zhǔn)Linux提供了硬實(shí)時(shí)的編程接口。
上述兩種ROS實(shí)時(shí)性解決方案都是只支持機(jī)器人本地計(jì)算節(jié)點(diǎn)內(nèi)部的實(shí)時(shí)性,而對(duì)分布環(huán)境下網(wǎng)絡(luò)消息的傳輸不能提供實(shí)時(shí)性保證機(jī)制。
2 ROS消息實(shí)時(shí)性實(shí)現(xiàn)的內(nèi)核擴(kuò)展
本文在ROS Indigo版本的基礎(chǔ)上,增加消息傳輸優(yōu)先級(jí)和傳輸延遲控制、消息自動(dòng)夭折機(jī)制、基于時(shí)間的過(guò)濾四個(gè)方面的實(shí)時(shí)性保證機(jī)制。為實(shí)現(xiàn)這一目的,本文對(duì)ROS內(nèi)核進(jìn)行了擴(kuò)展,將DDS引入到了ROS內(nèi)核中,提出了基于ROS/DDS的集成架構(gòu),進(jìn)而設(shè)計(jì)實(shí)現(xiàn)了ROS中的DDS協(xié)議插件,并引入了可供上層應(yīng)用使用的實(shí)時(shí)性相關(guān)API。
2.1 基于協(xié)議插件的ROS/DDS集成架構(gòu)
從本文2.2.1節(jié)的分析可以看出,DDS是分布式實(shí)時(shí)消息傳遞的成熟中間件規(guī)范,在消息層面上能夠支持較為全面的實(shí)時(shí)性支持,并且相關(guān)產(chǎn)品已經(jīng)在實(shí)時(shí)嵌入式系統(tǒng)、工業(yè)控制系統(tǒng)等領(lǐng)域得到廣泛應(yīng)用。因此,本文直接選取符合DDS規(guī)范的開源實(shí)現(xiàn)OpenSplice DDS,將其集成到ROS的消息通信層中,替代已有的ROS消息通信機(jī)制,從而為ROS提供所需的消息實(shí)時(shí)性保證能力。
如圖2所示,本文主要對(duì)ROS內(nèi)核做了如下修改:1)選取符合DDS規(guī)范的開源實(shí)現(xiàn),將之集成到ROS內(nèi)核的消息通信層,成為ROS底層的可選通信協(xié)議之一;2)將ROS應(yīng)用層的現(xiàn)有API(消息發(fā)布/訂閱等方法)映射到DDS實(shí)現(xiàn)上,使得上層應(yīng)用可以通過(guò)ROS API進(jìn)行常規(guī)的消息發(fā)送和接收;3)新增實(shí)時(shí)相關(guān)的消息發(fā)布/訂閱API,并將之映射到底層DDS的實(shí)時(shí)特性。當(dāng)上層應(yīng)用調(diào)用新增的實(shí)時(shí)API進(jìn)行消息發(fā)送和接收時(shí),修改后的ROS內(nèi)核將提供消息優(yōu)先級(jí)、傳輸延遲、消息自動(dòng)夭折、基于時(shí)間的過(guò)濾能力等。
為了盡可能保持ROS現(xiàn)有API的兼容性,本文主要在ROS內(nèi)核底部的消息通信層進(jìn)行修改。鑒于DDS是直接面向消息發(fā)布/訂閱機(jī)制的中間件,內(nèi)部已經(jīng)封裝了連接管理、緩沖區(qū)管理等機(jī)制,因此本文采用DDS接管ROS全部的消息通信層工作的方法來(lái)實(shí)現(xiàn)機(jī)器人的消息實(shí)時(shí)性。
2.2 DDS協(xié)議插件
如前所述,在基于協(xié)議插件的集成架構(gòu)中,DDS協(xié)議插件將接管ROS通信層的全部工作。因此,協(xié)議插件實(shí)際上起到了在ROS消息發(fā)送和接收兩個(gè)緩沖區(qū)與OpenSplice DDS之間的橋接作用,其設(shè)計(jì)方案如圖3所示:
圖3中,DDS協(xié)議插件的核心類是DDSBroker類和DDSListener類:前者負(fù)責(zé)完成DDS消息中間件的初始化、Topic的創(chuàng)建等管理工作,并從發(fā)送消息緩沖區(qū)中獲取ROS消息,轉(zhuǎn)換成DDS消息進(jìn)行發(fā)送;后者將接收到的DDS消息解包,還原成ROS消息,將之放入到ROS的接收消息緩沖區(qū)中。此外,DDS協(xié)議插件中還包括了如下一些內(nèi)部模塊:
·DataWriter池,用來(lái)保存本結(jié)點(diǎn)所發(fā)布Topic對(duì)應(yīng)的DDS DataWriter;
·DataReader池,用來(lái)保存本結(jié)點(diǎn)所訂閱Toipc對(duì)應(yīng)的DDS DataReader;
·Topic映射,用來(lái)在ROS Topic和DDS Topic的語(yǔ)法格式之間進(jìn)行轉(zhuǎn)換;
·消息轉(zhuǎn)換,用來(lái)在DDS和ROS消息之間進(jìn)行雙向轉(zhuǎn)換;
·出錯(cuò)處理,將DDS異常映射到ROS的錯(cuò)誤處理中。
此外,集成架構(gòu)還需要解決的另一個(gè)挑戰(zhàn)是與官方ROS版本的兼容性:當(dāng)系統(tǒng)的多個(gè)結(jié)點(diǎn)中,部份是官方ROS版本(未集成DDS協(xié)議),部份是集成了DDS協(xié)議的版本,能否實(shí)現(xiàn)互聯(lián)互通互操作?為實(shí)現(xiàn)這一目標(biāo),本文擴(kuò)展ROS中原有的協(xié)議協(xié)商機(jī)制,增加對(duì)DDS消息協(xié)議協(xié)商的支持。當(dāng)兩個(gè)ROS結(jié)點(diǎn)之間建立連接時(shí),將通過(guò)雙方都支持的XMLRPC協(xié)議進(jìn)行協(xié)商,并優(yōu)先選擇DDS協(xié)議。如果有一方不支持DDS協(xié)議,將降級(jí)使用TCP或其它可用協(xié)議。同時(shí),用戶也可以通過(guò)ROS應(yīng)用層API中的Transport_hint機(jī)制來(lái)指定優(yōu)先使用的底層通信協(xié)議。
2.3 實(shí)時(shí)性相關(guān)API的添加
修改后的ROS內(nèi)核具有消息傳輸優(yōu)先級(jí)和傳輸延遲控制、消息自動(dòng)夭折機(jī)制、基于時(shí)間的過(guò)濾等實(shí)時(shí)性保證能力。這些能力是以應(yīng)用層API新增方法的形式所直觀展現(xiàn)出來(lái)的。除了所有ROS原有的API外,本文在ROS內(nèi)核中增加消息優(yōu)先級(jí)設(shè)置、預(yù)期傳輸延遲設(shè)置、自動(dòng)夭折時(shí)限設(shè)置、時(shí)間過(guò)濾周期設(shè)置等API,從而使得上層應(yīng)用可以使用新增的實(shí)時(shí)性保證能力(如表l所示)。
3 測(cè)試與實(shí)驗(yàn)結(jié)果
本節(jié)主要對(duì)修改后的ROS內(nèi)核性能和實(shí)時(shí)進(jìn)行的測(cè)試,以驗(yàn)證本文工作的有效性。
3.1 實(shí)驗(yàn)平臺(tái)
本文測(cè)試實(shí)驗(yàn)平臺(tái)為兩臺(tái)服務(wù)器,通過(guò)千兆帶寬交換機(jī)相連,具體配置如下:
中央處理器:Intel Xeon E5-2403 v3 4核處理器,主頻1.8GHz。
內(nèi)存:ECC DDR4,8Gb。
操作系統(tǒng):Ubuntu 14.04。
交換機(jī):NETGEAR GS108T。
3.2 ROS原生協(xié)議與DDS協(xié)議的對(duì)比
首先,我們對(duì)改進(jìn)后的ROS的吞吐量進(jìn)行測(cè)試,并將結(jié)果與ROS的官方版本進(jìn)行對(duì)比。吞吐量的測(cè)試主要分為兩個(gè)方面:
(1)1對(duì)l測(cè)試,即1個(gè)消息發(fā)布者對(duì)1個(gè)消息訂閱者,發(fā)送的單個(gè)消息的大小從100B到50KB。測(cè)試結(jié)果如圖4 (a)所示,修改后的ROS內(nèi)核到達(dá)帶寬最大容量的速度要比ROS官方版本慢,這是因?yàn)榇_保消息傳輸?shù)膶?shí)時(shí)代碼以及網(wǎng)絡(luò)消息附加字段會(huì)帶來(lái)的一定的額外開銷。
(2)1對(duì)n測(cè)試,即一個(gè)消息的發(fā)布者對(duì)n個(gè)消息的訂閱者(n=l、2、…、5),其中每個(gè)消息的大小為20KB。實(shí)驗(yàn)結(jié)果如圖4(b)所示,當(dāng)消息的訂閱者不斷增加時(shí),可以發(fā)現(xiàn)ROS官方版本的吞吐量會(huì)急速下降,而改進(jìn)后的ROS相對(duì)來(lái)說(shuō)較為穩(wěn)定;并且當(dāng)訂閱者的數(shù)量達(dá)到4個(gè)及以上時(shí),改進(jìn)后的ROS的吞吐量會(huì)超過(guò)ROS的官方版本。
3.3 修改后ROS內(nèi)核的實(shí)時(shí)能力測(cè)試
為了驗(yàn)證修改后的ROS的實(shí)時(shí)性是否有效,本小節(jié)選取消息優(yōu)先級(jí)作為測(cè)試的對(duì)象。測(cè)試方法如下:為了測(cè)試出消息優(yōu)先級(jí)設(shè)定的效果,本次實(shí)驗(yàn)選定了三種不同優(yōu)先級(jí)的消息(high、normal、low),分別在三個(gè)不同的話題上進(jìn)行發(fā)布,每個(gè)消息的大小為SKB;消息的發(fā)布者不停的在這三個(gè)話題上發(fā)布消息,直到訂閱這三個(gè)話題的訂閱者接受到的消息達(dá)到300條。實(shí)驗(yàn)結(jié)果如圖4(c)所示,可以發(fā)現(xiàn)改進(jìn)后的ROS收到高優(yōu)先級(jí)的消息數(shù)為179條,收到低優(yōu)先級(jí)的消息數(shù)為l條;而ROS的官方版本接收到不同優(yōu)先級(jí)的消息的數(shù)量相同。因此,修改后的ROS能夠?qū)?shí)時(shí)性提供有效的支持。
4 結(jié)束語(yǔ)
本文主要針對(duì)機(jī)器人中間件ROS實(shí)時(shí)性支持不足的現(xiàn)狀,提出了“ROS+DDS”框架以此來(lái)實(shí)現(xiàn)ROS的消息實(shí)時(shí)性。具體是將OpenSplice DDS集成到ROS內(nèi)核的通信層,作為ROS底層的可選消息協(xié)議之一以此來(lái)實(shí)現(xiàn)實(shí)時(shí)性。通過(guò)實(shí)驗(yàn)證明,改進(jìn)后的ROS能夠?qū)?shí)時(shí)性提供較為有效的支持。下一步我們將繼續(xù)優(yōu)化“ROS+DDS”框架以實(shí)現(xiàn)ROS直接調(diào)用DDS的通信層進(jìn)行消息的實(shí)時(shí)傳輸。