宋樂
(航空工業直升機設計研究所無人機事業部,江西景德鎮,333001)
無人直升機研制最早始于上世紀50年代初。我國則在“七五”期間就開始重視無人直升機的設計和研制工作[1]。歷經30多年的發展,無人直升機已經被廣泛應用于無線電偵測、地質地貌測繪、航空影拍、電力施工、森林防火、應急救災、通信中繼、反恐偵查等諸多領域[2]。近年來,無人直升機的傷亡風險低、機動性好、起降條件少、使用方便等優勢在民用市場需求中逐步顯現出來。我國民用無人機已經進入了快速發展時期。越來越多的無人直升機系統研制已經由“以平臺為中心”向“以任務為中心”的思想轉變[3]。如何提高無人直升機的多任務能力,如何降低無人直升機改裝的成本。這對無人機工業設計提出了更高的要求。
本文使用模塊化設計思想研發無人直升機地面監控軟件,為降低無人直升機多任務改裝帶來的風險提供幫助。
軟件模塊化旨在建立可重用的軟件構件[4]。在不需要修改或少量修改的情況下,可再次組建成新的軟件。進而降低軟件的開發成本、提高軟件的可靠性和可維護性。軟件模塊的良好設計體現在以下幾個方面。
(1)要求軟件模塊具有較好彈性的同時不增加解決問題的復雜程度。
(2)要求軟件模塊具有較好的可移植性。
(3)要求軟件模塊具有更清晰的接口定義。
(4)要求軟件模塊具有更好的穩定性。
(5)要求軟件模塊具有更好的獨立性。避免模塊間的過度依賴。
無人直升機地面監控軟件實現地面人員對無人直升機的遠程控制和監視功能。通過數據通信系統將獲取的無人機下行遙測數據幀進行解析、分析和圖形化顯示。同時將控制指令編碼成上行遙控數據幀發送到無人機飛控系統中。
具有不同任務載荷的無人直升機在監控數據和通信協議方面有所不同。根據模塊化設計原則將地面監控軟件的基本功能進行底層抽象和數據分離。同時對用戶界面的圖形化顯示功能進行組件封裝。圖1說明地面監控軟件的模塊化設計結構。

圖1 地面監控軟件模塊化設計結構圖
長期實踐表明,良好的軟件彈性來自于更多高層次的抽象。地面監控軟件最為核心和固化的功能就是根據不同的協議對各種數據幀進行解析、組裝、分析和圖形化顯示。因此,將這些功能分成協議解析模塊、數據算法模塊、通信模塊和用戶界面組件模塊四大底層功能模塊。通過面向對象的設計方式各自形成四大互相獨立的類庫。這些類庫的設計具有以下的特點。
(1)采用單一職責[5]的類設計原則。不同職責的類相互獨立,沒有繼承或接口關系。
(2)相同職責的類實現同一接口、繼承同一父類。可以根據不同需要擴展新類增加軟件彈性。
下面以協議解析模塊為例。該模塊以AbstractSignal為基類抽象出十六進制字節數組與實際值的換算邏輯。而不同的換算邏輯實現在具體的子類中。比如AnalogSignal實現字節數組與數值的換算;TextSignal實現字節數組與文本的換算;DiscreteSignal實現字節數組與離散位狀態的換算等。Protocol類包含一組信號,實現幀數據的匹配、解析、過濾和校驗功能。圖2展現協議解析模塊的UML類圖。

圖2 協議解析模塊UML類圖
地面監控軟件處理數據需要依據不同的幀數據協議。將協議數據與功能進行分離。可以使各底層模塊具有更好的獨立性,避免模塊間的過度依賴。同時將分離的協議數據結構化和持久化存儲。有助于提高軟件的可配置性。降低因協議變化而造成軟件更改的風險。
協議數據結構化和持久化存儲可以采用各種形式。比如XML結構文件、JSON結構文件、關系型數據庫等。圖3展現某協議的XML結構。

圖3 協議XML結構
地面監控軟件最終目的是將解析和分析后的數據通過圖形用戶界面展現給用戶。不同項目軟件變化最大的部分就是圖形用戶界面(GUI)。將界面組件化能更好的降低UI設計中大量的重復性工作。
針對無人直升機的使用特點和習慣。我們抽象出了狀態燈、儀表盤、水平儀、刻度尺、游標尺、能量柱、雷達圖和開關按鈕等UI組件。這些組件具備以下三個特點。
(1)每個組件都是獨立的模塊,在修改時不會影響其他的組件。
(2)每個組件都是完整的功能閉環。具有獨立的尺寸、顏色和狀態設置邏輯。
(3)每個組件都可以通過布局與其他組件自由組合成更大的組件或界面。
下面介紹幾個使用QT開發的QWidget組件,如圖4所示。

圖4 組件可視化界面
水平儀用于顯示無人直升機的俯仰角、滾轉角和航向角等姿態信息。使用setDegValue(int)、setRollValue(int)等方法實現背景圖、刻度線和方向指示器的旋轉。
游標尺用于顯示無人直升機的速度和高度信息。使用setCursorValue(int)等方法實現游標刻度的上下移動,并在即將超出刻度范圍時刷新刻度軸。
儀表盤可以用于顯示各種發動機轉速、旋翼轉速等信息。能量組可以用于顯示各種燃油量、滑油溫度等信息。雷達圖可以顯示無人直升機起飛降落時的定位信息。狀態燈可以顯示無人機直升機的各種告警信息。
在某無線電監測項目中。無人直升機下行遙測數據包含BCD格式的時間量需要解析顯示。針對需求變化,在地面監控軟件的協議解析模塊中增加了繼承AbstractSignal 的BCDTimeSignal類。通過getRealValue()方法直接可以獲取解析后的時間數據顯示在用戶界面中。此次變更只需要完成BCDTimeSignal的單元測試和時間數據顯示的配置項測試即可。
在某海事項目中。需要控制無人直升機上的部分任務設備。針對需求變化,需要在上行控制指令增加新的內容。為此,地面監控軟件通過修改上行控制幀協議的格式。在沒有更新任何代碼的情況下實現了需求。此次變更只需要完成針對指令發送功能的配置項測試即可。
經過長期的項目實踐證實了模塊化設計的地面監控軟件有效的降低了研發成本。為降低無人直升機平臺改裝需求帶來的風險提供了幫助。
本文詳細介紹了無人直升機地面監控軟件的模塊化設計與實現。并通過應用實例說明經過模塊化設計的地面監控軟件具有更高的開發效率、更好的可配置能力和更低的研發成本。通過模塊組裝和參數配置,地面監控軟件可以適應更多具有不同任務載荷的無人直升機平臺。