金強 方春華 戚文杰



摘? 要: 針對我校無人機應用專業學生操作無人機能力強而對地面站的實現原理理解不夠深入的情況,以四旋翼無人機地面站為對象,以Qt5.4為開發平臺,分別對地面站串口通訊、飛機虛擬儀表、地圖瀏覽器、航點規劃,以及數據存儲等進行了設計,較完整地實現了地面站的各項功能。此設計具有一定的實用性,有助于加強學生對地面站實現原理的理解,提高他們的學習興趣,為將來從事無人機工作夯實基礎。
關鍵詞: Qt; 無人機; 地面站; 系統設計
Abstract: Aiming at the phenomenon that the students of drone application specialty have strong ability to operate drones, but do not have a deep understanding of the ground station's implementation principles, this paper takes the quad-rotor UAV ground station as the design object and uses Qt5.4 as the development platform, to design the serial communication, aircraft virtual instrumentation, map browser, waypoint planning and data storage etc. of a ground station, which? realizes the most functions of the ground station. The design is practical, and is helpful to students' understanding of the ground station implementation principles and their learning interest, which lays the foundation for the future UAV work.
Key words: Qt; UAV; ground station; system design
0 引言
近年來,我國無人機產業日趨火熱,小到航空攝影、航空測繪,大到農業植保、電力巡查、軍警偵查等領域,無人機的應用越來越普及,于此同時,無人機地面站的發展也與時俱進,從美、俄等無人機發達國家發展現狀和趨勢來看,無人機地面站正朝著通用化、智能化、單站多機的方向發展。
無人機地面控制站軟件技術是一項融合了圖像處理、地理信息系統、數據傳輸與處理,以及先進控制等多種尖端技術為一體的先進技術[1]。目前多數地面站品牌間不通用,不能跨平臺,導致在實際使用上產生諸多不便,考慮到Qt軟件在圖形界面開發上的優勢,可實現“一次編寫,隨處編譯”[2],能在幾乎所有的操作系統上運行,本文以Qt5.4為開發平臺、以四軸無人機地面控制站主要功能的實現為目標,通過完成設計,加強了我校無人機專業學生對地面站實現方法的理解,提高了他們的學習興趣,為將來從事無人機工作夯實了基礎,具有一定的實用性。
1 地面站總體設計
地面站布局如圖1所示,主要由五個模塊組成:①地面站與無人機或遙控器串口通訊模塊;②地圖顯示模塊;③航點信息模塊;④狀態顯示模塊;⑤數據存儲模塊。本文將圍繞五大功能模塊進行詳細設計。
1.1 通訊模塊設計
無人機與地面站實現通訊,有以下幾種方案:①無人機使用USB線和地面站進行串口通訊;②無人機通過無線電臺與地面站進行無線通訊;③無人機通過WIFI與地面站進行無線通訊等。本設計采用如圖2所示的架構,四軸和遙控器分別通過UsbLink鏈路與地面站通訊,遙控器與四軸之間通過無線RadioLink鏈路進行通訊,本文重點介紹UsbLink鏈路的通信設計。
⑴ 串口鏈路(UsbLink)數據幀格式
RadioLink鏈路主要是實現遙控器將地面站發送的命令轉發給四軸,同時將四軸的姿態信息上傳到地面站,四軸平時由遙控器進行飛行控制,UsbLink鏈路采用虛擬串口通信方式,傳輸含幀頭和校驗位的數據包,其數據幀格式如表1所示。
⑵ 串口線程的創建及數據解析
線程也被稱為“輕量級進程”,一個線程只有一個內核對象和一個棧,所需內存比較少,所以在編程時經常采用多線程技術來處理實際問題,從而避免因創建新進程而帶來的系統資源消耗問題[3],本設計通過Qt的run()函數創建串口子線程的方法來實現串口收發數據,從串口線程內發出的信號,可以與主線程(UI界面)中的槽函數進行連接,從而可以在主線程中對數據進行處理。由于Qt5.4已集成了串口通信類QSerialPort和QSerialPortInfo,前者提供了操作串口的各種接口,后者提供了計算機中可用串口的各種信息,通過創建類的對象和方法很容易實現串口通信,串口子線程創建代碼如下:
程序通過start()函數啟動線程,在線程中既可以通過創建一個定時器信號(心跳程序)來連接槽函數讀取數據,也可以在線程中通過創建串口對象myCom信號來連接槽函數讀取數據,方法如下:
從串口讀取數據后,通過先創建一個Data_Receive_Prepare函數來預解析數據,將讀取的數據進行一次格式解析,格式正確后再創建Data_Receive函數來解析數據,函數中的參數就是符合協議格式的一個數據幀,以下是一行從地面站串口截取到的數據:
按照協議,開頭0xAA兩字節表示接受數據,01表示功能字,代表采集的數據是飛機姿態信息,0C表示數據的長度為12個字節,其中0xFFEB兩個字節代表ROL,0xFFCA代表PIT,0x0D6C代表YAW,0x000002代表飛行相對高度,0x61代表飛行模式,0x0000代表加鎖、解鎖,求(0xAA+…+0x61+..0x00)之和為0x5F0,取低8位0xF0,正好等于最末一個字節,表示校驗和正確。