文/趙旭
隨著科學(xué)技術(shù)發(fā)展,無人機(jī)硬件設(shè)備向高集成、高性能方向發(fā)展,特別是旋翼型無人機(jī)具有靈活性高、穩(wěn)定性好、可以垂直起降場地適應(yīng)性較強(qiáng)的優(yōu)點(diǎn),廣泛應(yīng)用于無人機(jī)測繪、無人機(jī)植保、無人機(jī)偵查識別等領(lǐng)域。硬件中集成了CMOS傳感器和處理器可以進(jìn)行跟蹤和識別,這類無人機(jī)在各種領(lǐng)域都有較強(qiáng)的自主控制能力,適應(yīng)不同的工作環(huán)境。然而旋翼無人機(jī)隨著姿態(tài)控制的同時(shí)避免不了出現(xiàn)震動和干擾,圖像容易模糊;識別過程中,被跟蹤物體顏色如果和背景顏色相近容易出現(xiàn)識別失敗導(dǎo)致跟蹤失敗現(xiàn)象;當(dāng)被跟蹤物體被遮擋后沒有相應(yīng)的算法去解決等。本文根據(jù)以上問題,提出一種基于Opencv視覺處理的旋翼無人機(jī)識別規(guī)劃方案,能夠?qū)崿F(xiàn)自主跟蹤控制。
多旋翼無人機(jī)飛行平臺采用飛越TAROT公司680pro碳纖維機(jī)架(TL68P00),軸距695mm,可安裝無刷電機(jī)數(shù)量為六個(gè);無刷電機(jī)采用3510電機(jī),kv值為350;電子調(diào)速器采用3~6S/40A,供電電壓從11.1V~25.2V,最大持續(xù)電流40A;螺旋槳尺寸為13寸碳纖維螺旋槳;動力電池采用格瑞普公司的格氏16000mAh/15C電池。該平臺無負(fù)載重量約為4.2公斤,懸停時(shí)間約為32分鐘。本設(shè)計(jì)中采用的六旋翼無人機(jī)飛行平臺具有高機(jī)動性,具備空間三軸六自由度的飛行能力,對場地要求較小,適合執(zhí)行圖像處理并跟蹤任務(wù)。
首先通過六旋翼無人機(jī)飛行平臺搭載的視覺采集設(shè)備對圖像進(jìn)行采集,將每秒24幀的視頻 通過串行通信傳送給圖像處理器的高速存儲器,先進(jìn)行圖像預(yù)處理,如降低圖像噪點(diǎn)、圖像曝光糾正等等,然后送入以圖像處理器為核心的控制板運(yùn)行移植的Opencv代碼對視頻圖像進(jìn)行處理。識別并跟蹤必須要掌握被跟蹤目標(biāo)的信息,如何快速的從復(fù)雜多樣的環(huán)境中識別目標(biāo)信息是設(shè)計(jì)重點(diǎn),需要論證目標(biāo)信息匹配識別方法,選擇最優(yōu)的方法計(jì)算好路徑送入飛行控制器實(shí)時(shí)控制六旋翼無人機(jī)飛行平臺進(jìn)行移動。
圖像識別和跟蹤是兩個(gè)獨(dú)立的步驟,首先需要從每秒24幀的視頻中提取目標(biāo)特征信息,如目標(biāo)的輪廓、大小、顏色等,難點(diǎn)在于運(yùn)動目標(biāo)的識別。目前有較為流行的三種方法分別是幀差法、背景差分法和光流法。本設(shè)計(jì)主要采用改進(jìn)的光流法,傳統(tǒng)的光流法主要是利用空間運(yùn)動目標(biāo)被測表面的像素點(diǎn)運(yùn)動產(chǎn)生的瞬時(shí)速度場,根據(jù)以上信息可以反映運(yùn)動物體的運(yùn)動趨勢及表面結(jié)構(gòu),這種方法計(jì)算量較大,需要逐幀進(jìn)行計(jì)算,處理時(shí)容易產(chǎn)生延遲,實(shí)時(shí)性較差。根據(jù)傳統(tǒng)的光流法的缺點(diǎn),改進(jìn)的光流法基于Lucas-Kanade光流算法,并不是每幀都要重新分析像素點(diǎn)的變化,是一種由高斯迭代法解線性方程組進(jìn)行迭代的方法,優(yōu)點(diǎn)在于這種算法有較強(qiáng)的魯棒性,但是對于邊緣和同質(zhì)區(qū)域微小的變化信息會被忽略。但是對于無人機(jī)這種在天空飛行的視覺識別平臺而言,這種現(xiàn)象出現(xiàn)幾率較小,所以適合在多旋翼無人機(jī)飛行平臺上實(shí)現(xiàn)。
Opencv的另一個(gè)處理步驟是基于識別的信息進(jìn)行跟蹤控制,本設(shè)計(jì)中采用的Opencv的交互卡爾曼濾波方法,運(yùn)行cvFindContours函數(shù)可以有效的提取目標(biāo)特征,提高識別效率和準(zhǔn)確性。其中常規(guī)的卡爾曼濾波算法是基于線性隨機(jī)差分方程來描述離散時(shí)間過程的狀態(tài)變量,本設(shè)計(jì)中應(yīng)用系統(tǒng)并不是實(shí)時(shí)線性的,所以本設(shè)計(jì)采用交互卡爾曼濾波器,利用梯度下降法可以計(jì)算并融合一組姿態(tài)四元數(shù)(姿態(tài)參數(shù)包含三軸加速度、地磁傳感器數(shù)據(jù),本設(shè)計(jì)中不包含地理信息數(shù)據(jù)),不僅被跟蹤目標(biāo)勻速或有規(guī)律按圓周運(yùn)動能夠被跟蹤,而且當(dāng)被跟蹤目標(biāo)加速度移動也可以穩(wěn)定跟蹤。
考慮到Opencv巨大的運(yùn)算量,一些微控制器運(yùn)行困難,并且存儲器瓶頸較為明顯,所以本設(shè)計(jì)采用三星S3C2440處理器,ARM920T架構(gòu)的核心板進(jìn)行圖像處理和跟蹤控制,配合SDRAM容量為64MB,256MB的Nand Flash和2MB Nor Flash。交叉編譯器使用該ARM9開發(fā)工具和Linux和GCC4.4.3,編譯工具采用Cmakeversion,版本2.8。移植過程較為繁瑣,分為下載并構(gòu)建Opencv、生成makefile、編譯安裝、解決warnning和error和移植運(yùn)行。首先要在https://opencv.org/官網(wǎng)下載Opencv的源代碼,構(gòu)建生成目錄;下載并安裝幾個(gè)必要的庫文件,如zlib、jepg、libpng、ffmpeg等;然后運(yùn)行Cmake工具并配置交叉編譯環(huán)境,如在Cmake-guI選項(xiàng)卡的Target System下面的Operating System填寫arm-linux;在compilers C項(xiàng)目點(diǎn)選交叉編譯器的命令地址(bin文件夾的arm-linuxgcc);在compiles C++項(xiàng)目點(diǎn)選bin文件夾的arm-linux-g++命令地址。然后編譯安裝,此時(shí)會遇到各種報(bào)錯,報(bào)錯信息中可以能看出缺少鏈接參數(shù)的庫文件,一般來講包含pthread、dlfcn、parallel等庫文件,解決方法在CMAKE_EXE_LINKER_FLAGS添加以上的庫即可,修改部分源程序代碼以適應(yīng)該編譯工具鏈,最后編譯移植運(yùn)行。
本文所設(shè)計(jì)的視覺識別規(guī)劃可以有效的識別靜態(tài)和動態(tài)物體,測試飛行環(huán)境為吉林化工學(xué)院雙吉校區(qū)實(shí)訓(xùn)綜合樓410無人飛行器實(shí)驗(yàn)室試飛場及室外試飛。在室外路徑規(guī)劃測試也能順利的進(jìn)行,飛行測試平臺飛行穩(wěn)定。在測試過程中也發(fā)現(xiàn)一些問題,在動態(tài)跟蹤測試時(shí),飛行高度低于2米,容易出現(xiàn)飛行器“跟丟”現(xiàn)象,原因有兩個(gè),首先2.5mm鏡頭的視場FOV太小,僅能達(dá)到垂直75°、水平130°的水平;第二飛行高度過低會造成被跟蹤物體移動過快后丟失目標(biāo)。更換2.1mm廣角鏡頭后又造成圖像畸變嚴(yán)重使得直角循線過程中失敗。后期可以在OPENCV代碼中可以加入圖像畸變校正處理代碼繼續(xù)測試。