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