魏明鑫,黃 浩,胡永明,王德志,李岳彬
(湖北大學 物理與電子科學學院,武漢 430062)
無人機(unmanned aerial vehicle, UAV)主要分為旋翼無人機和固定翼無人機。多旋翼無人機是旋翼無人機的一種,具有靈活性好、穩定性強、可垂直起降等特點,比固定翼無人機機動性更強。因此,多旋翼無人機的應用場景更加廣泛。隨著多旋翼無人機技術近幾年的發展,多旋翼無人機在民用和軍用領域都有了很廣的應用。民用上可以用在航拍、電力巡檢、物流等領域;軍事上更是可以用在軍事偵察、目標打擊等方面。
傳統視覺跟蹤雖然有很強的自主性、寬測量范圍和可以獲取大量的環境信息等優點,但它同時也存在許多缺點。
1)強大的硬件系統是必需的:為了獲得精確的導航信息,導航系統不可避免地配備了高分辨率相機和強大的處理器。從圖像數據采集和處理,這涉及到巨大的數據操作。許多圖像算法都是非常復雜的,這無疑給系統的集成設計、CPU、DSP、GPU計算能力和內存大小帶來了巨大的挑戰。
2)傳統視覺導航跟蹤的可靠性較差:視覺導航有時很難在復雜的燈光和溫度變化的環境下工作。環境適應性問題是困擾視覺導航的難題。同時無法解決不同形狀的物體在投影平面上的問題相同的圖像視覺算法的高實時需求。
所以視覺導航不僅需要高性能的硬件來提高圖像采集的速度和處理時間,還需要在深度學習、神經網絡和小波變換等軟件算法上取得突破[1-6]。
近幾年,由于深度學習的發展,機器人無人駕駛等領域又迎來了一次變革,將朝著達到真正意義上的人工智能發展。目標跟蹤無人機主要涉及視覺識別、目標檢測與追蹤等問題。文獻[7]介紹了一種基于合作目標的無人機目標跟蹤方法。能夠實現準確跟蹤,此方法主要用在危險物排除。文獻[8]介紹了基于視覺的無人機目標追蹤方法,該方法是采用數傳將攝像機采集到的圖像數據發送到遠端進行處理后再發送指令給無人機。
本文介紹一種基于深度學習的無人機目標跟蹤方法,其自主性更強,解決了傳統的基于雙目攝像機成本過高以及在復雜環境下識別準確率較低的問題。通過深度學習SSD算法訓練自己的模型,然后將訓練好的模型移到嵌入式工控板并運行,使其能夠辨認出要識別并且跟蹤的目標。在嵌入式工控板中裝的是Linux操作系統,并在Linux操作系統中安裝了ROS(robot operating system)。ROS是一個用于編寫機器人軟件的靈活框架集成了大量的工具、庫、協議,提供類似操作系統所提供的功能,可以極大簡化繁雜多樣的機器人平臺下的復雜任務創建與穩定行為控制。因此嵌入式工控板可以通過ROS與飛控板建立通信。飛控板接收到目標物的位置并接受工控板發送的指令使無人機朝目標飛去,并實現追蹤。系統分為三層,上層為視覺處理端,底層為飛控端,中間采用ROS作為通信機制。其系統代碼結構圖如圖1所示。

圖1 系統代碼結構圖
在計算機視覺領域,基于深度學習的目標檢測算法近幾年發展迅速,每年都有新的想法提出。R-CNN提出于2014年,是卷積神經網絡在目標檢測任務中的開山之作。R-CNN因為要對每個候選區都要從頭開始計算整個網絡,所以其運算效率低下。2015年RBG(Ross B.Girshick)等結合了SPP-Net的共享卷積計算思想,對R-CNN做出改進,于是就有了Fast R-CNN。RBG團隊在2015年,與Fast R-CNN同年推出了Faster R-CNN,Faster R-CNN的出現解決了Fast R-CNN的實時性問題,在Faster R-CNN中提到了RPN(Region Proposal Network)網絡,RPN是一種全卷積網絡,它的前幾層卷積層和Faster R-CNN的前五層是一樣的,所以RPN是在進一步的共享卷積層的計算,以降低區域建議的時間消耗。較大的提高了目標檢測精度和計算速度[9-10]。
為了進一步提升目標檢測的實時性,基于單個網絡的實時目標檢測框架YOLO(You Only Look Once),框架和基于單個網絡多層次預測框的目標檢測算法SSD(Single Shoot MultiBox Detector)算法被提出。YOLO 雖然能夠達到實時的效果,但是其 mAP 與SSD的結果有很大的差距,每個網格只能預測一個目標,易導致漏檢,對于目標的尺度較敏銳,對于尺度變化較大的目標泛化性較差[11-14]。而無人機目標檢測對準確性要求更高。綜合對比下來,本方案采用SSD目標檢測算法。
SSD的設計理念也是采用CNN網絡來進行檢測,不同的是,它采用了一個多尺度的特征圖用來檢測。多尺度檢測顧名思義是采用尺寸不同的特征圖,分別采用一個大的特征圖和一個比較小的特征圖用來檢測。用大的特征圖檢測小的目標,小的特征圖來檢測大的目標。與YOLO采用的全連接層不同,SSD最后直接采用卷積對不同的特征圖進行檢測提取。SSD設置先驗框,這里是借鑒了Faster R-CNN中anchor的思想。圖2展示了其基本架構。圖3展示了大小兩個特征圖的效果。

圖2 SSD基本架構

圖3 不同尺寸的特征圖
SSD以VGG16為基礎模型,在該模型上新增了卷積層來獲取更多的特征圖。從圖4中,可以看到該算法利用了多尺度的特征圖來做檢測。

圖4 SSD算法網絡結構圖
目標識別出后并畫框圈中目標物,開始進行目標追蹤,目標追蹤主要分為兩步。目標位置估計以及控制無人機姿態進行追蹤[12]。
攝像頭通過目標檢測捕捉到目標,并畫框提取。這里調用OpenCV處理方框,并將目標物所畫方框的中心像素點坐標提取出來為P1(x1,y1),相機畫面中心像素點坐標為P2(x2,y2),接下來是獲得深度距離信息,利用深度學習目標檢測算法,被追蹤目標可以有效并完整地框選出來,并計算選擇框上下邊距之間的像素尺寸。采用三角形相似原理[15],計算得到目標上下框的尺寸,目標到攝像頭間的距離滿足:
(1)
這里,d代表物體與攝像頭之間的距離;f代表攝像頭的焦距,這里所用的攝像頭是定焦攝像頭;h代表目標物體的實際長度;l代表目標成像后的長度,原理如圖5所示。

圖5 相似三角形距離估計原理示意圖
求得深度距離信息之后,我們就完整地得到了目標框中心像素點與相機畫面中心像素點的三維坐標,然后計算相機畫面中心像素與目標框中心像素在空間坐標系的坐標差,獲取到無人機與目標物之間的坐標差,如圖6所示。

圖6 求取坐標差
將目標位置坐標差信息轉換為控制無人機的期望速度。由于相機的抖動,系統輸出的位置坐標存在誤差,為了減小誤差,我們這里采用了PID算法來優化輸出的坐標差[16]。
在基本PID控制中,當有較大幅度的擾動或大幅度改變給定值時,由于此時有較大的偏差,以及系統有慣性和滯后,故在積分項的作用下,往往會產生較大的超調量和長時間的波動。為此可以采用積分分離措施,即偏差較大時,取消積分作用,所以我們這里即用PD算法來改善系統的動態性能[16]。
XOUT=Kp*xe(t)+Kd*εx
YOUT=Kp*ye(t)+Kd*εy
εx=xe(t)-xe(t-1)
εy=ye(t)-ye(t-1)
(2)
這里,xe(t),ye(t)為x,y軸的坐標差,εx,εy為系統誤差。圖7展示了經過優化后最終輸出的目標位置。在機體坐標系下,前方z為正,右方x為正,下方y為正。flag_detected用作標志位,1代表識別到目標,0代表丟失目標。

圖7 最終輸出的目標位置示意圖
通過Mavlink實時發布期望速度和高度給飛控,使飛控板對無人機進行姿態控制實現對目標的追蹤。圖8為無人機姿態控制的詳細流程圖。

圖8 目標追蹤控制流程圖
試驗采用自行搭建的無人機飛行平臺進行,飛控板采用Pixhawk同時外接工業級IMU,使得無人機飛行時具有更好的穩定性,嵌入式工控板采用NVIDIA Jetson TX2平臺。
訓練過程主要分為兩個步驟:第一步是圖片中的先驗框與真實值進行匹配;第二步是確定損失函數。
SSD的先驗框與真實值的匹配原則主要有兩點:第一,對于圖片中每個真實值,找到與其重疊度最大的先驗框,然后該先驗框與其進行匹配;第二,保證正負樣本平衡,保證正負樣本的比例接近1∶3。
確定訓練樣本后,然后確定損失函數。損失函數是由位置誤差和置信度誤差加權和得到的,其公式為:
(3)

(4)
對于置信度誤差,其采用SoftmaxLoss,定義如下:
(5)
這里:
(6)
本次試驗采用坦克戰車作為目標物,因此本文先訓練模型識別坦克戰車。這里訓練模型使用GPU對訓練過程進行加速。首先安裝Tensorflow Object Detection API所需的開發環境,并在官方的Demo上進行測試。然后運用數據進行訓練和測試,制作自己的模型。先從網上下載1000張坦克戰車的圖片。分為訓練集與測試集。并設置標簽“tank”,然后開始訓練。圖9是訓練自己的模型的流程圖。

圖9 自制模型訓練流程圖
模型訓練結束后,用訓練好的模型檢測效果。本文隨機選取了幾張坦克戰車的照片,以此來檢驗模型對于坦克戰車識別的準確率。該模型在測試集的識別率為96%。圖10顯示了在實際測試中,目標均被準確識別出,且識別為坦克的概率均在95%以上。

圖10 目標檢測測試
如圖11所示,將訓練好的模型移植到嵌入式工控板中,調用單目攝像頭并運行模型。然后進行目標識別。通過在ROS的可視化平臺上看到工控板可以實時地檢測到坦克戰車,同時將訂閱到的距離信息也實時標示出來。

圖11 實時目標與距離檢測試驗結果
我們接通飛控板與工控板,并建立通信機制。并且運行MAVROS包來監聽一個飛控消息在ROS上訂閱單目攝像頭發布的目標位置信息,并通過Mavlink傳輸協議發送給飛控板。同時在工控板上發布追蹤指令。飛控板接收到追蹤指令后,開始朝電腦中的坦克目標飛去,并保持設定的距離。移動電腦,可以看到無人機朝著電腦的方向實現追蹤。圖12(a)、12(b)分別以第三視角與無人機第一視角拍攝了無人機對目標的追蹤。

圖12 無人機對目標的追蹤示意圖
本文介紹了利用單目攝像頭,基于深度學習實現了對坦克戰車的實時檢測定位并追蹤,此方法具有識別準確率高、跟蹤效果好的特點,同時解決了傳統的基于雙目攝像機成本過高以及在復雜環境下識別準確率較低的問題。
通過試驗驗證了該方法能對目標進行高準確率識別,并在飛行試驗平臺上進行了實際飛行試驗。由于這次選用的目標為坦克戰車,實際的樣本不好收集。所有的樣本均來自網絡,以及測試也采用在電腦上以圖片的形式讓無人機進行追蹤。根據SSD算法,理論上是可以建立任意模型,也就是說,在模型訓練比較好的情況下理論上無人機可以追蹤任何物體?;谏疃葘W習的多旋翼無人機目標跟蹤通過實際的測試驗證,試驗結果證明了該方法的可行性。