李源哲 茅旭初
(上海交通大學(xué)電子信息與電氣工程學(xué)院,上海,200240)
基于嵌入式linux的無人機雙目視覺系統(tǒng)
李源哲 茅旭初
(上海交通大學(xué)電子信息與電氣工程學(xué)院,上海,200240)
無人機技術(shù)持續(xù)發(fā)展,立體視覺技術(shù)由于其強大的環(huán)境感知能力,被廣泛應(yīng)用于無人機導(dǎo)航的障礙物檢測中。針對無人機障礙檢測的特定場合,設(shè)計了基于嵌入式Linux的雙目視覺測距系統(tǒng),系統(tǒng)具有體積小、重量輕、精度較高的特點,可用于無人機障礙物檢測。
雙目立體視覺;嵌入式;無人機
近年來,無人機在民用領(lǐng)域逐漸發(fā)展開來。導(dǎo)航技術(shù)是無人機技術(shù)中相當(dāng)關(guān)鍵的部分,也是無人機技術(shù)的難點[1]。大型無人機的飛行高度較高,很少受到周圍物體的阻礙,一般使用GPS+ΙMU的組合導(dǎo)航來完成。對于多旋翼無人機,尤其在城市、山地等復(fù)雜地形中低空工作的多旋翼無人機,由于建筑、地形的阻擋,GPS信號較弱,搜不到足夠的衛(wèi)星數(shù)目,導(dǎo)致導(dǎo)航精度不理想。并且,對于在低空甚至室內(nèi)飛行的飛行器,僅僅知道位置信息往往不夠,飛行器隨時會遇到墻壁、樹木等低空障礙物,這時,就需要能夠感知外部環(huán)境的導(dǎo)航系統(tǒng)。目前主要的導(dǎo)航方式分為兩大類:
(1)基于非視覺傳感器的導(dǎo)航
非視覺傳感器,主要是超聲波、激光等能夠探測障礙物距離的傳感器。超聲波傳感器是通過計算超聲波發(fā)射和接收的時間差來計算障礙物的距離,因其簡單、輕便,在多款飛行器上使用。但超聲波的探測角較小,只有某一特定方向的障礙物才會被檢測出來;且超聲波對被測物體的要求較高,若物體無法有效反射超聲波,如樹葉、海綿等,則無法被探測到。因此超聲波傳感器無法全面感知周圍的環(huán)境。 激光雷達,通過向不同方向發(fā)射激光束來探測物體距離,具有精度高、視場寬、分辨率高的特點。但是激光雷達成本高、重量大,不適合載荷較小的飛行器。
(2)基于視覺傳感器的導(dǎo)航
視覺傳感器,一般指攝像頭,具有質(zhì)量輕、成本低、信息量大的特點,十分適合用在小型無人機的導(dǎo)航。隨著圖像處理技術(shù)的蓬勃發(fā)展,對圖像處理、目標(biāo)識別、特征提取、3D視覺等技術(shù)的研究愈加深入,視覺導(dǎo)航的技術(shù)也將更加成熟。在單目視覺中,主要通過光流法來檢測障礙物,這種方式依賴于攝像機與目標(biāo)的相對運動,若飛行器處在靜止或者低速狀態(tài),則效果不明顯。多目視覺能夠直接計算出空間中特征點的三維坐標(biāo),與光流法相比,對飛行器運動的依賴較小,結(jié)果更加精確。
通過上述比較可以看出,立體視覺技術(shù)能夠很好地感知位置場景,幫助無人飛行器進行低空的障礙物檢測,輔助飛行器進行運動控制,擁有巨大的應(yīng)用前景。
本文提出了一種在嵌入式linux系統(tǒng)上實現(xiàn)雙目視覺檢測的方法。系統(tǒng)基于ARM cortex-A9 架構(gòu)的單板電腦,讀取兩個USB攝像頭的信息,經(jīng)過3D解算得到周圍環(huán)境特征點的3維坐標(biāo),可用于無人機導(dǎo)航。
2.1 攝像機成像模型
圖1是攝像機的針孔成像模型。針孔成像模型由光心、光軸和成像平面組成。光心為一凸透鏡,物點P的反射光經(jīng)過光心后,投射到成像平面為一個倒立的像p。其中f是相機的焦距,Z是相機和實際物體之間的距離,X是實際物體的長度,x是實際物體在成像平面上的像[2]。在圖1中,根據(jù)相似三角形原理,可以得到:
圖1 攝像機針孔成像模型
2.2 成像模型中各坐標(biāo)系之間的關(guān)系
攝像機成像模型中包含四個坐標(biāo)系:世界坐標(biāo)系、攝像機坐標(biāo)系、圖像物理坐標(biāo)系和像素坐標(biāo)系。物點(實際空間中的點)到像點(投影到成像器件上的點)之間的關(guān)系可以通過坐標(biāo)變換來表示。
2.2.1 從世界坐標(biāo)系到攝像機坐標(biāo)系的坐標(biāo)變換
攝像機被放置在三維空間中,在這個三維環(huán)境中建立的坐標(biāo)系是世界坐標(biāo)系,如圖2中的(Ow-XwYwZw)。以攝像機的光心O為原點,光軸為Zc軸,建立的坐標(biāo)系為攝像機坐標(biāo)系,如圖2中的(O-XcYcZc)。
圖2 成像模型中的各個坐標(biāo)系
攝像機坐標(biāo)系與世界坐標(biāo)系的關(guān)系可利用旋轉(zhuǎn)矩陣R和一個平移矩陣t表示,變換過程如下:
其齊次坐標(biāo)可表示為:
2.2.2 從攝像機坐標(biāo)系到圖像物理坐標(biāo)系的坐標(biāo)變換
圖像物理坐標(biāo)系是建立在成像平面上的直角坐標(biāo)系。原點O1是光軸與成像平面的交點,x軸與Xc平行,y軸與Yc平行。根據(jù)三角形相似的性質(zhì),攝像機坐標(biāo)系到圖像物理坐標(biāo)系的變換如下:
用齊次坐標(biāo)與矩陣形式可以將上式表示為:
2.2.3 從圖像物理坐標(biāo)系到圖像像素坐標(biāo)系的坐標(biāo)變換
拍攝到的照片以矩陣的形式保存,每個矩陣元素都是一個像素。與之對應(yīng),圖像像素坐標(biāo)系是定義在圖像上的平面直角坐標(biāo)系,其單位是像素。圖2中,O0-uv是圖像像素坐標(biāo)系。原點O0位于圖像的左上角,u和v分別與x軸和y軸平行,坐標(biāo)(u,v)表示位于第u行v列的像素點。
由于圖像物理坐標(biāo)系的原點O1和圖像像素坐標(biāo)系的原點O0未必重合,假設(shè)O1在圖像像素坐標(biāo)系中的坐標(biāo)為(u0,v0)。設(shè)每個像素在圖像物理坐標(biāo)系x軸和y軸方向上的物理尺寸分別為k和l,則:
用齊次坐標(biāo)與矩陣形式可以將上式表示為:
綜合上述坐標(biāo)變換,可以將世界坐標(biāo)系中的物點P(Xw,Yw,Zw)變換到成像平面上的投影點Pu(u,v):
2.3 立體視覺成像模型
雙目立體視覺成像模型如圖3所示,兩個攝像頭并排放置。Ol和Or分別是左右攝像機的光心,兩個光心間的距離為T,P為真實空間中的一點,它在左右兩個攝像機的成像平面上的成像分別是pl(xl,yl)和pr(xr,yr)。在這個簡化的模型中,深度與兩張圖的不一致性成反比,其中,不一致性定義為d=xl-xr。根據(jù)相似三角形原理,深度為:
圖3 雙目視覺成像模型
2.4 立體視覺工作流程
立體視覺系統(tǒng)的工作主要分為五個步驟:圖像獲取、攝像機建模、特征提取、立體匹配和三維深度確定[1]。
(1)圖像獲取
采集兩個并排放置的USB攝像頭的圖像。
(2)攝像機建模
攝像機建模的工作是為了確定攝像機的內(nèi)外參數(shù),將復(fù)雜的模型轉(zhuǎn)換為簡單的基礎(chǔ)模型,并確定空間中的點與像素點的對應(yīng)關(guān)系。攝像機標(biāo)定可以確定攝像機的參數(shù)。
(3)特征提取
圖像特征是把圖像中的像素點或者像素點的集合抽象表達的過程。圖像中包含大量的信息,特征提取的作用就是從大量信息中提取出感興趣的部分,以便后續(xù)的分析。
(4)立體匹配
立體匹配是在兩張圖像的特征點中,找到分別對應(yīng)相同實際物體的兩個特征點,即找到了實際物體在兩張圖片中的像素值。
(5)三維坐標(biāo)確定
立體匹配確定實際空間中的點在兩張圖片中的圖像坐標(biāo),根據(jù)多重視覺幾何算法,可以解算出空間點的三維坐標(biāo)。
攝像機標(biāo)定包括單目攝像機標(biāo)定和立體攝像機標(biāo)定。單目攝像機標(biāo)定是為了確定攝像機模型中各個坐標(biāo)系之間的關(guān)系,從而確定攝像機的內(nèi)外參數(shù)[1]。立體攝像機標(biāo)定是為了確定兩個攝像機坐標(biāo)系之間的剛體變換關(guān)系,即一個攝像機坐標(biāo)系相對于另一個攝像機坐標(biāo)系的旋轉(zhuǎn)和平移[3]。
3.1 內(nèi)外部參數(shù)
引入兩個不同的焦距fx和fy。fx=f/k,是焦距與像素點寬度的比值,fy=f/l,是焦距與像素點長度的比值,fx和fy的單位是像素。fx、fy、u0、v0構(gòu)成攝像頭的內(nèi)部參數(shù)。兩攝像頭之間的旋轉(zhuǎn)矩陣R和平移向量T構(gòu)成了攝像機的外部參數(shù)。除上述參數(shù)外,由于工藝的原因,攝像機透鏡可能存在畸變。因此,需要進行標(biāo)定消除畸變。
對于某些透鏡,光線在遠(yuǎn)離透鏡中心的地方比靠近中心的地方更加彎曲,這種畸變稱為徑向畸變。徑向畸變在成像中心處畸變?yōu)?,越靠近邊緣畸變越顯著。可以用r=0周圍的泰勒級數(shù)展開來定量描述徑向畸變:
式中,(x,y)是畸變點在圖像中的原始坐標(biāo),(xcorrected,ycorrected)是校正后的新坐標(biāo),k1、k2、k3是校正參數(shù)。
另一種畸變是切向畸變。切向畸變是由于透鏡與成像芯片不平行造成的。切向畸變可描述為:
其中,p1、p2是校正參數(shù)。
3.2 標(biāo)定過程與結(jié)果
本文使用標(biāo)定板進行標(biāo)定,標(biāo)定板長30 cm,寬20 cm,由直徑16 mm、等距離間隔4 cm的6×5圓點組成。從不同距離、不同角度拍攝標(biāo)定板,得到圖4所示的標(biāo)定照片,一般左右兩個攝像頭各拍攝十幾張照片。標(biāo)定后的各參數(shù)(以右攝像頭為例)見表1。
圖4 標(biāo)定照片
表1 標(biāo)定后的參數(shù)值
4.1 SURF特征匹配
本文使用SURF(Speeded Up Robust Features)算法提取特征點。SURF算法能夠檢測圖片中的角點,對于每個角點,SURF得到一個特征向量,該向量描繪了特征點周圍的強度樣式。兩個特征點越相似,它們的特征向量也越靠近[4-5]。若兩幅圖像中的某特征點特征向量靠近,則有理由認(rèn)為它們對應(yīng)空間中的同一點。
數(shù)學(xué)上,SURF算法對每個像素計算Hessian矩陣,Hessian矩陣如下:
Hessian矩陣的行列式即曲率的強度,定義角點為具有較高局部曲率的圖像點。為了使特征點具備尺度無關(guān)性,在進行Hessian矩陣構(gòu)造前,對圖片高斯濾波:
其中,σ是濾波器的高斯函數(shù)的方差,它定義濾波核的大小。
通過高斯濾波和Hessian矩陣,可以得到局部極大值,經(jīng)過插值,得到亞像素精度的特征點以及對應(yīng)的尺度值[6]。
編寫程序,對兩張照片進行SURF特征點匹配。結(jié)果如圖5所示,其中,圓圈標(biāo)記識別出的特征點,直線連接兩圖相匹配的特征點。
圖5 SURF匹配效果
4.2 RANSAC算法去除錯誤匹配
從圖5可見,大部分特征點都匹配正確,仍有少數(shù)點錯誤匹配。本文借助Ransac算法降低錯誤匹配的概率。
Ransac(隨機抽樣一致)算法可以從一組包含“局外點”的觀測數(shù)據(jù)集中,通過迭代方式估計數(shù)學(xué)模型的參數(shù)。本文通過簡單的例子解釋Ransac,在圖6中,白色點為局外點。為了找到點集的擬合直線,每次選取兩個點,確定一條直線。定義一個距離閾值(在圖中由虛線標(biāo)出),落在虛線間的點構(gòu)成一個一致集。每次選取不同的兩個點,并確定它們的一致集,認(rèn)為一致集最大的直線為擬合直線。在一致集外的點則被當(dāng)做誤差剔除。
圖6 Ransac算法的簡單應(yīng)用
在立體視覺成像模型中,pl和pr之間存在如下關(guān)系:
該方程體現(xiàn)了兩個對應(yīng)點之間的聯(lián)系,被稱作極性約束。8個對應(yīng)點可以確定F矩陣。因此,在所有特征點中,每次選取8對特征點,由此確定F。給定距離閾值△,選取滿足以下關(guān)系的匹配點進入一致集:
一致集中匹配點最多的F即為選定的F,一致集中的匹配點則為所有選定的匹配點。匹配結(jié)果如圖7所示。
圖7 Ransac去除錯誤匹配后的效果
本文使用線性三角方法計算三維坐標(biāo)。由射影幾何的性質(zhì),空間中的點X與左右兩個攝像頭的像素點x、x′具有以下關(guān)系:
其中,P和P′分別為左右兩個攝像頭的投影矩陣,該矩陣可以通過標(biāo)定得到。由式(18)可以得到方程:
將其展開:
其中,piT是P矩陣的第i行。令:
解線性方程AX=0,即得到三維坐標(biāo)X。
本文使用radxa rock卡片電腦作為處理核心。radxa rock長10 cm,寬8 cm,搭載四核ARM Cortex-A9處理器,2G RAM,最高主頻可達1.6 GHz,在節(jié)能狀態(tài)下主頻可低到324 MHz。板上安裝ubuntu操作系統(tǒng)作為編程環(huán)境。用USB攝像頭作為圖像采集設(shè)備,系統(tǒng)借助V4L2采集攝像頭的視頻流(是V4L的升級版本),V4L全稱是Video for Linux,是在linux內(nèi)核中關(guān)于視頻設(shè)備的APΙ接口,涉及開關(guān)視頻設(shè)備、采集并處理視頻圖像信息。通過調(diào)用V4L2 APΙ中的函數(shù),可以實現(xiàn)視頻的采集。視頻采集主要分為4個步驟: 打開視頻設(shè)備,設(shè)置視頻設(shè)備屬性及采集方式,視頻數(shù)據(jù)處理,關(guān)閉視頻設(shè)備。流程如圖8所示。系統(tǒng)通過V4L2采集左右兩個攝像頭的圖像、提取特征點并對特征點進行匹配。最后,綜合標(biāo)定的參數(shù),計算得到特征點的三維坐標(biāo)。
圖8 V4L2圖像采集流程
為了測試系統(tǒng)的精度,制作了一個測量板,上面刻有10 cm長的標(biāo)尺。系統(tǒng)分別計算標(biāo)尺兩個端點的三維坐標(biāo),求取它們的距離,得到標(biāo)尺長度的測量值,并與真實值比較。本文中分別將標(biāo)尺放在與攝像頭相距50 cm、60 cm……150 cm的位置,測量結(jié)果在表2中列出。
表2 系統(tǒng)精度測量信息
對系統(tǒng)精度的測試中,在0.5~1.5 m的距離上,測量10 cm的標(biāo)尺,誤差在5 mm左右,相對誤差在5%左右,其中,這5%的誤差大部分是系統(tǒng)誤差,經(jīng)過更加仔細(xì)的定標(biāo)之后,可以將誤差降低至2%左右。
雙目立體視覺系統(tǒng)體積小、質(zhì)量輕,經(jīng)地面測試,精度滿足需求,可以用于無人機導(dǎo)航。接下來的工作將進一步把系統(tǒng)安裝到無人機上,輔助無人機導(dǎo)航。
[1]羅桂娥.雙目立體視覺深度感知與三維重建若干問題研究[D].中南大學(xué),2012.
[2]BRADSKΙ G,KAEHLER A.Learning openCV:computer vision with the openCV library[M].O'Reilly Media,Ιnc.,2008.
[3]王建華,馮帆,梁偉,等.雙目立體視覺測量系統(tǒng)的設(shè)計與實現(xiàn)[J].艦船電子工程,2012,32(4):107-109.
[4]Laganière R.openCV 2 computer vision application programming cookbook:over 50 recipes to master this library of programming functions for real-time computer vision[M].Packt Publishing Ltd,2011.
[5]HARTLEY R,ZΙSSERMAN A.Multiple view geometry in computer vision[M].Cambridge university press,2003.
[6]王平,韓燮,韓焱,等.基于雙目視覺技術(shù)的物體深度信息的提取[J].科學(xué)技術(shù)與工程,2014 (2):56-61.