吳文秀 關志全 汪磊 鄭軍斌 陽璞瓊



摘?要:無人機廣泛應用于軍事、農業、交通運輸等方面,具有巨大的應用潛力和廣闊前景。受電池能量密度和能量利用效率等因素的制約,無人機機載電池沒有足夠的續航能力,發揮不了最大優勢。為提高無人機的飛行續航能力,采用無線充電基站對無人機進行充電。為達到無線充電的最大充電效率,需要實現無人機精確降落。為了實現無人機的定點降落,提高定點飛行能力,提出了一種GPS和視覺識別相結合定點降落方法。首先通過pixhawk飛控模塊配合M8N模塊來進行GPS定位,使無人機到達充電基站附近,然后通過再啟用視覺輔助(openmv)實現較精準的降落。實驗結果表明,無人機能夠準確識別充電基站從而實現定點降落。
關鍵詞: 無人機;視覺識別;openmv;定點降落
文章編號: 2095-2163(2021)01-0041-05 中圖分類號:V279;V249 文獻標志碼:A
【Abstract】Unmanned Aerial Vehicle (UAV) is widely used in military, agriculture, transportation and other fields, and has great application potential and broad prospects. Restricted by factors such as battery energy density and energy utilization efficiency, the onboard battery of UAV does not have enough endurance, which can't give full play to its advantages. In order to improve the flight endurance of UAV, wireless charging base station is used to charge UAV. In order to achieve the maximum charging efficiency of wireless charging, it is necessary to realize the accurate landing of UAV. In order to realize the fixed-point landing of UAV and improve its fixed-point flight capability, a fixed-point landing method combining GPS and visual recognition is proposed. At first, the pixhawk flight control module is matched with M8N module to carry out GPS positioning, so that the UAV can reach the vicinity of the charging base station, and then, the visual aid (openmv) is enabled again to achieve a more accurate landing. The experimental results show that the UAV can accurately identify the charging base station and realize fixed-point landing.
【Key words】UAV; visual recognition; openmv; fixed point landing
0 引?言
目前,各類科技創新有效地推動了現代無人機技術的發展,無人機廣泛用于氣象探測、災害監測、農藥噴灑、地質勘測、地圖測繪、交通管制等諸多領域[1-5]。近些年來,無人機技術取得了長足進步,且應用領域正在不斷拓展,對其各項技術指標也隨即提出了更高的要求。傳統的無人機技術主要依靠慣性導航系統(Inertial Navigation System, INS)和全球定位系統(Global Position System, GPS)進行導航,然而,導航過程中的慣性器件具有累積誤差,對初始值過于敏感,而GPS并不總是可獲取的,并且即使是可獲取,精度也無法滿足無人機導航要求[6-7]。隨著現代技術的發展,計算機視覺導航開始逐步走上無人機技術領域的舞臺[8-11]。計算機視覺技術利用搭載的攝像頭獲取外界環境的數字圖像信息,通過計算機算法分析解算獲取圖像的有效信息[12-14],比如形狀、尺度等,無人機根據這些有效信息進行相應的操作到達目的地。張義楨等人[15]提出了一種基于二維碼圖像識別的無人機定位方法。AprilTag標志的樣式與二維碼比較相似但是卻沒有那么復雜,可以減少處理器所需要的計算量,滿足一些實時性的要求。
本文主要研究了無人機的定點降落相關技術,系統的主要流程是先通過GPS使無人機降落到充電基站附近,再通過視覺裝置openmv識別充電基站上的AprilTag圖標,實現定點降落。研究了openmv與飛控pixhawk之間的通信以及openmv識別AprilTag圖標的相關代碼編寫和測試。
1 系統總體設計
以實現無人機的定點降落為目標進行系統設計,系統整體框圖如圖1所示。
為實現無人機的定點降落控制過程,先通過GPS導航至指定地點附近(無人機充電基站位置),依靠氣壓計和加速度計控制好高度(GPS數據和高度數據由當前選擇降落的無線充電基站提供),再啟用視覺輔助實現較精準的降落。系統主要涉及到飛控和視覺模塊兩大塊,飛控和視覺處理模塊均搭載在同一架無人機平臺上。電腦端作為主機端,負責接收無人機數據和傳達指令給無人機[16-18]。
電腦控制臺與無人機間,無人機搭載的飛控模塊和視覺模塊間都需要進行通信。電腦控制臺主要與pixhawk飛控模塊進行信息交流,而pixhawk與openmv(視覺模塊)之間也可直接通信。由此看出,pixhawk是整個自動降落系統中比較核心的部分,并且將全面控制著無人機的運動,處理來自電腦端和openmv的數據,其中電腦控制臺與pixhawk間的通信不再贅述。
2 視覺定位原理
視覺定位采用開源視覺模塊openmv。這部分的主要作用為:當無人機通過GPS導航至充電基站附近時(x,y,z方向距離在1 m左右),啟用攝像頭,在當前視野中搜尋目標點。
基站上需要安裝帶有一定信息量的標識,幫助視覺模塊判斷當前自己相對于目標點的位置。需要多個自由度的信息,分別指的是x,y,z軸的位移和yaw(或者說z軸)旋轉角度(以無人機為參考點)。
暫定的對齊步驟為(以下步驟均以無人機為原點建立坐標系,見圖2,且各步驟的定位信息來源均依靠視覺模塊,不再依靠GPS):
(1)旋轉。機頭到與充電基站頭部平行(以無人機機頭與機尾所在直線位于x軸,如果基站的對準未做特殊要求的話,0°和180°均可,默認對齊到0°)的狀態。
(2)高度不變,水平平移。此時通過測得的x,y軸距離值,控制好無人機的飛行姿態后,再飛行到充電基站的正上方。
(3)控制無人機平穩下落至目標點上,下落過程中,不斷進行距離及旋轉角度的校正[19-20]。
采用AprilTag標志標識充電基站,AprilTag是一個第三方的視覺基準庫而且在機器人位置識別等領域得到了廣泛使用。一些AprilTag標志如圖3所示。使用AprilTag進行位置計算時可以分為2步:獲取tag和計算tag。其中,獲取tag基本方法是去尋找場景中可能是屬于tag系列的各種圖樣,這種圖形樣式也有利于辨別黑白邊緣特征。將tag標識的外觀信息提取完畢,還需要相機的焦距和圖像分辨率大小信息。相機的焦距由使用的openmv攝像頭參數決定,圖像分辨率則由具體編程和實際測試確定[21-22]。
3 軟件設計
3.1 系統總體軟件流程
無人機定點自動降落過程中,首先通過GPS定位降落到目標點附近,打開openmv攝像頭,系統獲取到AprilTag標志時,無人機進入自穩模式。自穩模式下,無人機的油門及角度控制沒有被鎖定,控制很自由。對獲取到的AprilTag標志進行分析,通過pixhawk調整無人機姿態完成降落。整個系統軟件流程圖如圖4所示。
pixhawk代碼的主要編寫位置在“自穩模式”代碼處,基于該模式,進行與openmv聯動的代碼編寫。
3.2 視覺處理模塊軟件流程
視覺處理方面使用openmv模塊,加上AprilTag標識來實現無人機的位置計算。openmv部分代碼的主要功能為計算當前相對于目標點的位置,并通過串口按照自訂協議傳輸相關數據[23]。openmv視覺處理流程如圖5所示。
4 軟件程序代碼設計
視覺處理主要代碼參見如下:
sensor. reset()
sensor. set_pixformat(sensor. RGB565)
sensor. set_framesize(sensor. QQVGA)
sensor. skip_frames(time=2 000)
sensor.set_auto_gain(False)#關閉自動增益
sensor.set_auto_whitebal(False)#關閉白平衡
clock=time.clock()
uart=UART(3,115200)#定義串口3變量
uart.init(115200,bits=8,parity=None,stop=1)#串口配置定義
這里設置好了openmv的一些基本參數。sensor.set_pixformat用于設置像素模式,代碼里設置為彩色圖像模式RGB565,每個像素16bit。sensor.set_framesize用于設置圖像的分辨率,這里考慮到了stm32的性能和需要的幀率要求,將其值設為sensor.QQVGA,即openmv里定義的160×120分辨率。set_auto_gain(False)和set_auto_whitebal(False)用于關閉openmv的自動增益和白平衡的功能,因為這2個功能對AprilTag的處理有影響。時鐘和串口的初始化代碼依次展開如下:
f_x = (2.8 / 3.984) * 160 # 默認值
f_y = (2.8 / 2.952) * 120 # 默認值
c_x = 160 * 0.5 # 默認值(image.w * 0.5)
c_y = 120 * 0.5 # 默認值(image.h * 0.5)
img = sensor.snapshot() #截取一幀圖像
for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y):?# 默認為TAG36H11
代碼中,find_apriltags()函數可獲取攝像頭相對于當前目標的位置和角度信息,然后將處理得到的值存儲到tag中。函數的傳入值共有4個,即:fx,fy,cx和cy,其他傳入值沒寫出則保持默認(默認選擇AprilTag的TAG36H11家族)。在設置上面提到的4個值時,需根據一些硬件配置和軟件配置進行選擇。圖中的2.8代表的是所用攝像頭的焦距信息。而3.984和2.952兩個值則是所使用的感光元件尺寸(本課題使用的openmv型號為openmv3,感光元件為ov7725)。160與120即是所設置的分辨率了。0.5為默認值,無需變動。sensor.snapshot()函數為立即截取當前攝像頭圖像。每截取一張圖像,即開始尋找AprilTag標識,初步計算出相對位置和角度。位置及角度的轉換代碼詳見如下。
p_x[0]=int(tag.x_translation()*k1/100%10)#獲取x軸位移的個位(單位m)
p_x[1]=int(tag.x_translation()*k1/10%10)#獲取x軸位移的0.1位(單位m)
p_x[2]=int(tag.x_translation()*k1/1%10)#獲取x軸位移的0.01位(單位m)
p_y[0]=int(tag.y_translation()*k1/100%10)#獲取y軸位移的個位(單位m)
p_y[1]=int(tag.y_translation()*k1/10%10)#獲取y軸位移的0.1位(單位m)
p_y[2]=int(tag.y_translation()*k1/1%10)#獲取y軸位移的0.01位(單位m)
p_z[0]=int(tag.z_translation()*k1/100%10)#獲取z軸位移的個位(單位m)
p_z[1]=int(tag.z_translation()*k1/10%10)#獲取z軸位移的0.1位(單位m)
p_z[2]=int(tag.z_translation()*k1/1%10)#獲取z軸位移的0.01位(單位m)
r_z[0]=int(degrees(tag.z_rotation())/100%10)#獲取z軸角度的百位(單位(°))
r_z[1]=int(degrees(tag.z_rotation())/10%10)#獲取z軸角度的十位(單位(°))
r_z[2]=int(degrees(tag.z_rotation())/1%10)#獲取z軸角度的個位(單位(°))
通過實際測試,可以得到一個AprilTag測出的距離與實際距離的比例值k1,然后在運算時考慮進去。角度無需使用比例系數,但需要進行弧度與角度的轉換(degrees()函數)。位置和角度將按照協議規定進行處理。之后即可調用相應的串口發送函數將信息傳遞到pixhawk端。
研究中給出了實現openmv定位精度測試及視覺定位的關鍵代碼,具體如下。
while(True):
clock.tick()
img=sensor.snapshot()
for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y):#默認為TAG36H11
img.draw_rectangle(tag.rect(),color=(255,0,0))#畫矩形
img.draw_cross(tag.cx(),tag.cy(),color=(0,255,0))#在矩形中心畫十字
print_args=(tag.x_translation(),tag.y_translation(),tag.z_translation(),
degrees(tag.x_rotation()),degrees(tag.y_rotation()),degrees(tag.z_rotation()))
print("Tx: %f, Ty %f, Tz %f, Rx %f, Ry %f, Rz %f" % print_args)
print(clock. fps())#打印幀率
上面用于測試的一小段代碼,主要作用是將AprilTag函數獲取的信息通過串口直接打印在電腦端的openmv IDE界面上,同時也會將運行幀率打印出來。本次測試使用電腦屏幕顯示AprilTag標記,方便隨時調整標記的大小。測試時要注意,不要將屏幕的亮度調太高,過高的亮度會使攝像頭觀察到的AprilTag標記被白光掩蓋,將會嚴重影響AprilTag的識別效果(眩光干擾)。
5 實驗分析
為了驗證系統有效性,進行了相關的實驗,距離AprilTag標記15 cm的實驗結果如圖6所示。
測試數據見表1(忽略正負,位移單位為m,角度單位為(°)。15 cm時測定的比例系數6.17作為測量時的距離校正。表格的數據為openmv測得的數值)。
經過測量,當ApriTag的標記大小為12 cm邊長的正方形時,最近的識別距離為0.15 m(垂直距離),系統獲取到的視覺目標清晰有效。最遠也符合論述的范圍。誤差均在容忍范圍之內。
openmv搭載到無人機上時,要注意使用自穩云臺,確保無人機在調控姿態時攝像頭始終是垂直向下的。openmv的供電直接由pixhawk的5 V供電提供。接下來可連接好openmv與pixhawk的串口通信接口。
6 結束語
以無人機為研究對象,研究了一種無人機定點降落的方式,較傳統的降落方式,采用了機器視覺openmv和新的地面識別圖標,該標識包含6個自由度信息,為無人機的位置判斷提供比GPS更加準確的參考。通過對openmv視覺識別系統的探討開發,為無人機定點降落的研究開拓了一些新的思路。
參考文獻
[1]FENG Quanlong, LIU Jiantao, GONG Jianhua. UAV remote sensing for urban vegetation mapping using Random Forest and texture analysis[J]. Remote Sensing,2015,7(1):1074-1094.
[2]祁圣君,井立,王亞龍. 無人機系統及發展趨勢綜述[J]. 飛航導彈,2018(4):17-21.
[3]湯明文,戴禮豪,林朝輝,等. 無人機在電力線路巡視中的應用[J]. 中國電力,2013,46(3):35-38.
[4]李德仁,李明. 無人機遙感系統的研究進展與應用前景[J]. 武漢大學學報(信息科學版),2014,39(5):505-513,540.
[5]范承嘯,韓俊,熊志軍,等. 無人機遙感技術現狀與應用[J].測繪科學,2009,34(5):214-215.
[6]聶博文,馬宏緒,王劍,等. 微小型四旋翼飛行器的研究現狀與關鍵技術[J]. 電光與控制,2007,14(6):113-117.
[7]趙文一. 無人機視覺輔助自主降落系統研究[D]. 哈爾濱:哈爾濱工業大學,2018.
[8]吳顯亮,石宗英,鐘宜生. 無人機視覺導航研究綜述[J]. 系統仿真學報,2010,22(S1):62-65.
[9]鐘木財,何炳蔚,曾金源,等. 基于單目視覺的無人機自主跟蹤降落研究[J]. 機械制造與自動化,2019,48(4):149-152,187.
[10]王旭峰,董新民,孔星煒,等. 視覺輔助的無人機自主空中加油建模與仿真[J].飛行力學,2013,31(4):331-335.
[11]范保杰,朱琳琳,崔書平,等. 旋翼無人機視覺跟蹤系統[J].紅外與激光工程,2011,40(1):149-152.
[12]王海羅. 基于視覺感知的無人機目標識別與跟蹤技術研究[D]. 北京:北京理工大學,2015.
[13]蘇贇,王挺,姚辰,等. 基于合作目標的無人機目標跟蹤方法[J]. 機器人,2019,41(4):425-432.
[14]韓鵬,耿增顯,劉宏,等. 無人機視覺識別與移動追蹤技術綜述[J].飛航導彈,2018(10):24-28.
[15]張義楨,向婕,唐立軍. 基于二維碼圖像識別的無人機定位方法研究[J]. 計算機應用與軟件,2019,36(9):117-121.
[16]徐貴力,倪立學,程月華. 基于合作目標和視覺的無人飛行器全天候自動著陸導引關鍵技術[J].航空學報,2008(2):437-442.
[17]李永健. 基于機器視覺的四旋冀無人機定點著陸系統設計與實現[D]. 廣州:華南理工大學,2015.
[18]金偉,葛宏立,杜華強,等. 無人機遙感發展與應用概況[J]. 遙感信息,2009(1):88-92.
[19]索文凱,胡文剛,張炎,等. 無人機自主降落過程視覺定位方法研究[J]. 激光技術,2019,43(5):101-106.
[20]吳賽飛. 基于視覺信息引導的艦載無人機精確著艦技術研究[D]. 南京:南京航空航天大學,2016.
[21]崔紅霞,林宗堅,孫杰. 無人機遙感監測系統研究[J]. 測繪通報,2005(5):11-14.
[22]WATANABE Y, FABIANI P. Optimal guidance design for UAV visual target tracking in an urban environment[J]. IFAC Proceedings Volumes,2010,43(15):69-74.
[23]GUPTA K, EMRAN B J, NAJJARAN H. Vision-based pose estimation of a multi-rotor unmanned aerial vehicle[J]. International Journal of Intelligent Unmanned Systems,2019,7(3):120-132.