關(guān) 寧,雙小川,彭 娜,胡 浩,田文波
(1.上海航天電子技術(shù)研究所,上海 201109;2.上海航天智能計算技術(shù)重點實驗室,上海 201109)
在軌任務(wù)規(guī)劃是未來航天器智能化的發(fā)展方向。實現(xiàn)在軌任務(wù)規(guī)劃是一項涉及多個領(lǐng)域知識的復(fù)雜軟件工程問題,需要將恒星、行星、矮行星、小行星、航天器自身,以及其他天體的星歷、航天器姿態(tài)和各部分相對位置關(guān)系、各種儀器的工作特征和指向、地面目標、地形、地貌及其他輔助信息、各類規(guī)劃、優(yōu)化算法集成在統(tǒng)一的軟件系統(tǒng)中。從地面上開發(fā)同等規(guī)模的跨領(lǐng)域信息系統(tǒng)的經(jīng)驗來看,采用先進的開發(fā)方法,即使用動態(tài)語言集成和使用開源庫是實現(xiàn)靈活、多樣在軌任務(wù)規(guī)劃的必由之路。
顧名思義,開源庫是可以在公開途徑獲得源代碼的軟件函數(shù)庫,一般由開發(fā)者社區(qū)進行設(shè)計、開發(fā)和維護,其用戶既包括相關(guān)領(lǐng)域的研究和開發(fā)人員廣泛使用的開源應(yīng)用軟件,也包括閉源商用軟件。開源庫一般由最熟悉該領(lǐng)域的開發(fā)人員完成,并通過社區(qū)得到大量應(yīng)用反饋和測試,因此在完成特定領(lǐng)域功能時,成熟的開源庫質(zhì)量往往比同類閉源商用軟件高。但使用開源庫往往需要具備較強的軟件開發(fā)能力,同時要有較為完善的運行平臺。
在桌面環(huán)境下工作的進行任務(wù)規(guī)劃算法設(shè)計的開發(fā)者,往往首先使用Matlab、Python 這樣的動態(tài)語言進行流程開發(fā)。只要各種運行平臺上都提供了核心算法庫(中間件),則使用動態(tài)語言開發(fā)的在軌任務(wù)規(guī)劃算法可以無視底層運行平臺的差異,在桌面環(huán)境和嵌入式環(huán)境中無縫移植。作為星載計算機系統(tǒng)的研制者,首先需要將核心算法庫凝練成中間件,提供給算法開發(fā)者。
目前,星載計算機的高性能抗輻射處理器性能已經(jīng)達到了200 MHz 以上,如果使用經(jīng)過地面篩選的工業(yè)級處理器,可以進一步將主頻提升到1 GHz。以這樣的處理性能,結(jié)合較大容量的內(nèi)存(32 MB及以上)和外存(1 GB 以上),已經(jīng)可以運行提供POSIX 接口和完整文件系統(tǒng)的大型嵌入式操作系統(tǒng),許多開源庫都可以不經(jīng)修改或僅修改接口代碼就在星載計算機上運行。
本文基于在軌任務(wù)規(guī)劃的開發(fā)需求,提出了使用動態(tài)語言和大型嵌入式操作系統(tǒng)進行在軌任務(wù)規(guī)劃的開發(fā)方法,調(diào)研并移植了適用于在軌任務(wù)規(guī)劃的開源庫,形成了可復(fù)用的中間件,對典型功能進行了測試。
目前,對任務(wù)規(guī)劃的研究大多以地面離線規(guī)劃為主。比如針對對地觀測衛(wèi)星,可在地面采用較為復(fù)雜的智能算法對多個對地觀測目標、多個衛(wèi)星和地面站資源進行聯(lián)合調(diào)度[1-5];也可針對深空探測任務(wù)[6-7],用于在軌服務(wù)或攔截的交會對接任務(wù)[8],或中繼衛(wèi)星的通信調(diào)度[9]。在軌運行的自主任務(wù)規(guī)劃[10]剛剛起步,主要應(yīng)用于觀測目標由本星其他載荷產(chǎn)生或由其他衛(wèi)星產(chǎn)生的場景[11],或受到外部條件影響對地面規(guī)劃的任務(wù)進行局部修正[12-13]。
從體系化應(yīng)用看,衛(wèi)星的自主任務(wù)規(guī)劃是資源管理(Resource Management)的一部分,是一個與數(shù)據(jù)融合(Data Fusion)對偶的概念。數(shù)據(jù)融合模型最早由美國Joint Directors of Laboratories(JDL)、Data Fusion Group 在1985 年提出,并經(jīng)過了幾次修正,公開報道的最新一版(2004 年)如圖1 所示。
圖1 數(shù)據(jù)融合的JDL 模型(2004 版)[14]Fig.1 JDL model of data fusion(2004 edition)[14]
數(shù)據(jù)融合模型較好地解決了多種傳感器和情報來源如何服務(wù)于指揮控制的總目標,但在對傳感器的資源管理未能細化。相關(guān)從業(yè)人員在實踐中發(fā)現(xiàn),資源管理與數(shù)據(jù)融合具有很強的對偶性,其主要功能的對應(yīng)關(guān)系見表1。
表1 數(shù)據(jù)融合與資源管理的分級與對應(yīng)關(guān)系[14]Tab.1 Hierarchy and correspondence of data fusion and resource management[14]
在衛(wèi)星領(lǐng)域,由于天地交互帶寬窄、延時大,星上處理能力有限,只有較低層級的數(shù)據(jù)融合任務(wù)在星上運行。而資源管理任務(wù)對處理能力的需求較低,因此,已經(jīng)較多地出現(xiàn)在星上,其典型場景舉例如下:
1)0 級資源管理。相控陣天線或合成孔徑雷達(Synthetic Aperture Radar,SAR)波位角的計算,給定波束指向,需要計算相控陣每個單元的相位延時參數(shù),各個波位疊加實現(xiàn)指定方向的指向。
2)1 級資源管理。給定待成像目標坐標,計算SAR 雷達正側(cè)視的開機、關(guān)機時間,或者控制光學載荷轉(zhuǎn)向成像目標。
3)2 級資源管理。在衛(wèi)星組網(wǎng)應(yīng)用中,同時控制多個天線維持星間或星地鏈路。
4)3 級資源管理?;谀繕撕瘮?shù)和多種約束條件,綜合選擇和規(guī)劃多個對地觀測任務(wù)。
在這些應(yīng)用場景中,0 級資源管理往往涉及特定載荷的特性,所能用到的開源庫主要是基礎(chǔ)數(shù)學庫,一般由特定平臺提供,本文暫不涉及,感興趣的讀者可以閱讀文獻[15]或其他相關(guān)著作。1、2、3 級的資源管理涉及的開源庫包括航天器的任務(wù)規(guī)劃庫,用于地理信息系統(tǒng)的空間數(shù)據(jù)庫,進行地圖投影和坐標轉(zhuǎn)換的庫,計算點、線、面幾何拓撲關(guān)系的庫,以及優(yōu)化目標函數(shù)的線性規(guī)劃庫。以下內(nèi)容將對這幾類庫做出詳細介紹。
傳統(tǒng)星上軟件以數(shù)管軟件和姿控軟件為代表,兩者都需要與星上環(huán)境相同的目標機和模擬星上連接關(guān)系的地測設(shè)備才能開發(fā)。而自主任務(wù)規(guī)劃軟件涉及更多的算法和業(yè)務(wù)流程,更適合在有操作系統(tǒng)的高性能星載計算機上運行,對應(yīng)的開發(fā)模式也可以發(fā)生變化,這種新型開發(fā)模式如圖2 所示。
圖2 基于動態(tài)語言和嵌入式操作系統(tǒng)的新型開發(fā)模式Fig.2 New development models based on dynamic languages and embedded operating systems
變化可大致分為3 步:
1)這類需要調(diào)用較多算法庫的軟件可以用如Python 或Matlab 之類的動態(tài)語言進行開發(fā),系統(tǒng)設(shè)計和開發(fā)者可以利用高級語言中豐富的數(shù)據(jù)結(jié)構(gòu),調(diào)用各種算法庫,完成業(yè)務(wù)邏輯的梳理與初步實現(xiàn),并搭建與高級語言實現(xiàn)對應(yīng)的仿真測試系統(tǒng)。軟件和測試系統(tǒng)可以運行在PC 機和任意操作系統(tǒng)上,Windows、Linux 均可。
2)開發(fā)者可以將高級語言實現(xiàn)轉(zhuǎn)換到C/C++語言實現(xiàn),或采用嵌入式動態(tài)語言(如Lua)進行流程調(diào)度和數(shù)據(jù)管理,并在性能關(guān)鍵的數(shù)據(jù)處理功能上用C 實現(xiàn)。如果應(yīng)用需要多線程、文件系統(tǒng)、驅(qū)動程序或通信協(xié)議棧的支持,應(yīng)使用Linux 操作系統(tǒng)和POSIX API 進行開發(fā),這時應(yīng)用仍運行在PC 機上,但已經(jīng)可以遷移到高性能嵌入式平臺上。
3)將用C/C++或嵌入式動態(tài)語言實現(xiàn)的應(yīng)用程序移植到目標機上,如果目標機上的操作系統(tǒng)也提供業(yè)務(wù)程序用到的算法庫,這時只需要解決目標機和PC 機、目標機和其他設(shè)備的接口方面的差異,并處理一些只有在目標機上才能發(fā)生的異常情況即可。應(yīng)用程序的實現(xiàn)邏輯已經(jīng)經(jīng)過高級語言和嵌入式語言兩級實現(xiàn)的梳理,并經(jīng)過與仿真測試系統(tǒng)的對接,基本不用在目標機上調(diào)試業(yè)務(wù)邏輯。
風云翼輝操作系統(tǒng)(AIC-OS)是由上海航天電子技術(shù)研究所基于SylixOS 開發(fā)的大型嵌入式實時操作系統(tǒng)(如圖3 所示),具有全自主、強實時、高可靠、高性能等特點,主要面向宇航領(lǐng)域的應(yīng)用需求,重點支持各種高性能星載計算機和信息處理平臺。AIC-OS 對于POSIX 操作系統(tǒng)接口的支持非常完善,因此,移植各類開源軟件非常方便,可以大幅降低人力成本和開發(fā)成本,縮短軟件和最終產(chǎn)品的研制周期。
圖3 AIC-OS 的主要組成部分Fig.3 Main components of AIC-OS
雖然目前高性能星載計算機的運算能力和存貯資源已經(jīng)逐漸接近地面計算機系統(tǒng),但在選擇動態(tài)語言引擎時我們?nèi)詢A向于選擇面向嵌入式環(huán)境設(shè)計的動態(tài)語言。目前,從語言特性、資源開銷、生態(tài)環(huán)境等角度看,Lua 仍然是面向嵌入式動態(tài)語言引擎的首選,其他選項如Python、JavaScript 或其他小眾語言都有或多或少的不足。Lua 由標準C 編寫而成,幾乎在所有操作系統(tǒng)和平臺上都可以編譯和運行。Lua 有意避免提供龐大的運行時庫,這樣應(yīng)用程序可以用C/C++針對特定場景提供算法支持。完全功能的Lua 引擎編譯后只有200 KiB,非常適合在嵌入式環(huán)境中使用。
除了人工編碼之外,動態(tài)語言和C/C++算法庫之間的接口代碼可以由簡化的封裝和接口生成程 序(Simplified Wrapper and Interface Generator,SWIG)自動生成。SWIG 可以自動掃描C/C++頭文件中結(jié)構(gòu)體、函數(shù)、類的聲明,并面向動態(tài)語言如Python、Lua 等生成接口代碼。當需要面向多種語言生成接口代碼時,開發(fā)者只需要向SWIG 提供一份接口描述文件即可。
綜上所述,在支持以在軌任務(wù)規(guī)劃為代表的智能航天器軟件時,需要使用更加復(fù)雜的基礎(chǔ)軟件支持算法和業(yè)務(wù)流程的開發(fā),并且可以支持同一套應(yīng)用軟件在不同開發(fā)平臺上運行,避免了針對嵌入式平臺重新開發(fā)應(yīng)用軟件或大規(guī)模調(diào)整接口。這一開發(fā)方式已經(jīng)在微納衛(wèi)星和新型航天企業(yè)的實踐中得到驗證,如Linux 在航天軟件中的使用[16],并用于智能算法的開發(fā)[17]。
NASA SPICE 是美國國家航空航天局(NASA)噴氣推進實驗室(Jet Propulsion Laboratory,JPL)下屬導航與附屬信息研究室(Navigation and Ancillary Information Facility,NAIF)提供的程序集[18],主要用于處理NASA 提供的星歷文件、各種深空探測器的位置、速度、姿態(tài),以及科學儀器的安裝位置等信息,其名稱是Spacecraft、Planet、Instrument、Cameramatrix 和Events 的首字母縮寫。NASA SPICE面向的是規(guī)劃深空探測器科學實驗任務(wù)和載荷數(shù)據(jù)處理的科學工作者,但其中提供了較為完善的軌道、姿態(tài)以及儀器和成像目標相對位置關(guān)系的處理功能,也可用于人造地球衛(wèi)星的任務(wù)規(guī)劃,如圖4 所示。SPICE 軟件原最早用Fortran 77 寫成,后來用f2c 軟件轉(zhuǎn)成了C 版本,NASA NAIF 用CSPICE 的名稱維護C 版本,并提供Matlab 版本。隨著Python 的流行,SPICE 軟件也提供Python 綁定Spiceypy。
圖4 SPICE 任務(wù)規(guī)劃庫的主要功能Fig.4 Main functions of the SPICE task planning library
空間數(shù)據(jù)庫(Spatial Database)是用于存儲、處理和分析幾何圖形和圖形圖像的數(shù)據(jù)庫系統(tǒng)。在地面應(yīng)用中,空間數(shù)據(jù)庫主要用于處理遙感數(shù)據(jù)和地圖數(shù)據(jù)。在任務(wù)規(guī)劃應(yīng)用中,運行在星載計算機上的空間數(shù)據(jù)可以儲存目標信息、數(shù)字地面模型(Digital Terrain Model,DTM)以及遙感數(shù)據(jù)[19-20]。
使用空間數(shù)據(jù)庫儲存的信息主要是為了后續(xù)多次查找和再利用??臻g數(shù)據(jù)庫針對二維(x,y)或三維(x,y,z)位置信息提供了R-Tree 索引功能,如圖5 所示。對于位置信息,R-Tree 索引將位置信息檢索的計算復(fù)雜度從O(N)降低到O(logN)。當任務(wù)規(guī)劃應(yīng)用需要從大量待觀測目標或DTM 數(shù)據(jù)中查找滿足一定幾何關(guān)系的點時,帶有R-Tree 索引的空間數(shù)據(jù)庫可以更快地提供備選項。之后可以再使用SPICE 或其他任務(wù)規(guī)劃庫計算具體成像時間點。
圖5 用于空間信息檢索的R-Tree 索引算法[21]Fig.5 R-Tree index algorithm for spatial information retrieval[21]
眾所周知,地球是一個兩極稍扁、赤道略鼓的橢球,大地坐標系(經(jīng)緯度)依照地球橢球模型定義。而世界各國在進行本國的大地測量時,所使用的橢球模型各不相同,使用錯誤的橢球模型會造成測量數(shù)據(jù)和實際位置產(chǎn)生誤差。在計算測地線Geodetic問題,即計算地球上兩點之間的距離時,也需要考慮用橢球模型和托球面上的距離公式來計算[22]。
目前,公認用于計算地圖投影的開源軟件是PROJ,該軟件早在1983 年就開始開發(fā),使用如圖6所示投影,到20 世紀90 年代,第4 版軟件PROJ.4 就已經(jīng)相當成熟,得到了廣泛的使用。目前,該軟件開始用C++等現(xiàn)代軟件開發(fā)方法升級,目前的最新版本是7.1.1。因此,如果需要使用成熟版本,或者嵌入式環(huán)境的編譯器對C++的支持比較差,可以使用純C 的PROJ.4。反之,如果操作系統(tǒng)和C++語言支持較好,也可以使用最新版本。
圖6 UTM(通用墨卡托投影)地圖[23]Fig.6 UTM(universal Mercato projection)map[23]
geos 都是處理幾何圖形拓撲關(guān)系的開源庫,實現(xiàn)的是ISO/IEC 13249-3 SQL/MM 中規(guī)定的各種幾何關(guān)系。該標準中定義了幾何圖形與幾何圖形的空間操作:
空間操作:相等(ST_Equals)、斷開(ST_Disjoint)、接觸(ST_Touches)、包含(ST_Within)等。
幾何圖形:點(ST_Point)、線(ST_Curve)、面(ST_Surfice)和集合類型(ST_GeomCollection)等,如圖7 所示。
圖7 空間數(shù)據(jù)中規(guī)定的幾何圖形Fig.7 Geometry specified in spatial data
GNU 線性規(guī)劃庫(GNU Linear Programming Kit,GLPK)是一款成熟的開源庫,支持線性規(guī)劃、混合整數(shù)規(guī)劃以及其他相關(guān)問題的建模和求解。在求解方法上,GLPK 支持單純形法(Simplex Method)、內(nèi)點法(Interior-point Method)和分支定界法(Branch-and-cut Method)。在編程語言上,GLPK 使用C 語言編寫,提供了可以嵌入其他程序的編程接口。GLPK 還支持面向規(guī)劃問題的建模語言MathProg,可以直接以聲明的形式描述線性規(guī)劃問題,在需要改變策略時降低了在軌編程的開銷。
本文選取了4 種典型星載計算機或者數(shù)據(jù)處理器測試開源庫的運行,其中,BM3823 和FT6672V都是200 MHz 主頻的抗輻射處理器,而P1022 和C6678 都是1 GHz 主頻的高性能工業(yè)級處理器,具體參數(shù)見表2。
表2 移植開源庫的平臺Tab.2 Platform for porting open source libraries
作為一種嵌入式軟件,自主任務(wù)規(guī)劃軟件一般是獨立軟件產(chǎn)品,所有代碼都屬于單個應(yīng)用程序,因此,本文作者以靜態(tài)鏈接庫的形式對幾種自主任務(wù)規(guī)劃軟件中可能用到的開源庫進行了編譯,并將編譯結(jié)果(目標文件)打包成靜態(tài)鏈接庫。AIC-OS對動態(tài)鏈接庫的支持也很完善,當有多個應(yīng)用都需要這些庫時,也可以按照動態(tài)鏈接庫的形式編譯,并由操作系統(tǒng)統(tǒng)一管理。
目 前,AIC-OS 使用基于Eclipse 開發(fā)環(huán)境,并基于工程文件生成Android 風格的Makefile 完成應(yīng)用程序編譯。而開源庫一般使用GNU autotools 進行編譯,目前尚不支持AIC-OS。因此本文選用了使用python 腳本生成Makefile 的方案,其主要流程包括:1)基于命令行輸入工具鏈參數(shù)設(shè)置編譯選項;2)調(diào)用gcc 生成依賴關(guān)系;3)使用Jinja2 模板生成Makefile;4)調(diào) 用make 編譯庫。
完成交叉編譯后,將生成目標平臺的靜態(tài)庫加入AIC-OS 的APP 工程,編寫測試程序?qū)斓墓δ苓M行測試。移植和測試結(jié)果見表3。
表3 移植和測試結(jié)果Tab.3 Results of porting and testing
在表3 中,Sqlite 為微型嵌入式數(shù)據(jù)庫,Spatialite 就是在Sqlite 基礎(chǔ)上開發(fā)的,Proj 在存儲不同坐標系的信息時也使用Sqlite,因此獨立計算。
在高性能星載計算機和大型嵌入式操作系統(tǒng)的基礎(chǔ)上,先進的在軌任務(wù)規(guī)劃軟件已經(jīng)可以使用動態(tài)語言和開源庫進行系統(tǒng)設(shè)計和迭代實現(xiàn)。這種開發(fā)方法是快速實現(xiàn)在軌任務(wù)規(guī)劃和航天器智能化的必由之路。本文調(diào)研并移植的任務(wù)規(guī)劃庫、空間數(shù)據(jù)庫等中間件,已經(jīng)可以在星載計算機上運行,可支持后續(xù)在軌任務(wù)規(guī)劃系統(tǒng)的設(shè)計與實現(xiàn)。希望本文的工作能給從業(yè)者帶來啟發(fā),也歡迎與本文作者洽談合作。