李長春,喬兵,王鶴彬
南京航空航天大學(xué)航天學(xué)院,南京 210016
隨著航天事業(yè)的發(fā)展,快速開發(fā)和部署面向特定任務(wù)的衛(wèi)星的能力成為強(qiáng)烈需求之一,從而推動了模塊化、即插即用等技術(shù)在航天器上的應(yīng)用[1]。2004年,美國空軍研究實驗室(AFRL)啟動了一項將個人計算機(jī)領(lǐng)域流行的即插即用技術(shù)應(yīng)用到航天器系統(tǒng)開發(fā)的研究,這項研究工作最初被命名為“空間即插即用航電”(Space Plug-and-play Avionics,SPA)[2],并在概念成熟后更名為空間即插即用架構(gòu)(Space Plug-andplay Architecture,SPA[3]。SPA 的核心思想是通過具有自描述功能的組件的自動配置來減少重復(fù)的人工定制工作,以達(dá)到快速構(gòu)建復(fù)雜航天器軟硬件系統(tǒng)的目的。
受SPA的啟發(fā),國內(nèi)一些航天機(jī)構(gòu)和院校也開始了對航天器即插即用技術(shù)應(yīng)用的研究,包括在衛(wèi)星綜合電子系統(tǒng)中應(yīng)用即插即用技術(shù)[4],利用即插即用標(biāo)準(zhǔn)接口實現(xiàn)航天器的模塊化設(shè)計[5-7],利用即插即用技術(shù)解決航天器在軌可擴(kuò)展、可重構(gòu)的需求[8-9]等。綜合國內(nèi)發(fā)表的文獻(xiàn)來看,它們大多是通過采用SPA中的關(guān)鍵技術(shù)實現(xiàn)了單個模塊的即插即用特征[6-9],即停留在硬件模塊化層面,很少涉及綜合化的軟件架構(gòu)的研究,也沒有深入研究SPA的網(wǎng)絡(luò)模型。然而要將具有即插即用特征的模塊集成為完整的航天器系統(tǒng),必須有一套支持SPA網(wǎng)絡(luò)方法的中間層軟件系統(tǒng)。因此,為了開展航天器模塊化即插即用項目研究和工程開發(fā),必須自主開發(fā)一套這樣的軟件系統(tǒng)。
軟件可復(fù)用是提高航天器軟件開發(fā)效率的一種有效途徑[10],也是SPA的關(guān)鍵技術(shù)之一。SPA創(chuàng)建了一套標(biāo)準(zhǔn)協(xié)議用于航天器組件的發(fā)現(xiàn)和數(shù)據(jù)交換,使具有標(biāo)準(zhǔn)接口的航天器組件可以快速集成到系統(tǒng)中,而無需在原有軟件系統(tǒng)中修改或添加代碼。最初實現(xiàn)這套協(xié)議的軟件架構(gòu)稱為衛(wèi)星數(shù)據(jù)模型(Satellite Data Model,SDM)[11]。然而,此時的 SPA還缺少一個統(tǒng)一的模型,SDM也沒有一個簡潔的、可擴(kuò)展的網(wǎng)絡(luò)化方法[12]。為此,SPA研發(fā)人員又基于標(biāo)準(zhǔn)的開放系統(tǒng)互聯(lián)(Open Systems Interconnection,OSI)模型制定了SPA的網(wǎng)絡(luò)模型,提出了一套新的SPA組件網(wǎng)絡(luò)尋址和路由方案[12]。本文將首先分析這一模型,作為后文的軟件實施方案的參考依據(jù)。
機(jī)器人操作系統(tǒng)(Robot Operating System,ROS)是一個在機(jī)器人學(xué)研究和開發(fā)領(lǐng)域得到廣泛應(yīng)用的軟件框架,它為類似于機(jī)器人這樣由多節(jié)點構(gòu)成的分布式系統(tǒng)軟件開發(fā)提供了基礎(chǔ)功能、方法和工具[13]。通過分析可以發(fā)現(xiàn),采用SPA網(wǎng)絡(luò)模型的航天器本質(zhì)上也屬于這樣的分布式系統(tǒng),其中SPA模塊化組件對應(yīng)于ROS節(jié)點,因此,ROS中的眾多功能和方法可以用來解決SPA中的類似需求。更重要的是,作為廣泛應(yīng)用于機(jī)器人系統(tǒng)開發(fā)的類操作系統(tǒng),ROS的穩(wěn)定性已得到了驗證。根據(jù)上述分析,本文提出一種基于ROS的空間即插即用系統(tǒng)軟件實施方案。
一個典型的航天器系統(tǒng)包含了許多不同組件,并且各個組件有著不同的帶寬需求。例如一個低數(shù)據(jù)率的溫度傳感器可能掛載在如I2C總線這樣的簡單二線制接口上,而復(fù)雜設(shè)備,例如一臺高級的成像儀器,則需要接到SpaceWire或光纖那樣的高速接口上。不同的物理層接口形成不同的子網(wǎng)絡(luò),SPA系統(tǒng)被設(shè)計為支持多種不同類型的子網(wǎng)絡(luò)互連,盡管它們內(nèi)部的尋址方案和路由方式互不相同[12]。
SPA網(wǎng)絡(luò)方法可以用一個類似OSI模型的5層結(jié)構(gòu)來概括。如圖1所示,其左半部分將OSI模型簡化為一個5層結(jié)構(gòu),即把傳統(tǒng)模型的表示層和會話層包含在了應(yīng)用層內(nèi)。圖1右半部分是SPA模型,它展示了SPA用以實現(xiàn)OSI模型中每一層功能的基本協(xié)議。
在OSI模型中,物理層定義器件的電氣和物理規(guī)范,以及器件與傳輸媒介間的關(guān)系。物理層負(fù)責(zé)處理物理傳輸介質(zhì)與數(shù)字信號之間的轉(zhuǎn)換,連接的建立和終止,還提供了流控制和解決傳輸沖突的方法。SPA模型的物理層則定義了特定物理子網(wǎng)中的設(shè)備連接可采用的標(biāo)準(zhǔn),當(dāng)前包括的標(biāo)準(zhǔn)有SpaceWire、I2C、USB、光纖和UDP套接字[3]。
圖1 OSI與SPA分層模型Fig.1 Layered models of the OSI and SPA
數(shù)據(jù)鏈路層提供網(wǎng)絡(luò)實體間的數(shù)據(jù)傳輸功能,包括組件發(fā)現(xiàn)和物理尋址,以及修復(fù)物理層中可能發(fā)生的錯誤。SPA模型定義了子網(wǎng)專用協(xié)議來提供上述功能,這些協(xié)議通常命名為SPA-x,其中x表示所基于的特定物理層協(xié)議(例如SPA-U表示基于USB的子網(wǎng)協(xié)議)。對于本身不具有即插即用功能的物理子網(wǎng)類型,數(shù)據(jù)鏈路層還負(fù)責(zé)填補(bǔ)其物理層自發(fā)現(xiàn)和異步通信方面的不足,例如SPA-1協(xié)議就為I2C總線封裝了即插即用功能[14]。
網(wǎng)絡(luò)層提供不定長度的數(shù)據(jù)消息從一個網(wǎng)絡(luò)中的源地址到另一網(wǎng)絡(luò)中的目的地址的傳輸方式,即消息路由和邏輯尋址。如有需要,本層可能將消息打斷和重組。簡言之,網(wǎng)絡(luò)層負(fù)責(zé)將來自不同子網(wǎng)的消息流匯聚成獨立于子網(wǎng)的消息。網(wǎng)絡(luò)層還處理可靠性要求,例如消息確認(rèn)和重傳。SPA模型使用SPA邏輯消息來提供這些功能。
傳輸層的作用是使能網(wǎng)絡(luò)端點之間的發(fā)現(xiàn)和連接。在SPA模型中,服務(wù)器和客戶端之間的發(fā)現(xiàn)和連接是根據(jù)一個采用xml文件描述的端點接口規(guī)范進(jìn)行的,這個xml文件就是可擴(kuò)展傳感器電子數(shù)據(jù)表單(extensible Transducer Electronic Data Sheet,xTEDS)。xTEDS 包含了組件可接受的專用命令、可生成的變量以及可傳遞的數(shù)據(jù)消息的描述[15]。所有網(wǎng)絡(luò)組件的xTEDS文件由一個查找服務(wù)收集和索引,任意網(wǎng)絡(luò)組件可以向查找服務(wù)發(fā)布查詢來找到滿足其依賴關(guān)系的組件。
應(yīng)用層是與需要通信的組件直接交互的層。在SPA模型中,組件是使用符合SPA標(biāo)準(zhǔn)的接口連接到SPA網(wǎng)絡(luò)中的端點,它既可以是運行在處理器資源上的軟件應(yīng)用,也可以是掛載在特定子網(wǎng)中的硬件設(shè)備。這些組件包括用于導(dǎo)航、控制和制導(dǎo)的應(yīng)用,有效載荷管理軟件,以及網(wǎng)絡(luò)健康狀態(tài)監(jiān)視進(jìn)程等。通過先前介紹的下層架構(gòu)的支持,應(yīng)用層中的組件可以直接通信,而無需知道數(shù)據(jù)消息的具體傳輸過程。
與SPA類似,ROS也具有一個分層結(jié)構(gòu)。如圖2所示,ROS的每層代表具有相對獨立功能的軟件包的集合。圖2中的ROS基礎(chǔ)框架大類提供了ROS應(yīng)用開發(fā)和系統(tǒng)運行所需的基礎(chǔ)功能,包括硬件接口、節(jié)點通信、語言支持和軟件開發(fā)工具,是所有機(jī)器人系統(tǒng)開發(fā)中可復(fù)用的部分。其中,硬件接口層將不同的硬件設(shè)備抽象為ROS可以理解的節(jié)點;通信層提供ROS節(jié)點間通信和節(jié)點管理的方法,是形成ROS網(wǎng)絡(luò)的關(guān)鍵;語言支持層為使用特定編程語言開發(fā)ROS應(yīng)用提供編程接口;而軟件開發(fā)工具則用于在ROS環(huán)境下進(jìn)行程序編譯和調(diào)試。機(jī)器人學(xué)應(yīng)用框架則包含所有與機(jī)器人學(xué)中的基本原理相關(guān)的軟件包,例如用于處理導(dǎo)航、視覺、坐標(biāo)描述等算法的包。機(jī)器人應(yīng)用層則是實現(xiàn)特定機(jī)器人任務(wù)的程序集合。
ROS的一個重要特征是分布式進(jìn)程(即ROS節(jié)點)的網(wǎng)絡(luò),其中任何節(jié)點可通過該網(wǎng)絡(luò)與其他節(jié)點交互,獲取其他節(jié)點發(fā)布的信息,并將自身數(shù)據(jù)發(fā)布到網(wǎng)絡(luò)上。
ROS的上述一些特征使它可以作為SPA軟件架構(gòu)實現(xiàn)基礎(chǔ)。SPA由多個模塊化的組件獨立運行、相互通信形成的星上網(wǎng)絡(luò),正好對應(yīng)了ROS的分布式進(jìn)程網(wǎng)絡(luò)。ROS的通信方法,包括消息、話題、服務(wù)和節(jié)點管理等機(jī)制,很適合實現(xiàn)SPA邏輯消息的封裝。此外,ROS中大量用于簡化應(yīng)用程序開發(fā)的工具和庫,也可以在SPA開發(fā)中應(yīng)用。
圖2 ROS的分層軟件結(jié)構(gòu)Fig.2 The layered software architecture of ROS
然而ROS也并不是完全符合需求。例如它并不具有SPA網(wǎng)絡(luò)模型中要求的組件自描述功能,也不具備組件向系統(tǒng)查詢數(shù)據(jù)依賴關(guān)系的能力,此外,它的許多用于機(jī)器人編程領(lǐng)域的軟件包對航天器來說是不需要的。因此要實現(xiàn)符合SPA的軟件架構(gòu),就要以ROS的方式編寫和組織代碼,實現(xiàn)SPA功能,并移除掉不需要的ROS功能。將結(jié)合了兩者特征的軟件系統(tǒng)稱為基于ROS的空間即插即用架構(gòu)(ROS-based Space Plug-and-play Architecture,RSPA)。
圖3展示的是RSPA的分層組織結(jié)構(gòu)。RSPA承襲了大量ROS的基礎(chǔ)功能,而將ROS中與機(jī)器人學(xué)相關(guān)的應(yīng)用框架替換為SPA的庫與核心組件,將機(jī)器人應(yīng)用層替換為空間任務(wù)層。
RSPA的空間任務(wù)層中包含了與航天器所執(zhí)行的空間任務(wù)有關(guān)的軟件包,包括導(dǎo)航、軌道調(diào)度等。這些軟件包是根據(jù)航天器的設(shè)計功能定制的,屬于SPA網(wǎng)絡(luò)模型中應(yīng)用層所表示的范疇。
RSPA最重要的一層由SPA庫和核心組件的包構(gòu)成。如圖3所示,軟件包spa_core封裝了實現(xiàn)SPA必要的數(shù)據(jù)結(jié)構(gòu)和功能,這些代碼被編譯為一個可供其他軟件包調(diào)用的核心庫。軟件包spa_ls稱為查找服務(wù),主要實現(xiàn)組件數(shù)據(jù)查詢和xTEDS管理的功能。軟件包spa_sm_l稱為本地子網(wǎng)管理器,其管理運行在處理器節(jié)點上的軟件應(yīng)用,包括這些組件的發(fā)現(xiàn)、注冊和健康狀態(tài)監(jiān)控等。針對采用特定物理總線(如USB等)的設(shè)備,為使其能接入到整體系統(tǒng)網(wǎng)絡(luò),RSPA還需具有處理相應(yīng)子網(wǎng)到RSPA系統(tǒng)的通信協(xié)議轉(zhuǎn)換的能力。提供這一功能的軟件包稱為x子網(wǎng)管理器,例如USB子網(wǎng)管理器spa_sm_u負(fù)責(zé)管理USB子網(wǎng)上的組件,并處理USB數(shù)據(jù)消息與ROS消息的轉(zhuǎn)換。這種可添加子網(wǎng)管理器的模式使得RSPA成為真正可擴(kuò)展的系統(tǒng)。
圖3 RSPA的分層軟件結(jié)構(gòu)Fig.3 The layered software architecture of RSPA
RSPA的軟件實現(xiàn)中的大多數(shù)協(xié)議功能仍然遵循AIAA發(fā)布的SPA系列標(biāo)準(zhǔn)[16],限于篇幅本文不會講述完整的實現(xiàn)過程,只在接下來幾節(jié)闡釋結(jié)合了ROS特性的幾個主要策略。
根據(jù)SPA的思想,整體SPA網(wǎng)絡(luò)由至少一個SPA-x子網(wǎng)組成,每個子網(wǎng)對應(yīng)使用的物理層傳輸協(xié)議,例如 SPA-Local使用 UDP套接字,SPA-U使用 USB,SPA-1使用 I2C,SPA-S使用SpaceWire。要實現(xiàn)跨子網(wǎng)的通信,則需要位于不同子網(wǎng)中的組件采用同一套協(xié)議,即需要完成特定子網(wǎng)消息到SPA消息的轉(zhuǎn)換。
RSPA有兩種策略來實現(xiàn)這樣的轉(zhuǎn)換。第一種策略是為每種物理層協(xié)議實現(xiàn)一個子網(wǎng)管理器。SPA-x子網(wǎng)管理器(SM-x)負(fù)責(zé)完成x協(xié)議消息到標(biāo)準(zhǔn)的ROS消息的轉(zhuǎn)換,以使硬件設(shè)備的數(shù)據(jù)可以傳輸?shù)絉OS網(wǎng)絡(luò)中的任意節(jié)點。而在x子網(wǎng)內(nèi)部,SM-x與設(shè)備間仍使用x協(xié)議通信。如圖4所示,SM-x充當(dāng)了設(shè)備與RSPA之間的橋梁,而它們本身作為ROS的節(jié)點,處于SPALocal子網(wǎng)管理器即SM-L的管理下。
另一種策略是充分利用ROS分布式框架的特性,即把每個SPA設(shè)備封裝成一個獨立的ROS節(jié)點,這樣當(dāng)它們接入到RSPA網(wǎng)絡(luò)中時,可以直接使用標(biāo)準(zhǔn)的ROS消息通信。
圖4 RSPA的子網(wǎng)構(gòu)成Fig.4 RSPA subnet diagram
為了實現(xiàn)與物理傳輸無關(guān)的通信方法,SPA網(wǎng)絡(luò)模型采用的重要策略之一就是為每個組件分配一個邏輯地址。邏輯地址是在組件加入SPA網(wǎng)絡(luò)時由系統(tǒng)自動分配的,在SPA網(wǎng)絡(luò)中唯一標(biāo)識該組件的代號,是SPA邏輯消息傳輸?shù)脑春湍康摹PA模型的網(wǎng)絡(luò)層規(guī)定了使用一個4字節(jié)的編碼作為每個組件的邏輯地址,這需要一個稱為中央地址服務(wù)[12]的專門組件與子網(wǎng)管理器協(xié)同負(fù)責(zé)分配邏輯地址和保證不發(fā)生邏輯地址沖突。
RSPA中的邏輯地址方案不同于標(biāo)準(zhǔn)的SPA網(wǎng)絡(luò)模型,它將在ROS通信層的基礎(chǔ)上尋求解決方案。一個ROS系統(tǒng)本身就是由多個相互通信的節(jié)點(即SPA組件)組成的分布式網(wǎng)絡(luò)系統(tǒng),這些節(jié)點由一個叫計算圖源名稱(graph resource name)的字符串標(biāo)識。為了使節(jié)點的命名更好遵守唯一性的原則,ROS提供了一種稱為匿名名稱的機(jī)制,其通過在節(jié)點的基本名稱后面追加一段額外的文本,以確保節(jié)點名稱的唯一性。例如一個使用了匿名機(jī)制的程序,它的基本名稱為“anon”,則它在系統(tǒng)中啟動后的名稱類似于這樣:
/anon_1376942789079547655
RSPA直接采用這種具有唯一性的節(jié)點名作為組件的邏輯地址,而該計算圖源名稱完全由ROS系統(tǒng)管理,從而替代了SPA網(wǎng)絡(luò)層的大部分功能。
RSPA服務(wù)是利用ROS服務(wù)機(jī)制實現(xiàn)SPA網(wǎng)絡(luò)模型中的一類消息協(xié)議的方法。SPA中有這樣一類協(xié)議過程,它們通常由兩個組件相互發(fā)送一組配對的消息來完成。如圖5所示的本地發(fā)現(xiàn)協(xié)議,當(dāng)一個SPA-L組件接入系統(tǒng)后,它首先向SPA-Local子網(wǎng)管理器發(fā)送一個請求消息LocalHello,當(dāng)SPA-Local子網(wǎng)管理器返回一個響應(yīng)消息 LocalAck則表示發(fā)現(xiàn)過程完成。LocalHello和LocalAck就是一組配對的消息。這類協(xié)議的特點是發(fā)起請求消息的組件必須知道消息接收者的位置,而消息的接收者總是被動地回應(yīng),而不必關(guān)心請求者的身份,就好像是消息的接收者在為請求者提供“服務(wù)”。
ROS服務(wù)的概念恰好可以用于實現(xiàn)此類消息協(xié)議。服務(wù)調(diào)用(service calls)是ROS系統(tǒng)實現(xiàn)節(jié)點間一對一通信的一種方法。由客戶節(jié)點發(fā)起請求,服務(wù)節(jié)點接收到請求后采取一些行動,然后發(fā)送響應(yīng)給客戶節(jié)點。因此,圖5所示的發(fā)現(xiàn)協(xié)議在RSPA中的實現(xiàn)方式是:由SPALocal子網(wǎng)管理器節(jié)點(spa_sm_l)提供一個spa_sm_l/hello服務(wù),將原來的發(fā)現(xiàn)協(xié)議中LocalHello和LocalAck兩條消息分別封裝在spa_sm_l/hello服務(wù)的請求和響應(yīng)部分。類似的協(xié)議過程還有子網(wǎng)管理器通過請求組件節(jié)點的心跳服務(wù)來判斷組件是否處于活動狀態(tài);組件通過請求查找服務(wù)節(jié)點(spa_ls)的查詢服務(wù)來獲取滿足自身數(shù)據(jù)依賴關(guān)系的xTEDS文件;一個組件節(jié)點向另一個組件節(jié)點請求訂閱服務(wù)以建立訂閱關(guān)系……
圖5 Local發(fā)現(xiàn)協(xié)議Fig.5 Local discovery protocol
當(dāng)一個組件向另一個組件訂閱了滿足其依賴關(guān)系的數(shù)據(jù)后,它們之間將建立通信鏈路。SPA網(wǎng)絡(luò)模型中為了使數(shù)據(jù)消息準(zhǔn)確到達(dá)目的地,為每條消息封裝了一個包含目的組件邏輯地址的消息頭。圖6顯示的是具有邏輯地址(2,2)的組件向邏輯地址(3,3)上的組件發(fā)送消息的過程。消息先被發(fā)送到子網(wǎng)管理器,再由子網(wǎng)管理器的路由算法解析出路徑中下一個組件的物理地址,重復(fù)這樣的路由過程直到消息到達(dá)目的組件。為了完成此過程,子網(wǎng)管理器需要維護(hù)一個包含系統(tǒng)已知組件的物理地址與邏輯地址映射關(guān)系的路由表,同時承受大量的路由計算負(fù)擔(dān)。
圖6 通過SPA網(wǎng)絡(luò)路由消息Fig.6 Routing a message through the SPA network
RSPA改用 ROS的方法進(jìn)行消息路由。ROS消息傳遞的方法是采用話題機(jī)制,當(dāng)一個節(jié)點要分享信息時,它向?qū)?yīng)的話題發(fā)布消息;當(dāng)一個節(jié)點想要接收信息時,它就訂閱相應(yīng)的話題。消息的發(fā)布者和訂閱者相互解耦,完全無需知曉對方的存在。RSPA采用這樣的方式實現(xiàn)組件之間的消息傳遞,可以將路由的負(fù)擔(dān)完全交給ROS系統(tǒng),從而避免了繁雜的地址解析運算。
RSPA既有成熟的SPA網(wǎng)絡(luò)模型作為支撐,又充分利用ROS為分布式系統(tǒng)開發(fā)提供的基礎(chǔ)功能,為即插即用航天器的構(gòu)建提供了完整的軟件解決方案。為了展示RSPA如何實現(xiàn)即插即用航天器的基本功能,開發(fā)了一個簡化的演示系統(tǒng)。
演示系統(tǒng)的硬件組成如圖7所示。演示系統(tǒng)利用卡片式計算機(jī)樹莓派模擬航天器上的星載計算機(jī),其搭載了一個輕量的Linux操作系統(tǒng),并安裝了ROS基礎(chǔ)組件和RSPA核心組件;利用Arduino封裝每個模擬的硬件設(shè)備,包括完成硬件設(shè)備的驅(qū)動工作,通過USB線纜將設(shè)備連接到網(wǎng)絡(luò),提供設(shè)備到RSPA網(wǎng)絡(luò)的協(xié)議轉(zhuǎn)換,以及提供xTEDS文件的存儲功能;另外利用一臺桌面計算機(jī)用以運行監(jiān)視程序,它與星載計算機(jī)通過Wi-Fi連接,實時監(jiān)視系統(tǒng)的運行狀態(tài)。
圖7 演示系統(tǒng)的硬件組成Fig.7 Hardware components of the demo system
RSPA軟件結(jié)構(gòu)如圖8所示,其主要由運行在ROS框架下的若干應(yīng)用節(jié)點組成。整套軟件包括SPA核心組件、用于硬件設(shè)備的驅(qū)動程序、用于特定任務(wù)控制的程序、電源管理程序以及運行在上位機(jī)的監(jiān)視程序。圖中節(jié)點spa_sm_l表示SPA-Local子網(wǎng)管理器,節(jié)點spa_ls表示查找服務(wù),二者為演示系統(tǒng)提供了SPA核心功能。每個硬件組件對應(yīng)一個驅(qū)動節(jié)點,組件驅(qū)動工作完全由Arduino完成,并向系統(tǒng)提供ROS標(biāo)準(zhǔn)接口,使硬件組件成為了同其他軟件應(yīng)用無差別的節(jié)點。用于特定任務(wù)控制的程序和用于電源管理的程序可被視為普通的ROS節(jié)點,其完全適用ROS的通信方法,可以輕松實現(xiàn)和其他節(jié)點的交互。上位機(jī)監(jiān)視程序的開發(fā)還充分利用ROS作為分布式系統(tǒng)的特點,即通過配置上位機(jī)和星載計算機(jī)使用同一個節(jié)點管理器,使監(jiān)視程序和星載計算機(jī)上的各節(jié)點位于同一個ROS網(wǎng)絡(luò)下,簡化了操作過程。
圖8 演示系統(tǒng)的軟件結(jié)構(gòu)Fig.8 Software components of the demo system
SPA系統(tǒng)的運行流程在SPA網(wǎng)絡(luò)標(biāo)準(zhǔn)和邏輯接口標(biāo)準(zhǔn)中描述。在標(biāo)準(zhǔn)的基礎(chǔ)上,從單個組件的角度來講,RSPA演示系統(tǒng)運行流程包括:初始化過程、數(shù)據(jù)源查詢和訂閱關(guān)系建立。
初始化過程是組件發(fā)現(xiàn)和組件注冊的過程。如圖9所示,當(dāng)一個RSPA組件(硬件設(shè)備或軟件應(yīng)用)接入網(wǎng)絡(luò)時,它向本地子網(wǎng)管理器發(fā)送一個請求消息,以通告它的存在。一旦接收到新組件的請求,本地子網(wǎng)管理器將其加入已發(fā)現(xiàn)組件的列表,并回復(fù)一個應(yīng)答消息,完成發(fā)現(xiàn)過程。組件發(fā)現(xiàn)完成后,本地子網(wǎng)管理器通知查找服務(wù)有新組件存在,查找服務(wù)隨后請求、接收并存儲新組件的xTEDS文件,此為注冊過程。
圖9 系統(tǒng)運行流程Fig.9 System operation flow diagram
數(shù)據(jù)源查詢是RSPA中的一個重要機(jī)制。在RSPA中,每個組件都攜帶一份xTEDS文件,完全描述了組件可生成的數(shù)據(jù)、可提供的服務(wù)或可接收的命令等信息。當(dāng)一個消費者組件完成注冊后,它向查找服務(wù)發(fā)布一條描述自身數(shù)據(jù)需求的查詢(query)消息。一旦接收到查詢消息,查找服務(wù)檢索包含已有組件的xTEDS文件的存儲庫,找到匹配的生產(chǎn)者組件,并將它們的xTEDS及節(jié)點名等信息返回給請求者?;诓樵兿拗茥l件的不同,可能有多條匹配,查找服務(wù)將其全部返回,由請求者篩選最合適的數(shù)據(jù)源。
獲得生產(chǎn)者組件的信息后,消費者組件就可以向生產(chǎn)者組件發(fā)送訂閱請求,當(dāng)生產(chǎn)者組件回應(yīng)請求,則建立起兩個組件之間的訂閱關(guān)系。此后,除了訂閱關(guān)系的維護(hù)仍然依賴于SPA提供的方法,生產(chǎn)者和消費者之間完全依賴于ROS的通信機(jī)制形成穩(wěn)定的連接。當(dāng)所有具有數(shù)據(jù)依賴關(guān)系的組件建立起相應(yīng)的訂閱關(guān)系,航天器系統(tǒng)就可以正常運行。
文章提出基于ROS來解決SPA系統(tǒng)中的軟件構(gòu)建問題,既避免了從零開發(fā)一套SPA軟件系統(tǒng)的復(fù)雜過程,又可以獲益于ROS用以構(gòu)建多節(jié)點分布式系統(tǒng)的方法和工具,形成一套完整的空間即插即用軟件系統(tǒng)實施方案。所展示的演示系統(tǒng)曾在航天器可更換模塊原理樣機(jī)的研制中得到應(yīng)用,驗證了方案的可行性[17]。相比于SDM這一舊的SPA軟件實現(xiàn),新的方案具有如下優(yōu)勢:
1)依據(jù)成熟的SPA網(wǎng)絡(luò)模型,具有良好的分層結(jié)構(gòu),更易實現(xiàn)物理層的擴(kuò)展;
2)有效利用ROS通信層提供的功能,解決了SPA系統(tǒng)中網(wǎng)絡(luò)層大部分的復(fù)雜性;
3)有效利用ROS的編程接口和開發(fā)工具,簡化了軟件構(gòu)建工作,使開發(fā)人員可以專注于系統(tǒng)功能的實現(xiàn);
4)ROS在機(jī)器人、自動駕駛汽車這樣具有高可靠性要求的系統(tǒng)開發(fā)中得到廣泛驗證,而真正集成了SDM的即插即用航天器系統(tǒng)還為數(shù)不多,使得新方案更具探索價值。