宋樂
(航空工業(yè)直升機設(shè)計研究所無人機事業(yè)部,江西景德鎮(zhèn),333001)
無人直升機研制最早始于上世紀50年代初。我國則在“七五”期間就開始重視無人直升機的設(shè)計和研制工作[1]。歷經(jīng)30多年的發(fā)展,無人直升機已經(jīng)被廣泛應(yīng)用于無線電偵測、地質(zhì)地貌測繪、航空影拍、電力施工、森林防火、應(yīng)急救災(zāi)、通信中繼、反恐偵查等諸多領(lǐng)域[2]。近年來,無人直升機的傷亡風險低、機動性好、起降條件少、使用方便等優(yōu)勢在民用市場需求中逐步顯現(xiàn)出來。我國民用無人機已經(jīng)進入了快速發(fā)展時期。越來越多的無人直升機系統(tǒng)研制已經(jīng)由“以平臺為中心”向“以任務(wù)為中心”的思想轉(zhuǎn)變[3]。如何提高無人直升機的多任務(wù)能力,如何降低無人直升機改裝的成本。這對無人機工業(yè)設(shè)計提出了更高的要求。
本文使用模塊化設(shè)計思想研發(fā)無人直升機地面監(jiān)控軟件,為降低無人直升機多任務(wù)改裝帶來的風險提供幫助。
軟件模塊化旨在建立可重用的軟件構(gòu)件[4]。在不需要修改或少量修改的情況下,可再次組建成新的軟件。進而降低軟件的開發(fā)成本、提高軟件的可靠性和可維護性。軟件模塊的良好設(shè)計體現(xiàn)在以下幾個方面。
(1)要求軟件模塊具有較好彈性的同時不增加解決問題的復(fù)雜程度。
(2)要求軟件模塊具有較好的可移植性。
(3)要求軟件模塊具有更清晰的接口定義。
(4)要求軟件模塊具有更好的穩(wěn)定性。
(5)要求軟件模塊具有更好的獨立性。避免模塊間的過度依賴。
無人直升機地面監(jiān)控軟件實現(xiàn)地面人員對無人直升機的遠程控制和監(jiān)視功能。通過數(shù)據(jù)通信系統(tǒng)將獲取的無人機下行遙測數(shù)據(jù)幀進行解析、分析和圖形化顯示。同時將控制指令編碼成上行遙控數(shù)據(jù)幀發(fā)送到無人機飛控系統(tǒng)中。
具有不同任務(wù)載荷的無人直升機在監(jiān)控數(shù)據(jù)和通信協(xié)議方面有所不同。根據(jù)模塊化設(shè)計原則將地面監(jiān)控軟件的基本功能進行底層抽象和數(shù)據(jù)分離。同時對用戶界面的圖形化顯示功能進行組件封裝。圖1說明地面監(jiān)控軟件的模塊化設(shè)計結(jié)構(gòu)。
圖1 地面監(jiān)控軟件模塊化設(shè)計結(jié)構(gòu)圖
長期實踐表明,良好的軟件彈性來自于更多高層次的抽象。地面監(jiān)控軟件最為核心和固化的功能就是根據(jù)不同的協(xié)議對各種數(shù)據(jù)幀進行解析、組裝、分析和圖形化顯示。因此,將這些功能分成協(xié)議解析模塊、數(shù)據(jù)算法模塊、通信模塊和用戶界面組件模塊四大底層功能模塊。通過面向?qū)ο蟮脑O(shè)計方式各自形成四大互相獨立的類庫。這些類庫的設(shè)計具有以下的特點。
(1)采用單一職責[5]的類設(shè)計原則。不同職責的類相互獨立,沒有繼承或接口關(guān)系。
(2)相同職責的類實現(xiàn)同一接口、繼承同一父類。可以根據(jù)不同需要擴展新類增加軟件彈性。
下面以協(xié)議解析模塊為例。該模塊以AbstractSignal為基類抽象出十六進制字節(jié)數(shù)組與實際值的換算邏輯。而不同的換算邏輯實現(xiàn)在具體的子類中。比如AnalogSignal實現(xiàn)字節(jié)數(shù)組與數(shù)值的換算;TextSignal實現(xiàn)字節(jié)數(shù)組與文本的換算;DiscreteSignal實現(xiàn)字節(jié)數(shù)組與離散位狀態(tài)的換算等。Protocol類包含一組信號,實現(xiàn)幀數(shù)據(jù)的匹配、解析、過濾和校驗功能。圖2展現(xiàn)協(xié)議解析模塊的UML類圖。
圖2 協(xié)議解析模塊UML類圖
地面監(jiān)控軟件處理數(shù)據(jù)需要依據(jù)不同的幀數(shù)據(jù)協(xié)議。將協(xié)議數(shù)據(jù)與功能進行分離??梢允垢鞯讓幽K具有更好的獨立性,避免模塊間的過度依賴。同時將分離的協(xié)議數(shù)據(jù)結(jié)構(gòu)化和持久化存儲。有助于提高軟件的可配置性。降低因協(xié)議變化而造成軟件更改的風險。
協(xié)議數(shù)據(jù)結(jié)構(gòu)化和持久化存儲可以采用各種形式。比如XML結(jié)構(gòu)文件、JSON結(jié)構(gòu)文件、關(guān)系型數(shù)據(jù)庫等。圖3展現(xiàn)某協(xié)議的XML結(jié)構(gòu)。
圖3 協(xié)議XML結(jié)構(gòu)
地面監(jiān)控軟件最終目的是將解析和分析后的數(shù)據(jù)通過圖形用戶界面展現(xiàn)給用戶。不同項目軟件變化最大的部分就是圖形用戶界面(GUI)。將界面組件化能更好的降低UI設(shè)計中大量的重復(fù)性工作。
針對無人直升機的使用特點和習慣。我們抽象出了狀態(tài)燈、儀表盤、水平儀、刻度尺、游標尺、能量柱、雷達圖和開關(guān)按鈕等UI組件。這些組件具備以下三個特點。
(1)每個組件都是獨立的模塊,在修改時不會影響其他的組件。
(2)每個組件都是完整的功能閉環(huán)。具有獨立的尺寸、顏色和狀態(tài)設(shè)置邏輯。
(3)每個組件都可以通過布局與其他組件自由組合成更大的組件或界面。
下面介紹幾個使用QT開發(fā)的QWidget組件,如圖4所示。
圖4 組件可視化界面
水平儀用于顯示無人直升機的俯仰角、滾轉(zhuǎn)角和航向角等姿態(tài)信息。使用setDegValue(int)、setRollValue(int)等方法實現(xiàn)背景圖、刻度線和方向指示器的旋轉(zhuǎn)。
游標尺用于顯示無人直升機的速度和高度信息。使用setCursorValue(int)等方法實現(xiàn)游標刻度的上下移動,并在即將超出刻度范圍時刷新刻度軸。
儀表盤可以用于顯示各種發(fā)動機轉(zhuǎn)速、旋翼轉(zhuǎn)速等信息。能量組可以用于顯示各種燃油量、滑油溫度等信息。雷達圖可以顯示無人直升機起飛降落時的定位信息。狀態(tài)燈可以顯示無人機直升機的各種告警信息。
在某無線電監(jiān)測項目中。無人直升機下行遙測數(shù)據(jù)包含BCD格式的時間量需要解析顯示。針對需求變化,在地面監(jiān)控軟件的協(xié)議解析模塊中增加了繼承AbstractSignal 的BCDTimeSignal類。通過getRealValue()方法直接可以獲取解析后的時間數(shù)據(jù)顯示在用戶界面中。此次變更只需要完成BCDTimeSignal的單元測試和時間數(shù)據(jù)顯示的配置項測試即可。
在某海事項目中。需要控制無人直升機上的部分任務(wù)設(shè)備。針對需求變化,需要在上行控制指令增加新的內(nèi)容。為此,地面監(jiān)控軟件通過修改上行控制幀協(xié)議的格式。在沒有更新任何代碼的情況下實現(xiàn)了需求。此次變更只需要完成針對指令發(fā)送功能的配置項測試即可。
經(jīng)過長期的項目實踐證實了模塊化設(shè)計的地面監(jiān)控軟件有效的降低了研發(fā)成本。為降低無人直升機平臺改裝需求帶來的風險提供了幫助。
本文詳細介紹了無人直升機地面監(jiān)控軟件的模塊化設(shè)計與實現(xiàn)。并通過應(yīng)用實例說明經(jīng)過模塊化設(shè)計的地面監(jiān)控軟件具有更高的開發(fā)效率、更好的可配置能力和更低的研發(fā)成本。通過模塊組裝和參數(shù)配置,地面監(jiān)控軟件可以適應(yīng)更多具有不同任務(wù)載荷的無人直升機平臺。