呂偉龍+向豪+楊雨昕
摘 要 針對飛行器上位機控制器的應用需求,設計了一個適用于桌面、移動端、嵌入式平臺等的跨平臺飛行器上位機軟件。本系統(tǒng)基于Qt5.5框架,運用C++語言編寫出主程序,在Qt框架中調用百度地圖,實現飛行器的路徑規(guī)劃與顯示;采用JSON格式自定義的通信協議,實現上、下位機的數據交換和上位機的命令發(fā)布。另外,本文還詳細討論了通信時的界面控制邏輯與飛行器安全飛行的控制方案。
【關鍵詞】多旋翼飛行器 上位機 圖形視圖框架 數據傳輸協議
Qt是一個由Trolltech公司開發(fā)的,為桌面,移動端,嵌入式設計的跨平臺的應用程序框架,支持包括Linux,OS X,Windows,VxWorks,QNX,Android,iOS,BlackBerry,Sailfish OS等平臺。Qt本身不是一種編程語言,它是一個用C++寫的框架。預處理器(MOC元對象編譯器)被用于利用某些特征(例如信號和槽)來拓展C++語言。在編譯步驟中,MOC解析用Qt擴展的C++源文件并從中生成符合標準的C++的源文件。因此框架本身和應用程序/庫使用它可以通過任何符合標準的C++編譯器例如Clang,GCC,ICC,MinGW和MSVC。
多旋翼飛行器由于其能夠垂直起降,并且具有機動靈活的特點,不僅廣泛應用于軍事、農業(yè)、商業(yè)等領域,而且近些年逐漸進入大眾的視野里,成為普通百姓也能購買、操作的機械“玩具”。但由于多旋翼飛行器的旋翼轉速極快,如果誤操作或者飛行器失控很容易發(fā)生危險;市面上也很少有能夠支持多品牌、多種多旋翼飛行器的上位機程序。為了解決這些問題,本文基于Qt平臺設計了一種控制簡單、操作安全、用戶體驗較好的通用飛行器上位機系統(tǒng)。
1 通信原理介紹
1.1 數據傳輸系統(tǒng)
本文采用的是一個主從式的數據傳輸系統(tǒng)。主設備(上位機)先對數據進行處理,然后再向從設備(下位機)發(fā)送所要執(zhí)行的命令;從設備接收到數據后分析是哪種命令,接著發(fā)送已接收到的信號和相關的信息給主設備;主設備接收到從設備已接收的信號后,開始重復第一步,依次循環(huán)。數據傳輸系統(tǒng)的流程圖如圖1所示。
1.2 數據傳輸協議
本文采用的通信協議利用的是輕量級數據交換格式JSON,具體交換內容如表1所示。
2 上位機軟件設計
上位機軟件的主要功能結構圖如圖2所示。
采用Qt框架,C++語言實現的上位機軟件,主要包括以下窗口:
2.1 設置窗口
主要實現通信前對各種相關數據的設置和路徑規(guī)劃,同時也將相關信息在窗口中顯示給用戶,主要包括以下界面:
2.1.1 基本設置界面
主要實現對通信所需的各個數據的初始化和電量顯示,主要包括以下功能(界面如圖3所示):
(1)串口設置:通過調用Qt的
串口庫來對串口的幾個參數(串口號,波特率,數據位,停止位,校驗位,流控)進行設置,用戶可以在設置好參數后,點擊打開串口按鈕開始通信。
(2)安全相關提示設置:可在次部分對失控行為,低電量、超低電量提示進行設置,也可以在次部分看到電池電量,保證飛行器的安全。
2.1.2 路徑設置界面
主要實現在開始任務前對飛行路徑的設置,主要包括以下功能(界面如圖4所示):
(1)地圖顯示:通過調用Qt的
(2)飛行路徑設置:用戶可以通過點擊地圖來規(guī)劃飛行器的飛行軌跡,也可以按下旁邊的刪除一個/刪除全部按鈕來對之前點擊的軌跡進行修改,主要通過修改.html的代碼實現。
2.2 控制窗口
主要實現通信時對各種相關部件的控制,同時也將相關信息在窗口中顯示給用戶,主要包括以下功能(界面如圖5所示):
(1)云臺控制:用戶可以通過點擊其中的按鈕,來改變云臺的狀態(tài)(光圈,變倍,焦距,方向)并保存至本地,每次交換數據結束后自動清空此類數據。
(2)任務指令發(fā)布:提供8個指令方便用戶操控飛行器,當用戶點擊按鈕后,根據用戶所要發(fā)布的指令,讀取相關本地數據,自動構成一個符合JSON要求的字符串并通過串口發(fā)送出去。
(3)高度速度控制:用戶可以通過滑動控件來改變飛行器的高度和速度。
(4)相關信息顯示:在每次交換信息之后,將新傳來的關鍵數據顯示出來,方便用戶在控制飛行器時實時的獲取飛行器的關鍵信息。
3 關鍵技術的實現
3.1 地圖的導入和交互
要想在Qt框架中導入百度地圖,首先要到百度地圖API官網上注冊一個密鑰,可在通過其網站自動生成一個在線地圖的.html文件,也可自己編寫;然后在Qt設計師界面創(chuàng)建一個QWebView的控件,再將QWebView控件中URL選項填入之前生成的.html文件地址,注意要調用此控件的前提是在.pro文件里添加一行QT +=webkitwidgets;接著可以修改之前的.html文件,通過百度地圖的API,設計適合本系統(tǒng)的顯示內容(如飛行路徑等);最后通過調用
3.2 通訊數據的轉換和分離
因為本系統(tǒng)調用的是Qt內部的串口庫
3.2.1 數據的轉換
本系統(tǒng)的數據交換量不大,故采用輕量級的數據交換格式JSON。通過Qt內部的JSON庫
3.2.2 數據的分離
因為串口的數據是每隔一段時間全部讀取一次,再加上外界有可能有干擾,由此讀取的數據很有可能丟失或出錯,所以需要對有用的數據進行分離。本系統(tǒng)利用字符‘&和‘|表示一個命令的開頭和結尾,從串口讀取數據后,先將數據存入一個數據緩沖區(qū),再將緩沖區(qū)里的數據從頭開始掃,當描掃到第一個‘&后將‘&前的所有數據刪除,再從次位開始掃描,直到出現‘|結束,把中間的數據提出,并轉換為有效的數據;若有2個‘&連續(xù)出現,則認為是第一個‘&之后的數據錯誤,將第二個‘&前的所有字符刪除。
3.3 通信時的界面控制邏輯
本系統(tǒng)的操作命令一共有如表1所示的9種,其中前8種為手動發(fā)出的命令,它們在軟件中各有一個按鈕可以操控,但是它們的執(zhí)行有先后次序,例如開始任務命令需要在起飛后才能執(zhí)行,所以開始命令只能在起飛命令發(fā)送并完成后才可以發(fā)送。為了防止用戶在發(fā)送命令時產生誤操作,也為了用戶能更好的明白本系統(tǒng)的命令執(zhí)行流程,故在通信過程中,本系統(tǒng)加入了一些限制條件,初始狀態(tài)下可按的僅有起飛按鈕,具體如表2。
3.4 飛行器安全飛行的控制方案
由于多旋翼飛行器的旋翼轉速極快,如果誤操作或者飛行器失控很容易發(fā)生危險,所以安全性問題是必須要解決的問題。因此,本系統(tǒng)設計了以下幾點在安全性方面的優(yōu)化:
(1)低電量提示:可以設置在電池處于低于20%電量的時候,上位機軟件跳出提示窗口,提示用戶已低于20%電量。默認開啟。
(2)超低電量提示:可以設置在電池處于低于10%電量的時候,上位機軟件跳出提示窗口,提示用戶已低于10%電量,并終止當前命令,執(zhí)行失控行為。此時本系統(tǒng)不允許用戶繼續(xù)進行操作,用戶只能通過遙控器來操作飛行器。默認開啟。
(3)失控行為設置:本系統(tǒng)中失控行為可設置的一共分為3種,懸停、返航、降落。默認為懸停。
(4)為了防止用戶過快的改變高度/速度使飛行器失控,本系統(tǒng)設置了一個閥值--當用戶一次性改變高度/速度超過10米/10米每秒時,本系統(tǒng)會跳出彈窗提示用戶不能過快的改變高度/速度,并將改變量返回至原值±10。
4 結束語
文中介紹了一種適用于桌面、移動端、嵌入式平臺等的跨平臺飛行器上位機軟件。對如何在Qt中導入地圖以及如何運用Qt框架進行快速開發(fā)做了簡單的介紹,詳細的分析了上、下位機的通信原理、飛行器安全飛行的控制方案和通信時的界面控制邏輯。該軟件運用Qt框架大大縮短了軟件開發(fā)時間并減小了軟件開發(fā)難度。軟件模塊功能分明,易于開發(fā)和維護且具有控制簡單,操作安全的特點,適用于大部分廠商開發(fā)的飛行器。
參考文獻
[1]黃超.基于Qt的嵌入式GUI的研究與實現[D].吉林大學,2011.
[2]張春艷.基于Qt的嵌入式圖形用戶界面研究與實現[D].大連海事大學,2008.
[3]邢四為.基于JSON的信息交互系統(tǒng)的研究與實現[D].安徽大學,2013.
[4]柯艷,李杰,孔祥雷,劉吉吉.基于USB2.0的多路數據采集系統(tǒng)上位機軟件設計[J].測試技術學報,2010(04):351-356.
[5]孫迪,李沛鴻.百度地圖API在WebGIS中的應用[J].河南科技,2013(22):165-166.
[6]百度開發(fā)者中心.百度API介紹.http://lbsyun.baidu.com/.2016.
[7]Qt開發(fā)者中心.Qt維基.http://wiki.qt.io/Main.2017.
作者簡介
呂偉龍(1996-),男,江蘇省南京市人。學生,本科大三,研究方向為軟件工程系統(tǒng)分析設計,算法研究等。
向豪(1996-),男,湖北省荊門市人。學生,本科大三。
楊雨昕(1995-),男,江蘇省鎮(zhèn)江市人。學生,本科大三。
作者單位
中南民族大學計算機科學學院 湖北省武漢市 430000