賈 杰,劉智騰
(南昌航空大學(xué)信息工程學(xué)院,江西 南昌 330063)
無人機地面站(Ground Control Station,GCS),即無人機地面控制系統(tǒng),是無人機系統(tǒng)的重要組成部分。地面站的主要功能是實時監(jiān)控飛行器的飛行過程、飛行軌跡、有效載荷、通訊鏈路以及飛行器的發(fā)射和回收,同時也要求能夠靈活地克服各種未知的自然與人為因素的不利影響,適應(yīng)各種復(fù)雜的環(huán)境,保證全系統(tǒng)整體功能的實現(xiàn)[1]。Qt 作為使用廣泛的C++編程環(huán)境,界面美觀,擁有良好的跨平臺能力。因此,本文選取Qt 作為編程工具來實現(xiàn)地面站的各項功能。
綜合考慮無人機地面站需要實現(xiàn)的功能,由地面站的功能出發(fā)對地面站系統(tǒng)進行總體設(shè)計。地面站需要實現(xiàn)的功能有:
1)實時、可靠、高效的數(shù)據(jù)鏈路通信;
2)飛行器飛行狀態(tài)的顯示和控制;
3)有效載荷的顯示和控制;
4)飛行數(shù)據(jù)的存儲和回放。
根據(jù)以上功能需求,可以將系統(tǒng)劃分為通信控制與數(shù)據(jù)傳輸、數(shù)據(jù)顯示、數(shù)據(jù)處理模塊[2]。圖1 為系統(tǒng)結(jié)構(gòu)圖。根據(jù)系統(tǒng)結(jié)構(gòu)功能圖,設(shè)計如圖2 所示的軟件流程圖。
圖1 系統(tǒng)結(jié)構(gòu)圖
圖2 軟件流程圖
由于無人機地面站的功能需要由不同的功能模塊來實現(xiàn),因此,將無人機地面站劃分為不同的功能模塊來實現(xiàn)。模塊分為串口通信模塊、電子地圖模塊、虛擬儀表顯示模塊、飛行數(shù)據(jù)存儲模塊等。系統(tǒng)前臺界面采用Qt 編程語言進行開發(fā),后臺采用SQLite 數(shù)據(jù)庫對飛行數(shù)據(jù)進行儲存,虛擬儀表使用第三方類庫Qwt(Qt Widgets for Technical Application)編程實現(xiàn)。
數(shù)據(jù)傳輸模塊需要實現(xiàn)的功能為:對數(shù)據(jù)進行緩存和通信控制以實現(xiàn)飛行器與地面監(jiān)控平臺的實時通信[3]。因此,在數(shù)據(jù)無線傳輸方面,采用9XStream無線數(shù)傳電臺來實現(xiàn)功能。9XStream 支持RS232 串行接口通信,其接口速率在9 600 bps 和19 200 bps之間,能夠滿足地面站和飛行器之間遙測數(shù)據(jù)包的傳輸[4]。在通信協(xié)議方面,參考MAVLink 通信協(xié)議,定義如下的通信協(xié)議格式[5]:
1)上行通信協(xié)議。
圖3 上行通信協(xié)議
上行通信協(xié)議的格式見圖3,其一幀數(shù)據(jù)為40字節(jié),其中控制指令位中的數(shù)據(jù)主要為角度調(diào)節(jié)、經(jīng)緯度、爬升高度等信息。
2)下行通信協(xié)議。
圖4 下行通信協(xié)議
下行通信協(xié)議的格式見圖4,其一幀數(shù)據(jù)包含56字節(jié),幀頭占1 字節(jié),校驗和占1 字節(jié),數(shù)據(jù)包括無人機飛行狀態(tài)數(shù)據(jù)和GPS 數(shù)據(jù)等,共占54 字節(jié)。
在功能的實現(xiàn)方面,采用Qt 的第三方串口通信類Qextserialport 實現(xiàn)所需功能。該類在使用上比較簡單,首先創(chuàng)建一個基于Qextserialport 類的對象;其次,定義串口對象,并傳遞函數(shù),在構(gòu)造函數(shù)里對其進行初始化;再次,以讀寫方式打開串口;最后關(guān)聯(lián)串口信號和槽函數(shù)。當(dāng)串口緩沖區(qū)有數(shù)據(jù)時,會發(fā)出讀取串口的信號,之后通過相關(guān)聯(lián)的槽函數(shù)對串口進行讀取串口操作。代碼如下:
航跡繪制模塊需要實現(xiàn)的功能有:電子地圖、對飛行器飛行位置進行標(biāo)注、繪制飛行器的運行軌跡并實現(xiàn)基本的地圖放大縮小等操作。考慮到無人機飛行器需要在無網(wǎng)絡(luò)覆蓋的地區(qū)進行作業(yè),因此采用離線的Google 地圖實現(xiàn)功能。在實現(xiàn)方面,需要先下載Google 瓦片地圖到本地,之后使用JavaScript 編程對下載的瓦片地圖進行拼接,并做出一個本地化的Html 網(wǎng)頁,最后在Qt 上用QWebView 調(diào)用該離線版的Html 網(wǎng)頁以實現(xiàn)所需功能。
電子地圖加載完畢之后,接收從數(shù)據(jù)傳輸模塊下傳解析過后的無人機 GPS 數(shù)據(jù)信息,調(diào)用GoogleMapsAPI 在地圖上進行航跡顯示工作。航跡繪制流程圖如圖5 所示。
圖5 航跡規(guī)劃流程圖
Qt 上做虛擬儀表有2 種方法,一種是使用Qt 的2D 繪圖類QPainter 繪制,另一種是使用Qwt,它是一個基于LGPL 協(xié)議的開源庫,擁有封裝好的表盤類,能夠通過直接調(diào)用模板來完成儀表盤的設(shè)計[6]。本開發(fā)中,考慮到儀表的美觀方面,采用Qwt 來實現(xiàn)虛擬儀表,需要使用Qwt 下的QwtDial 類來繪制所需的儀表盤。
要使用Qwt,需要對Qwt 的開發(fā)環(huán)境進行配置。首先需要用MinGW 對Qwt 庫文件進行編譯,將編譯后的頭文件添加到項目文件夾中,然后在工程文件中添加Qwt 路徑語句,目的是指明Qwt 庫文件的地址,方便主程序調(diào)用,最后在頭文件中添加進Qwt 的頭文件,即可使用Qwt 進行儀表盤的繪制。
Qwt 配置完成之后,在UI 界面上能看到QwtWidget 的控件,將控件直接拖拽進UI 界面上,設(shè)置好控件的背景顏色、最小刻度、顯示方式等,就能做出一個完整的虛擬儀表盤。儀表盤完成之后,在主程序中添加一個QwtDialNeedle 的指針類對象,并對其初始化后,通過給指針類對象傳遞數(shù)據(jù)以達到顯示當(dāng)前飛行數(shù)據(jù)的目的。制作完成的速度表如圖6 所示。
圖6 虛擬速度表
飛行數(shù)據(jù)存儲模塊需要實現(xiàn)的功能有:存儲重要的飛行數(shù)據(jù),如空速、地速、高度、航跡、航向、滾轉(zhuǎn)、俯仰、經(jīng)緯度等,用于存儲規(guī)劃飛行路線中的航點信息[7]。本設(shè)計中,采用2 種方式來對數(shù)據(jù)庫進行訪問。一種是通過訪問SQLite 數(shù)據(jù)庫的方式,另一種是通過文本文檔方式,對數(shù)據(jù)進行保存。通過數(shù)據(jù)庫保存數(shù)據(jù)時,需要在SQLite 數(shù)據(jù)庫中建立多個表格,將飛行數(shù)據(jù)分類保存在不同的表格中,以備之后的分析和處理。通過文本文檔保存數(shù)據(jù)時,以接收數(shù)據(jù)的時間作為保存的文件名,方便日后調(diào)用。
對于SQLite 數(shù)據(jù)庫,首先建立data 和point 2 張表,分別儲存無人機飛行狀態(tài)數(shù)據(jù)信息和航點信息,然后通過QtSQL 對建立好的數(shù)據(jù)庫進行鏈接,最后對數(shù)據(jù)表進行添加數(shù)據(jù)以及提取數(shù)據(jù)的操作。
對于文本文件,使用QTextstream 類來進行,該類將二進制文件以數(shù)據(jù)流的形式的儲存[5]。當(dāng)串口收到無人機下傳的遙測數(shù)據(jù)包后,建立一個帶有當(dāng)前系統(tǒng)時間信息的文本文檔,該文本文檔放置在用戶指定的目錄下。在這之后,通過QTextStream 的txtOutput成員函數(shù)將一整幀數(shù)據(jù)寫入文本文檔中[5]。
開發(fā)完成的無人機地面站軟件主界面如圖7 所示。
圖7 無人機地面站軟件主界面
開發(fā)程序已經(jīng)通過了自行編制的模擬飛行器測試程序的驗證。測試表明,地面站控制系統(tǒng)能夠完成數(shù)據(jù)的實時接收、顯示、存儲、回放、電子地圖的讀取、飛行器GPS 信息顯示、飛行器航跡顯示等功能。證明了基于Qt 平臺開發(fā)的無人機地面站控制系統(tǒng)的可行性。
本文設(shè)計了基于Qt 開發(fā)平臺的無人機控制系統(tǒng)的地面站軟件。對所涉及的一些關(guān)鍵技術(shù)進行了各模塊的分析、實現(xiàn)和驗證。無人機地面站能夠較為穩(wěn)定、準(zhǔn)確、清晰地監(jiān)控?zé)o人飛行器的飛行狀態(tài),為今后的開發(fā)奠定了良好的基礎(chǔ)。
[1]周焱.無人機地面站發(fā)展綜述[J].航空電子技術(shù),2010,41(1):1-6.
[2]蘆勤桑.無人機遙測遙控地面站系統(tǒng)[D].南昌:南昌航空大學(xué),2012.
[3]馬少瑛.小型無人機地面站的研究與設(shè)計[D].呼和浩特:內(nèi)蒙古工業(yè)大學(xué),2009.
[4]楊滌.系統(tǒng)實時仿真開發(fā)環(huán)境與應(yīng)用[M].北京:清華大學(xué)出版社,2002.
[5]Paul G Fahlstrom,Thomas J Gleason.無人機系統(tǒng)導(dǎo)論[M].吳漢平,邵國培譯.北京:電子工業(yè)出版社,2003:1-2.
[6]盧華偉,秦品健,鄭銳.基于Qt/Qwt 的操作監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[J].微計算機信息,2010,26(1):72-74.
[7]劉波.某型無人機地面導(dǎo)航站系統(tǒng)的設(shè)計與實現(xiàn)[D].西安:西北工業(yè)大學(xué),2007.
[8]Bruce K Walker,Norman M Wereley,Luppold Robert H,et al.Effects of redundancy management on reliability modeling[J].IEEE Transactions on Reliability,1989,38(4):475-482.
[9]劉歌群,劉衛(wèi)國,盧京潮.無人機強實時性串口通訊程序設(shè)計[J].計算機應(yīng)用,2005,25(1):210-212.
[10]Zhou Donghua,F(xiàn)rank P M.Fault diagnostic and fault tolerant control[J].IEEE Transactions on Aerospace and Electronics Systems,1998,34(2):420-427.
[11]徐雷.基于Linux 的無人機地面站設(shè)計與實現(xiàn)[D].廣州:華南理工大學(xué),2010.
[12]胡華海,廖劍華.VC++中數(shù)據(jù)接口技術(shù)的探討[J].甘肅科技,2009(15):21-23.
[13]湯彬,李培耀.Windows 下多線程編程技術(shù)[J].上海工程技術(shù)大學(xué)學(xué)報,2002,16(4):310-313.
[14]楊紫千,張繼永,岳陽.Windows 消息機制及其在軟件系統(tǒng)設(shè)計中的應(yīng)用[J].艦船電子工程,2004,24(5):81-84.
[15]宋青,鄭冰,李國輝.VC 與數(shù)據(jù)庫接口技術(shù)的研究[J].現(xiàn)代電子技術(shù),2007,30(22):72-73.
[16]馬少瑛,烏仁格日樂.基于CSerialPortEx 類的無人機地面站串口通信的實現(xiàn)[J].電腦知識與技術(shù)(學(xué)術(shù)交流),2011,7(8):5312-5314.
[17]劉刀桂,孟繁晶.Visual C ++實踐與提高—數(shù)據(jù)庫篇[M].北京:中國鐵道出版社,2001.