蒲興成,譚少峰,張毅
(1.重慶郵電大學(xué) 數(shù)理學(xué)院,重慶 400065; 2. 重慶郵電大學(xué) 自動化學(xué)院,重慶 400065)
移動機(jī)器人在完全未知的環(huán)境中利用自身傳感器獲得周圍環(huán)境信息進(jìn)行實(shí)時(shí)定位和地圖創(chuàng)建(simultaneous localization and mapping, SLAM)是移動機(jī)器人研究領(lǐng)域的一個(gè)熱點(diǎn)問題[1]。所謂SLAM,是指機(jī)器人在一個(gè)未知的環(huán)境中,從一個(gè)未知的位置開始,通過對環(huán)境的觀測,遞增地構(gòu)建環(huán)境地圖,并同時(shí)運(yùn)用環(huán)境地圖實(shí)現(xiàn)機(jī)器人定位的一個(gè)過程[2]。
近年來,基于單目視覺的SLAM問題獲得了非常廣泛的研究?,F(xiàn)有的研究表明,在簡單的結(jié)構(gòu)化環(huán)境以及地圖信息已知(具有人工路標(biāo))的環(huán)境中進(jìn)行視覺導(dǎo)航已經(jīng)有了很大進(jìn)展,但在完全未知的環(huán)境中進(jìn)行定位與導(dǎo)航還存在諸多問題。造成這一現(xiàn)象的根本原因在于如何在未知環(huán)境中獲取自然特征。所謂自然特征,是指環(huán)境中已有的、非人工設(shè)置的、能夠用以標(biāo)識不同環(huán)境場景的特征對象[3]。通過提取一些具備局部不變性的角點(diǎn)作為環(huán)境的自然特征,該方法選取的自然路標(biāo)有非常好的穩(wěn)定性,因此角點(diǎn)檢測也是機(jī)器人導(dǎo)航的熱點(diǎn)問題之一[4],也出現(xiàn)了一些較好的角點(diǎn)檢測方法。FAST(features from accelerated segment test)是一種運(yùn)算簡單直觀的角點(diǎn)檢測方法,相關(guān)測試表明,F(xiàn)AST在計(jì)算速度上優(yōu)于SIFT、SURF和Harris等角點(diǎn)檢測方法[5]。為此,筆者一方面采用改進(jìn)的FAST算法[6]來提取角點(diǎn),剔除了大部分邊緣點(diǎn)和局部非極大值點(diǎn);另一方面,針對誤匹配剔除,采用結(jié)合擴(kuò)展卡爾曼濾波(extended Kalman filter, EKF)的一點(diǎn)RANSAC算法[7]。RANSAC算法是一種應(yīng)用廣泛的誤匹配剔除算法,但該算法隨著匹配點(diǎn)個(gè)數(shù)增加,算法迭代次數(shù)會迅速上升,降低了算法的計(jì)算速度。采用一點(diǎn)RANSAC算法可以充分利用EKF預(yù)測階段得到的先驗(yàn)信息,在確保計(jì)算精度的同時(shí),有效降低了算法迭代次數(shù)。在整個(gè)實(shí)驗(yàn)過程中,機(jī)器人通過自身攝像頭,采用改進(jìn)的FAST角點(diǎn)提取算法采集周圍環(huán)境信息,并結(jié)合EKF的一點(diǎn)RANSAC算法[7]對誤匹配點(diǎn)進(jìn)一步剔除,獲得魯棒性更強(qiáng)的特征點(diǎn),從而構(gòu)建環(huán)境的地圖信息,最后用得到的匹配點(diǎn)進(jìn)行三維環(huán)境重建和機(jī)器人定位。
FAST角點(diǎn)檢測算子是Rosten和Drummond在SUSAN角點(diǎn)檢測方法基礎(chǔ)上利用機(jī)器學(xué)習(xí)原理提出的,其運(yùn)算速度不僅大大高于SIFT、SURF算子,更優(yōu)于以速度見長的Harris算子。FAST角點(diǎn)檢測的原理是檢測待檢測點(diǎn)與周圍點(diǎn)的灰度是否相近,如圖1(c)所示,即對待檢測特征點(diǎn)p,最多只需檢測16個(gè)候選特征點(diǎn),大大減輕了計(jì)算量。圖中每個(gè)方格均代表一個(gè)像素,位于中心的p點(diǎn)為待檢測特征點(diǎn),周圍16個(gè)方格為檢測過程中需檢測的像素點(diǎn)。角點(diǎn)的判斷過程為:設(shè)Ip為待檢測點(diǎn)p的灰度值,Ip→x為圓周上像素點(diǎn)的灰度值,x∈{1,2,…,16},對半徑為3的圓上的像素進(jìn)行分割測試, 判定條件如式(1):
|Ip→x-Ip|≥t
(1)
如果滿足判定條件的像素點(diǎn)數(shù)滿足設(shè)定數(shù)量n,則判定p點(diǎn)為角點(diǎn),其中,t為設(shè)定的閾值,n一般為12或9,分別對應(yīng)FAST-12與FAST-9檢測算法。
在實(shí)際操作中,為了獲得更快的結(jié)果,還可以采用一種加速辦法。該方法首先測試候選點(diǎn)周圍每隔90°角的4個(gè)點(diǎn),即圖1(c)中位于水平與垂直位置的1、5、9和13四點(diǎn),如果至少有3個(gè)和候選點(diǎn)的灰度值差足夠大,則繼續(xù)計(jì)算其他12個(gè)點(diǎn);否則,不用再計(jì)算其他點(diǎn),直接認(rèn)為該候選點(diǎn)不是特征點(diǎn)。
圖1 FAST角點(diǎn)提取流程Fig.1 Process of FAST corner extraction
經(jīng)過上述步驟后,會初步提取到一些角點(diǎn),但這些點(diǎn)中存在較多邊緣點(diǎn)和局部非極大值點(diǎn),采用文獻(xiàn)中的方法[6],可以剔除邊緣點(diǎn),如式(2)所示:
(2)
式中:q為圓周上任意一點(diǎn),Iq+1與Iq-1為關(guān)于q對稱的2個(gè)點(diǎn),從圓周任一點(diǎn)開始計(jì)算,若有大于10個(gè)點(diǎn)滿足式(2),則認(rèn)為該點(diǎn)屬于邊緣點(diǎn),予以剔除。
在剔除邊緣點(diǎn)后,還要剔除局部非極大值點(diǎn)。通過計(jì)算角點(diǎn)候選點(diǎn)周圍很小鄰域內(nèi)各像素點(diǎn)的拉普拉斯值,進(jìn)一步剔除一些局部非極大值點(diǎn)。此處局部極大值采用拉普拉斯極值計(jì)算公式為
(3)
在Intel Pentium處理器、2 G內(nèi)存的硬件配置下,從視頻中任取一幀640像素×480像素的圖像利用FAST角點(diǎn)檢測算子進(jìn)行檢測,實(shí)驗(yàn)證明,同一幀圖像在FAST算法改進(jìn)前后的提取結(jié)果有較大改變,如圖1所示,改進(jìn)前圖1(a)一幀圖像中的特征點(diǎn)個(gè)數(shù)為4 704,改進(jìn)后圖1(d)特征點(diǎn)個(gè)數(shù)為1 526,這是因?yàn)楦倪M(jìn)后的算法濾掉了部分偽角點(diǎn),留下了角點(diǎn)特征更加明顯的特征點(diǎn)。而且提取時(shí)間上也有了提高,改進(jìn)前的FAST角點(diǎn)提取時(shí)間為33 ms,改進(jìn)后為16 ms。
通過FAST角點(diǎn)檢測算子可以對視頻圖像中的每一幀圖像進(jìn)行角點(diǎn)檢測,為了建立環(huán)境中三維特征點(diǎn)地圖,必須對相鄰2幀圖像進(jìn)行特征匹配。筆者采用相關(guān)歸一化匹配算法,其相關(guān)歸一化函數(shù)為
ρ(f0,f1)=
(4)
用相關(guān)歸一化算法對相鄰2幀圖像進(jìn)行特征匹配之后,會產(chǎn)生很多誤匹配點(diǎn),為了提高匹配精度,要對匹配點(diǎn)進(jìn)行過濾。標(biāo)準(zhǔn)RANSAC算法是一種應(yīng)用廣泛的誤匹配剔除算法,但該算法隨著匹配點(diǎn)個(gè)數(shù)增加,算法迭代次數(shù)會迅速上升,降低了算法的計(jì)算速度。筆者結(jié)合擴(kuò)展卡爾曼濾波的一點(diǎn)RANSAC算法,在確保計(jì)算精度的同時(shí),有效降低了算法迭代次數(shù),使機(jī)器人定位與導(dǎo)航的時(shí)效性得到了保證[7]。
卡爾曼濾波是一種高效率的遞歸濾波器,它能從一組有限的、包含噪聲的、對物體位置的觀察序列預(yù)測出物體位置的坐標(biāo)和速度,并能夠?qū)崿F(xiàn)對系統(tǒng)狀態(tài)的最優(yōu)估計(jì),使系統(tǒng)的真實(shí)值與觀測值之間的均方差最小[8]。它是對一個(gè)線性隨機(jī)系統(tǒng)的狀態(tài)進(jìn)行估計(jì),但在實(shí)際應(yīng)用中,大部分系統(tǒng)都是非線性的,處理這些系統(tǒng)時(shí),需采用EKF。其算法原理如下。
1)預(yù)測:
(5)
式中:uk表示第k步系統(tǒng)的輸入,F(xiàn)k表示在第k步fk關(guān)于狀態(tài)向量xk|k-1的雅可比矩陣,Qk表示動態(tài)模型的零均值高斯噪聲的協(xié)方差,Gk表示該噪聲關(guān)于狀態(tài)向量xk|k-1的雅可比矩陣。
2)濾波:數(shù)據(jù)更新是用傳統(tǒng)的擴(kuò)展卡爾曼濾波方程執(zhí)行的。
Pk|k=(I-KkHk)Pk|k-1
(6)
RANSAC算法是通過一組包含異常數(shù)據(jù)的樣本數(shù)據(jù)點(diǎn)集計(jì)算出數(shù)據(jù)的數(shù)學(xué)模型,最終得到有效樣本數(shù)據(jù)的算法[9]。一般情況下,需要考慮的參數(shù)有構(gòu)建模型所需的最少數(shù)據(jù)個(gè)數(shù)、算法迭代次數(shù)k、模型驗(yàn)證條件t、判斷模型是否合理的數(shù)據(jù)點(diǎn)個(gè)數(shù)d。算法流程為:首先,用隨機(jī)選擇的數(shù)據(jù)擬合一個(gè)假設(shè)模型,其次,用得到的模型去測試所有其他數(shù)據(jù),如果有足夠多的點(diǎn)被歸類為該假設(shè)模型的內(nèi)點(diǎn),則認(rèn)為該模型是合理的,并用得到的內(nèi)點(diǎn)重新估計(jì)模型;上述過程被重復(fù)執(zhí)行一定的次數(shù),產(chǎn)生的模型要么越來越接近真實(shí)模型,要么因?yàn)閮?nèi)點(diǎn)數(shù)目過少而被舍棄。
用w來表示每次迭代時(shí)從數(shù)據(jù)集中選取一個(gè)點(diǎn)并且該點(diǎn)是正確數(shù)據(jù)點(diǎn)的概率,那么,每次迭代選取的m個(gè)數(shù)據(jù)均為正確數(shù)據(jù)的概率為wm,則1-wm表示m個(gè)數(shù)據(jù)中至少有一點(diǎn)是異常數(shù)據(jù)的概率,而包含這些異常點(diǎn)則可能產(chǎn)生不合理的模型。因此,n次迭代過程中,每次選取的m個(gè)數(shù)據(jù)均包含至少一個(gè)錯(cuò)誤數(shù)據(jù)的概率必然等于1-p,也就是
1-p=(1-wm)n
通常情況下,p事先給定,如果w也給定,n會隨著m的增加不斷增加,那么算法的計(jì)算復(fù)雜度就會相應(yīng)地增加。m增大,RANSAC算法的迭代次數(shù)n將會迅速地上升。對于這里采用的一點(diǎn)RANSAC,攝像機(jī)運(yùn)動的額外信息來自EKF概率分布函數(shù)。舉一個(gè)簡單的例子,如果w=0.5,概率p是0.99,n=1,則隨機(jī)假設(shè)的數(shù)據(jù)將會從145(m=5,沒有先驗(yàn)信息)降到7(m=1,一點(diǎn)RANSAC采用先驗(yàn)信息)。
一點(diǎn)RANSAC與普通RANSAC相比,前者采用先驗(yàn)信息,降低了數(shù)據(jù)集的大小,減少了RANSAC迭代次數(shù),從而降低了計(jì)算成本。一點(diǎn)RANSAC充分利用了EKF預(yù)測階段得到的地圖狀態(tài)預(yù)測值的先驗(yàn)信息,選出匹配效果最好,滿足全局模型的地圖特征,從性能和計(jì)算復(fù)雜度方面對傳統(tǒng)的RANSAC算法做了改進(jìn),提高了SLAM系統(tǒng)的魯棒性,其主要步驟如下:
1)產(chǎn)生穩(wěn)定的內(nèi)點(diǎn)集zli_inliers,并用zli_inliers進(jìn)行EKF部分更新。
假設(shè)經(jīng)過匹配所得的數(shù)據(jù)點(diǎn)集為zi,用zli_inliers(low-innovation inliers)來表示匹配性最好的數(shù)據(jù)點(diǎn)集,用這些點(diǎn)集來擬合一個(gè)數(shù)據(jù)模型。其余的點(diǎn)用zhi_inliers(high-innovation inliers)來表示。
在這舉一個(gè)簡單的例子來說明“補(bǔ)救”不穩(wěn)定點(diǎn)的重要性。因?yàn)椋h(yuǎn)距離點(diǎn)可用來估計(jì)相機(jī)角度變換,而近距離點(diǎn)用來估計(jì)相機(jī)尺度變換。在RANSAC假設(shè)中,一個(gè)遠(yuǎn)距離點(diǎn)可以產(chǎn)生一個(gè)對角度變換較敏感的點(diǎn),而對尺度變換不是很精確。在這種情況下,其他遠(yuǎn)距離點(diǎn)也會支持這個(gè)擬合模型。但是由于尺度變化的精度不高,附近的點(diǎn)有可能表現(xiàn)出較高的不確定性,即使他們是內(nèi)點(diǎn)。所以,在確定了擬合的模型之后,還是要從不穩(wěn)定的點(diǎn)集中“補(bǔ)救”一些內(nèi)點(diǎn)。在僅采用可靠內(nèi)點(diǎn)進(jìn)行局部狀態(tài)和協(xié)方差更新后,這些不穩(wěn)定的內(nèi)點(diǎn)會被挽救。下面公式是用zli_inliers進(jìn)行EKF部分更新的過程。
Pk|k=(I-KkHk)Pk|k-1
2)對不穩(wěn)定內(nèi)點(diǎn)進(jìn)行補(bǔ)救,并用zhi_inliers進(jìn)行EKF部分更新。
用zli_inliers進(jìn)行EKF部分更新后,在EKF預(yù)測階段的大部分相關(guān)誤差得到了糾正,協(xié)方差也大大降低,這些都可以用來補(bǔ)救不穩(wěn)定的內(nèi)點(diǎn),這是由于數(shù)據(jù)關(guān)聯(lián)性有所減弱,沒有必要計(jì)算點(diǎn)集的一致性。對“補(bǔ)救點(diǎn)”的部分EKF更新過程為
機(jī)器人基于FAST角點(diǎn)重建運(yùn)行環(huán)境的三維地圖,根據(jù)攝像機(jī)內(nèi)外參模型與標(biāo)定理論[10],設(shè)焦距參數(shù)為fi,內(nèi)參矩陣表示如下:
式中:(cx,cy)是視頻序列中第i幀圖像的中心。每個(gè)特征點(diǎn)代表了一個(gè)三維點(diǎn)Xj=[X1X2X31],在每幀圖像上的投影表達(dá)式為:uij=PiXj=Ki(Ri|ti)Xj,這里uij代表了Xj在第i幀圖像中的齊次位置,Pi為射影矩陣。根據(jù)文獻(xiàn)中的方法[11],即可重建出歐式空間下的所有特征點(diǎn)的三維坐標(biāo)。
移動機(jī)器人要實(shí)現(xiàn)定位,需要計(jì)算當(dāng)前視圖中特征點(diǎn)與三維地圖中特征點(diǎn)的幾何關(guān)系。用u、v來表示像素點(diǎn)在圖像中的像素坐標(biāo),dx、dy表示每個(gè)像素點(diǎn)在世界坐標(biāo)系上的物理尺寸,圖像像素坐標(biāo)與世界坐標(biāo)系之間的變換關(guān)系如下:
(9)
由式9可知,只需知道自然特征點(diǎn)坐標(biāo)、當(dāng)前視圖中同名點(diǎn)的坐標(biāo)和對應(yīng)的攝像機(jī)內(nèi)參,便可求解當(dāng)前視圖的攝像機(jī)外參,也即機(jī)器人的位置。又因同名關(guān)系需要匹配才可以確定,所以需要尋找最近鄰自然特征才能保證定位精度。
在建立了環(huán)境信息的三維地圖信息之后,移動機(jī)器人就可通過特征點(diǎn)匹配得到自身在環(huán)境中的位置信息設(shè)定路徑實(shí)現(xiàn)機(jī)器人的導(dǎo)航。
機(jī)器人在室內(nèi)實(shí)驗(yàn)過程中,一邊控制機(jī)器人移動一邊利用攝像頭采集視頻,把視頻中的每一幀圖像采集出來,共3 788幀(30幀/s,共2 min 15 s)。從所有幀中選取一些關(guān)鍵幀,可以作為匹配模板。在Intel Pentium處理器、2 GB內(nèi)存的硬件配置下,計(jì)算機(jī)對每個(gè)關(guān)鍵幀進(jìn)行角點(diǎn)提取、誤匹配剔除并完成地圖更新的處理時(shí)間為300 ms,把機(jī)器人移動速度v設(shè)定為10 cm/s、轉(zhuǎn)彎角速度w設(shè)定為0.52 rad/s(30°/s)可保證較高的魯棒性。
圖2(a)為圖像的角點(diǎn)匹配情況,其中粗線圓圈表示匹配性最好的點(diǎn),細(xì)線圓圈表示匹配失敗的點(diǎn);圖2(b)所示為重建的SLAM地圖,曲線表示機(jī)器人運(yùn)動軌跡。從圖2中可清晰地看出機(jī)器人在行進(jìn)過程中的90°轉(zhuǎn)角;圖3所示為畫面中存在大范圍移動目標(biāo)時(shí),會對特征點(diǎn)匹配造成一定影響,從而對地圖構(gòu)建造成一定誤差。表1為不同時(shí)刻前后各50幀軌跡與里程計(jì)軌跡的誤差對比。
圖2 第1 472幀圖像的角點(diǎn)匹配與地圖構(gòu)建Fig.2 The corner matching and map building of 1 472th frame
圖3 第2 093幀圖像的角點(diǎn)匹配與地圖構(gòu)建Fig.3 The corner matching and map building of 2 093th frame
圖4 機(jī)器人室內(nèi)軌跡圖Fig.4 The indoor path of robot
幀數(shù)范圍平均誤差/cm最大誤差/cm平均誤差/%475-5741.13.50.51 422-1 5211.75.10.92 043-2 1428.216.44.13 689-3 7882.05.71.0
由表1可見,機(jī)器人在直線運(yùn)動中精度較高,平均誤差在1%以內(nèi)。在2 043~2 142幀之間,攝像頭畫面中存在大范圍的移動目標(biāo),對特征點(diǎn)匹配造成了一定的影響,但誤差也只有4%左右,證明系統(tǒng)的魯棒性較高。該方法同樣適合室外環(huán)境的定位與導(dǎo)問航,在室外采集了1 min 24 s的視頻,共2 529幀圖像。下圖5分別為第1 700幀和第2 500幀時(shí)的角點(diǎn)匹配與地圖構(gòu)建。
(a) 機(jī)器人運(yùn)動過程中特征匹配情況
(b) 機(jī)器人運(yùn)行軌跡
(c) 機(jī)器人運(yùn)動過程中特征匹配情況
(d) 機(jī)器人運(yùn)行軌跡圖5 機(jī)器人室外運(yùn)動的角點(diǎn)匹配與地圖構(gòu)建Fig.5 The outdoor corner matching and map building of robot
圖6為SLAM重建圖與機(jī)器人里程計(jì)軌跡的對比,兩者的平均誤差為11.3 cm,平均誤差百分比為0.7%。
圖6 機(jī)器人室外軌跡圖Fig.6 The outdoor path of robot
針對移動機(jī)器人在單目視覺導(dǎo)航方面實(shí)時(shí)性與魯棒性較差的問題,提出一種基于改進(jìn)的FAST角點(diǎn)提取算法與一點(diǎn)RANSAC剔除誤匹配算法相結(jié)合來實(shí)現(xiàn)移動機(jī)器定位與導(dǎo)航的新方法。在角點(diǎn)提取方面,剔除了部分邊緣點(diǎn)和局部非極大值點(diǎn),提高了角點(diǎn)提取的速度與質(zhì)量;在角點(diǎn)匹配與誤匹配剔除方面,充分利用了濾波階段得到的先驗(yàn)信息,在保證算法魯棒性的同時(shí)有效降低了算法迭代次數(shù),提高了算法的實(shí)時(shí)性。實(shí)驗(yàn)結(jié)果表明,該方法能夠?qū)崟r(shí)高效地重建出機(jī)器人的運(yùn)行軌跡,實(shí)現(xiàn)機(jī)器人的定位與導(dǎo)航;在周圍環(huán)境發(fā)生變化時(shí),能夠保持較高的匹配精度,魯棒性較高;該方法同樣可以適用于室外環(huán)境。后續(xù)工作將在如何進(jìn)一步提高其實(shí)時(shí)性做深入研究。
參考文獻(xiàn):
[1]王耀南, 余洪山. 未知環(huán)境下移動機(jī)器人同步地圖創(chuàng)建與定位研究進(jìn)展[J].控制理論與應(yīng)用, 2008(1): 57-65.
WANG Yaonan, YU Hongshan. Mobile robots simultaneous localization and mapping under unknown environments[J]. Control Theory and Applications, 2008(1): 57-65..
[2]陳衛(wèi)東, 張飛. 移動機(jī)器人的同步自定位與地圖創(chuàng)建研究[J]. 控制理論與應(yīng)用, 2005(3): 455-460.
CHEN Weidong, ZHANG Fei. Study on mobile robots simultaneous localization and mapping[J]. Control Theory and Applications, 2005(3): 455-460.
[3]ALCANTARILLA P F, SANG M O, MARIOTTINI G L, et al. Learning visibility of landmarks for vision-based localization[OL/EB]. [2013-10-21]. https://smartech.gatech.edu/jspui/bitstream/1853/38323/1/Alcantarilla10icra2.pdf.
[4]梁艷菊, 李慶, 陳大鵬, 等. 一種快速魯棒的LOG-FAST角點(diǎn)算法[J]. 計(jì)算機(jī)科學(xué), 2012(6): 251-254.
LIANG Yanju, LI Qing, CHEN Dapeng, et al. A fast robust LOG-FAST algorithm[J]. Computer Science, 2012(6): 251-254.
[5]ROSTEN E, DRUMMOND T. Machine learning for high-speed corner detection[C]//Computer Vision-ECCV 2006. [S.l.], 2006: 430-443.
[6]燕鵬, 安如. 基于 FAST 改進(jìn)的快速角點(diǎn)探測算法[J]. 紅外與激光工程, 2009( 6): 1104-1108.
YAN Peng, AN Ru. An improved FAST corner detector algorithm[J]. Infrared and Laser Engineering, 2009( 6): 1104-1108.
[7]STRASDA H, MONTIEL J M M, DAVISON A J. Real-time monocular SLAM: why filter[C]//Proceedings of the IEEE International Conference on Robotics and Automation. [S.l.], 2010: 2657-2664.
[8]CIVERA J. Real-time EKF-based structure from motion[D]. System Engineering and Computer Science of University Press, 2003: 21-23.
[9]CIVERA J, GRASA O G, DAVISON A J, et al. 1-point RANSAC for EKF-based structure from motion[C]//IEEE Intelligent Robots and Systems, [S.l.], 2009: 3498-3504.
[10]ZHANG Z, DERICHE R, FAUGERAS O, et al. A robust technique for matching two uncalibrated images through the recovery of the unknown epipolar geometry[J]. Artificial Intelligence, 1995, 78(1/2): 87-119.
[11]POLLEFEYS M, Van GOOL L, VERGAUWEN M, et al. Visual modeling with a hand-held camera[J]. International Journal of Computer Vision, 2004, 59(3): 207-232.