王曉光, 管港云, 徐嘉銘, 李俊呈
(1. 吉林大學 公共計算機教學與研究中心, 長春 130012; 2. 吉林大學 電子科學與工程學院, 長春 130012; 3. 長春理工大學 光電工程學院, 長春 130022)
近年來, 隨著傳感器技術的發展和GPS在控制系統中的廣泛應用, 微型無人機系統迅速發展, 無人機作為微型機電系統的產物, 非常適合在曠野城區等近地面環境中執行任務, 具有廣闊的應用前景. 在人工智能技術中, 利用航拍圖像實現對特定目標進行跟蹤與自動識別的技術受到廣泛關注, 其借助可編程的硬件突破了邏輯電路的固件性, 算法靈活.
基于GPS和計算機圖像識別的無人機導航系統利用計算機視覺技術, 旨在設計無人機高精度定位導航系統. 使用該系統的無人機需要有攝像頭硬件匹配, 當無人機利用GPS定位到達目標地點附近卻因GPS定位精度較低不足以精準定位目標時, 無人機立即開啟攝像頭進入圖像識別定位模式, 通過圖傳模塊在計算機端完成目標檢測與路徑規劃, 并控制無人機相應運動, 實現無人機自主完成高精度識別目標降落任務的功能. 本文利用開源計算機視覺庫(OpenCV)為無人機設計基于計算機視覺的定位系統與控制系統[1], 并采用GPS定位與計算機視覺識別相結合的技術實現更高效、 準確的定位導航系統.
本文根據無人機自主飛行定位導航任務, 采用STM32無人機核心主板, 在GPS定位與飛行模式控制的基礎上, 數傳模塊與圖傳模塊通信傳輸, 在計算機上完成視覺識別精準定位. 任務需求由如圖1所示的4個分系統協調合作實現. 首先圖像捕獲系統將視頻流采集到PC端[2], 圖像處理系統再將收集到的圖像做預處理, 進行圖形擬合并計算出圖形的幾何中心坐標值; 然后由路徑規劃系統計算目標圖形幾何中心與無人機的坐標差值; 最后飛行控制系統傳輸相應的運動期望指令, 使無人機到達預設的位置[3].

圖1 無人機導航系統組成Fig.1 Composition of UAV navigation system
在圖像形狀特征的提取上, 對于相對簡單的目標圖像, 可采用輪廓特征算法提取得到形狀特征[4]; 而對于復雜目標圖像的處理, 則需先重新進行邊緣檢測, 再使用輪廓特征算法完成圖像形狀特征的提取[5]. 在定位系統上, 本文使用更精準的基于計算機視覺系統的定位方式. 利用計算機視覺庫完成基于計算機視覺的無人機定位系統與控制系統的程序設計, 解決了無人機在空中快速飛行下的圖像數據采集及預處理, 其他圖形或地面輪廓干擾下的標志識別, 遠距離無人機配合識別精確位置控制的問題.
本文設計了基于STM32單片機和GPS模塊兩者之間的通信, GPS模塊在系統中作為通信的橋梁, 通過接收衛星發射的無線電信號實現對定位信息的獲取, 并由GPS模塊對接收到的數據進行分析解讀, 轉換為終端設備可識別的位置信息, 然后使STM32單片機對無人機發出適當的指令, 最后無人機執行指令到達目的地. 相應的模塊關系如圖2所示.

圖2 模塊關系Fig.2 Module relationships
GPS定位解析可實現經緯度測定、 海拔高度測定、 速度計算與方向指示、 路徑存儲和最短路徑計算.
2.2.1 串口通信設計
STM32單片機對GPS模塊的控制通過通用異步收發傳輸器(UART)實現, 當串口初始化結束后, UART讀取或寫入存儲器內的數據, 當等待接收緩存區為空時, USART即可接收GPS數據. 系統的串口通信模塊可分為串口初始化模塊、 串口讀取模塊和串口寫入模塊.
2.2.2 GPS數據接收程序設計
GPS模塊用于從串口讀取GPS信號信息, 判斷是否檢測定位到GPS信號, 進而獲得GPS的位置、 速度、 時間數據等信息, 并進行相應的處理. GPS信號接收過程如圖3所示.

圖3 GPS信號接收過程Fig.3 GPS signal receiving process
2.2.3 GPS數據格式解析協議
選用GPRMC數據幀模式, 其具有特定的信息存儲形式, 包含經緯度、 速度、 時間等所需內容. 系統程序接收到處理標識后, 根據GPRMC格式, 從中獲取所有關鍵數據[6]. 以GPRMC信號為例: 首先創建一個GPS數據結構體, 然后解析GPRMC數據, 得到經緯度、 日期時間、 速度、 航向, 如果數據有效, 則分析分離緯度、 分離經度、 速度等.
在無人機飛行控制系統中引入前置反饋, 改善系統的實時性, 進入微分環節, 改善動態特性, 提升飛行控制系統的整體性能, 以便無人機適應飛行過程中的各種復雜狀況.
陀螺儀選取MPU6050進行姿態角的探測, MPU6050加速度陀螺儀傳感器內有三軸加速度傳感器、 三軸陀螺儀和一個I2C接口, 可連接外部地磁傳感器, 并利用自身帶的DMP(數字運動處理器)硬件加速引擎, 利用I2C接口將完整9軸融合演算的數據輸出到應用端. 軟件設計選用STM32讀取傳感器信息, 解算姿態角, 將姿態角作為控制量與遙控參量融合, 將輸出的控制信號傳送到動力系統中, 實現無人機的飛行控制.
蟻群算法(ACO)是一種模擬螞蟻尋找食物過程中如何發現最短路徑的算法. 如果在柵格圖[7]中要尋找從起點S到終點D的最優路徑, 則所有可能走的節點組成集合Possible. Possible表示螞蟻接下來可能會走的下一個節點的集合;α是體現搜索路徑重要性的因子[8],α越大表示螞蟻走的是其他螞蟻走過路徑的可能性越大;β為反應螞蟻協作性強度的因子[9],β值越大, 說明狀態轉移概率越接近貪心規則[10].因此, 當求解一個問題時, 通常能做出目前最優的選擇.
每通過一段路徑, 螞蟻就需要去更新信息素的值.已知t時間時, 信息素值為τij(t), 則信息素的值在t+n時間可表示為
τij(t+n)=(1-ρ)τij(t)+Δτij(t),
(1)
其中ρ為信息素揮發系數, 定義域為(0,1).因為蟻群算法在使用Ant-Cycle模型時的性能更好, 因此本文使用Ant-Cycle模型[11], 表示為

(2)
蟻群算法使用分布式計算方法, 進程和線程同時執行實現算法的性能; 該算法易與其他算法相結合, 且魯棒性較好, 不需做過多修改即可使用.但該算法用時較長, 易陷入局部最優解.
考慮到無人機自身的約束條件, 如飛行高度、 最大航跡長度等因素, 設現有一條飛行路徑R, 無人機在飛行過程中經過點(X1,Y1,Z1),(X2,Y2,Z2),…,(XN,YN,ZN), 則適應度值函數F為

(3)
其中α和β為系數, 其值大小分別表示路徑長度和無人機飛行高度在路徑規劃中的重要程度.
選擇X方位為主方位, 沿著X軸方向從XS到XD劃分成n=(|XS-XD|+1)個平面, 分別命名為Π1,Π2,…,Πn, 無人機路徑即分成(n-1)段.假設無人機飛行到第i個平面Πi中的點(Xi,Yi,Zi), 則易知下一個到達的柵格即在Πi+1上, 平面Πi+1上任意一柵格(X,Y,Z)成為下面要運行的柵格, 其概率表示為

(4)
其中:τ(X,Y,Z)為面Πi+1中點(X,Y,Z)的柵格信息素數值;H(X,Y,Z)為平面Πi+1中坐標為(X,Y,Z)所對應柵格的啟發函數, 其計算公式為
H(X,Y,Z)=D(X,Y,Z)ω1S(X,Y,Z)ω2Q(X,Y,Z)ω3,
(5)
D(X,Y,Z)為到(X,Y,Z)的路徑長度, 使螞蟻盡可能選擇距離目前點最近的點,

(6)
S(X,Y,Z)為表示安全性的重要因素, 使螞蟻去選擇安全點,

(7)
Q(X,Y,Z)表示柵格(X,Y,Z)到終點柵格(XD,YD,ZD)的距離, 可使螞蟻選擇離終點柵格近的柵格, 計算公式為

(8)
式(5)中ω1,ω2,ω3為系數, 其大小表示上述因素是否重要, 該項越重要, 對應的系數值越大, 反之則表明不重要.
在蟻群算法中, 所有柵格都有一個信息素值, 信息素有兩部分: 局部更新和全局更新.局部更新會在有螞蟻經過該柵格時進行更新.全局信息素只改變最小適應度值的路徑通過的所有柵格的信息素值, 信息素更新的計算公式為

(9)
其中length(m)表示螞蟻m走過的路徑長度,K表示系數,ρ表示信息素的揮發系數[12].
3.3.1 起始點位置確定
假設柵格地圖的原點坐標是(XgridS,YgridS,ZgridS), 無人機放置的位置為(SX,SY,SH), 則與其所在柵格坐標位置(XS,YS,ZS)的關系為

(10)

(11)

(12)
其中ceil表示在正無窮的方向上取整.
3.3.2 主方向的選取
選取經度和緯度方向中柵格變化數較多方向為無人機路徑規劃的主方向, 則從Πi到Πi+1坐標變化為

(13)
無人機視覺定位系統通常選擇生活中常見有辨識度的圖形作為視覺定位目標, 因為使用PC端進行實驗, 所以目標圖形需滿足: 1) 現實生活中普遍存在且易計算中心值; 2) 易被識別的目標圖形; 3) 目標圖形的灰度值與其背景圖像有明顯區別, 易辨識. 常選用“H”圖形.
在地面標志識別算法和程序設計過程中, 為提高無人機對目標圖形的檢測準確性, 需要優化對于角點識別的相關算法. 設計程序使無人機自動尋找目標物, 繪制地面標志判斷的流程圖. 最后進行地面標志識別跟蹤定位實驗, 檢驗飛行性能.
圖像預處理中首先使用灰度處理提高計算效率; 其次利用高斯濾波處理降噪[13]; 然后采用形態學梯度處理[14], 使圖像中的灰度級階躍更明顯, 凸顯邊緣; 最后使用Canny邊緣檢測算法提取內部輪廓邊緣[15], 再進行Hough圓檢測過程, 找到圓的區域半徑以及其幾何中心坐標, 從而進行運算得到相對坐標. 圖像預處理流程如圖4所示.

圖4 圖像預處理流程Fig.4 Image preprocessing process
級聯分類器包含訓練和檢測兩個過程. 其中訓練分類器本文采用OpenCV traincade程序. 程序支持Haar和局部二值模式(LBP)兩種特征, LBP特征是整數特征, 使訓練和檢測速度更快且不影響其精確性. 對于分類器的選擇, 本文使用Python中OpenCV的Adaboost分類器, 將訓練弱分類器進行迭代, 每次迭代后對獲得的局部最優分類器權重進行求和, 得到強分類器.
4.3.1 算法流程
1) 首先修改訓練數據權重, 保證其遵循均勻分布的規律;
2) 學習訓練數據集合Dm(m=1,2,…,M), 獲得一個簡單分類器, 計算分類器在訓練數據集合上的誤差率, 即錯誤樣本數量;
3) 計算系數, 即弱分類器權重, 分類錯誤樣本越少, 弱分類器權重越大, 分類器的性能越好;
4) 更新訓練數據集的權重分布, 可通過提高分類錯誤樣本權重的方法, 增強分類器的性能;
5) 弱分類器加權得到目標分類器.
4.3.2 訓練級聯分類器的步驟
訓練級聯分類器步驟如圖5所示. 訓練過程概括為兩步: 1) 創建樣本, 樣本分為正、 負兩類, 正樣本是要檢測的目標樣本, 負樣本是任意無關的圖片; 2) 對正、 負樣本分別建立描述文件, 為正樣本創建一個TXT文件(pos.txt), 將該文件與正樣本存儲在相同的路徑中, 負樣本則為另一個TXT文件(neg.txt), 與負樣本圖片存儲在相同路徑中.

圖5 訓練級聯分類器步驟Fig.5 Training cascade classifier steps
4.3.3 正樣本建立
選擇正樣本的要求: 1) 不嚴格規定圖片尺寸大小, 但必須與得到的正樣本矢量文件比例相同, 訓練時可根據設置的比例自動縮放; 2) 正樣本圖像背景干擾盡可能少, 避免背景特征干擾正樣本特征值的計算結果; 3) 正樣本來源應豐富, 如果目標圖像重合率相似率過大, 局部特征明顯一致, 訓練擬合程度過高, 則會影響識別的準確度, 不利于分類器的廣泛使用.
正樣本建立步驟如下:
1) 獲得正樣本圖像, 首先要對正樣本歸一化處理, 采集時可直接從原圖按比例裁剪以便放縮;
2) 獲取正樣本路徑列表, 在文件夾中編寫一個bat文件, 內容為dir pos/b>pos.txt, 其中pos是文件夾名, 運行bat文件, 生成dat文件, 刪掉dat文件中所有不是圖片的路徑, TXT中的位置信息是基于objectMaker程序生成的;
3) 獲取正樣本矢量集vec文件, 用OpenCV中的程序opencv_createsamples.exe獲取后放在當前路徑下, 寫入bat文件完成指令的輸入, 通過加-show顯示正樣本圖像, 根據需求更改num, -w和-h(數目、 寬度、 高度), 運行bat.pos文件產生成正樣本矢量集文件.
4.3.4 負樣本建立
選擇負樣本的要求: 圖片中不允許有待檢測物; 負樣本同樣要求種類數目繁多, 不能重復; 不對負樣本的尺寸大小嚴格規定, 但負樣本尺寸需大于正樣本矢量集圖像的高和寬, 保存路徑與正樣本類似, 內容為dir neg/b>neg.txt, 其中neg為負樣本所在的圖像文件夾名, neg.txt中內容不含框和位置信息. 經上述步驟, 負樣本建立完成.
4.3.5 訓練級聯分類器
使用opencv_traincascade完成級聯分類器的訓練后, 將其存儲于cascade.xml文件中. 路徑中還存放許多中間量. 若在訓練級聯分類器的過程中被其他高優先級程序中斷, 則只需再次加載即可讀入, 不用再次訓練該分類器. 訓練完成后, 不需保存這些中間文件. 經驗證, 正負樣本數目為1∶3訓練效果較好, 訓練層數越多越好.
訓練成功后, 如果能在文件夾下找到名為dt.xml的文件, 則說明可進入測試階段. 若在某處停止很久, 則大概率是因為負樣本不足. 此時應輸入中斷程序指令, 通過提高負樣本的數量和增加其豐富性, 得到分辨能力強弱不同的多個級聯分類器; 或使用OpenCV的CVHaarDetectObjects函數對其檢驗.
無人機是雙向對稱結構, 因此可將無人機的相對位置用俯仰、 橫轉、 偏航和升降4個輸入量定義. 以姿態角為被控量, 應用PID算法, 并通過STM32單片機控制無人機4個電機的轉速分別控制無人機完成不同動作, 從而達到控制實現無人機定向運動的目的. 無人機飛行控制流程如圖6所示.

圖6 無人機飛行控制流程Fig.6 Flow chart of UAV flight control
對于姿態角的計算, 采用積分的算法可能會降低動態系統平衡性能, 嚴重時會導致閉環系統穩定性較低, 所以積分不能過大. 若采用微分算法, 則可能因為人為操作原因而導致誤差過大, 從而影響系統穩定性, 甚至使系統振蕩. 因此引入微分實現PID值計算時, 只針對姿態角進行微分而不對設定值進行微分操作, 可提高系統動態性能并增強系統可靠性.
利用數傳模塊將姿態角信息傳到計算機, 通過計算機運算觀察圖像與模擬姿態, 得到擬定姿態角數據. 系統數據傳送過程如圖7所示. 對于無人機的PID算法, 反復調節得到最優參數, 最終達到預期平衡狀態. 使STM32單片機與GPS模塊連接, 將模塊的輸入輸出線和地線分別與STM32的輸入輸出線和地線相連. 整體系統搭建完成后, 可實現無人機的飛行只由用戶端程序控制, 將無人機的航點任務需求編入程序, 可在計算機上實現無人機導航系統切換多種模式調試的目的[16].

圖7 系統數據傳送流程Fig.7 Flow chart of system data transmission
無人機搭載攝像頭得到的數據信息不因環境而改變, 且可以直接從捕獲的圖像獲取感興趣區域(RIO), 利用訓練好的分類器進行目標比對與判定.
綜上所述, 本文在全球定位系統GPS的基礎上, 結合當前計算機視覺識別與級聯分類器智能化目標檢測對無人機視覺定位系統進行了研究與設計, 其中攝像頭捕獲圖像傳回計算機一體化處理, 獲取一系列位置坐標和路徑規劃, 自動調整位置, 使無人機自主完成高精度識別目標降落的任務, 實現無人機對于常用標識的跟蹤.