本發(fā)明涉及圖像識別和機(jī)器人導(dǎo)航領(lǐng)域,尤其涉及一種基于通用地面磚輪廓線的線識別方法,以及機(jī)器人的定位導(dǎo)航方法。
背景技術(shù):
近年來,在大范圍的機(jī)器人定位導(dǎo)航問題一直是機(jī)器人的研究熱點。但在面積較大的公共場合,例如車站等人流量較大的場合,激光和一般的視覺定位導(dǎo)航失去了有效的作用。經(jīng)實際場地發(fā)現(xiàn),現(xiàn)在大部分的公共場合都使用了規(guī)則統(tǒng)一化的地面磚,如果能識別出每個地面磚之間的縫隙和縫隙交叉處,則可以保證機(jī)器人沿著地面線保持直線行走,并可判斷出當(dāng)前機(jī)器人相對于這塊地面磚的位置,實現(xiàn)局部定位。
提取地面線就要用到直線提取算法,而經(jīng)典的直線提取算法就是霍夫變換(Hough變換)提取。Hough變換由Paul Hough提出,它實現(xiàn)一種從圖像空間到參數(shù)空間的映射關(guān)系,并已廣泛用于直線檢測和定位系統(tǒng)。但是它也有許多缺點,例如耗時久實時性差,容易受到噪聲干擾。由于大理石的地面有著許多細(xì)小的花紋,會造成大量直線提取的噪聲,所以單單Hough變換無法滿足地面縫隙直線的提取。近年來,Rafael Grompone von Gioi等人又提出lsd—一種新的直線提取算法。他們先對圖像進(jìn)行高斯下采樣,再計算每一個點的梯度值以及梯度方向,再對梯度值進(jìn)行偽排序,然后根據(jù)閾值選出要進(jìn)行區(qū)域生長的梯度值,最后計算出當(dāng)前梯度值的矩形。雖然線段分割檢測器(lsd)算法效率上快了很多,并且對誤檢率也有了一定控制,但是還是會檢測出地面花紋的直線,如何從這么多直線中提取出需要的地面線縫隙合十字交叉點是一個值得考慮的問題。
在提取出縫隙和十字交叉點之后,如何結(jié)合機(jī)器人的運動控制,使得機(jī)器人保持直線的行走和確定自身局部位置,也是一個值得考慮的問題。
技術(shù)實現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是提供基于地面磚輪廓線的機(jī)器人定位導(dǎo)航方法,為此,本發(fā)明提供以下技術(shù)方案:
一種基于地面磚輪廓線的機(jī)器人定位導(dǎo)航方法,包括如下步驟:
首先提取地面磚的直線,在提取出至少一條直線后,即可使機(jī)器人沿著直線行走,使機(jī)器人自身保持直線行走;
當(dāng)提取到兩條線后,即能提取出地面磚的十字后,則可算出兩條線的斜率和截距,則可根據(jù)直線相交公式提取出十字交叉點的位置;根據(jù)相機(jī)內(nèi)參和外參可以計算出十字交叉點相對于相機(jī)的實際距離;
再參考相機(jī)和機(jī)器人中心的相對位置,則可以算出當(dāng)前機(jī)器人距離圖像中的十字交叉點的距離,假設(shè)確定機(jī)器人初始位置,并確定一塊地面磚的寬和高,則每次提取出十字交叉點后都可以確定機(jī)器人相對于初始位置的相對距離,形成局部定位。
在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以采用一下進(jìn)一步的技術(shù)方案:
步驟一,基于線段分割檢測器直線提取算法和霍夫變換提取地面磚的直線,并確定直線中的主線:
先對輸入的地面圖像進(jìn)行灰度化處理、圖像銳化處理和多級邊緣檢測邊緣提取處理,再使用線段分割檢測器直線提取算法提取出當(dāng)前畫面的全部直線;將這些直線全部變換到霍夫空間,尋找霍夫空間的最大值,并且判斷這個最大值是否大于一個閾值,如大于,則確定為垂直方向的地面縫隙,并作為主線;
步驟二,基于機(jī)器人的運動跟蹤確定地面線和十字:
在第一次使用全畫面去提取出垂直方向的地面縫隙后,以后每一次小范圍搜索尋找地面縫隙,結(jié)合輪式里程計的和上一時刻垂直方向的地面磚的直線的信息確定當(dāng)前尋找范圍,根據(jù)主線角度相差80度~90度,包括90度的差值去搜索水平縫隙,搜索得到的這一范圍中最大值,且在霍夫空間的值大于一個閾值則作為水平方向的地面縫隙;
步驟三,基于像素直方圖和紋理特征分類剔除錯誤線:
當(dāng)?shù)孛嫔洗嬖跇?biāo)簽或者圖案時,將線周圍的10到20像素范圍圖像作為輸入的地面圖像,提取此地面圖像的局部二值模式特征向量,與沒有標(biāo)簽或者圖案的地面縫隙周圍的局部二值模式特征向量進(jìn)行比較,比較方法使用線性距離作為比較函數(shù),若比較值過大,則說明提取的為錯誤線,剔除該錯誤線。
當(dāng)確定機(jī)器人相對于初始位置的相對距離,形成局部定位后,設(shè)定每次導(dǎo)航覆蓋的區(qū)域,并且全部路徑都是沿著地面線行走,形成連續(xù)的機(jī)器人導(dǎo)航。
則每次提取出十字交叉點后,沒有尋找到十字交叉點時,則用輪式里程計來估計當(dāng)前位置。
由于采用本發(fā)明的技術(shù)方案,可以在大范圍具有規(guī)則地板的公共場合實現(xiàn)厘米級的精確定位,和實現(xiàn)機(jī)器人的自動覆蓋,具體有如下優(yōu)點:可以實現(xiàn)大范圍的定位,在大范圍的定位中實現(xiàn)地板交叉點的閉環(huán),實現(xiàn)無累積誤差;可以在人流量較大地區(qū)進(jìn)行地位,周圍圖像對其無干擾;可以實現(xiàn)有效的大范圍機(jī)器人覆蓋和避障。
附圖說明
圖1為原始圖像;
圖2a為lsd提取結(jié)果;
圖2b為霍夫空間圖像;
圖2c為主線提取結(jié)果;
圖2d為線和十字交叉點提取結(jié)果;
圖3為本發(fā)明整體流程圖;
圖4為基于地面磚輪廓線的柵格地圖導(dǎo)航的流程圖;
圖5為整個方法的框架結(jié)構(gòu)圖。
具體實施方式
為了更好的理解本發(fā)明的技術(shù)方案,以下結(jié)合附圖作進(jìn)一步描述。
首先提取地面磚的直線,在提取出至少一條直線后,即可使機(jī)器人沿著直線行走,使機(jī)器人自身保持直線行走;
當(dāng)提取到兩條線后,即能提取出地面磚的十字后,則可算出兩條線的斜率和截距,則可根據(jù)直線相交公式提取出十字交叉點的位置;根據(jù)相機(jī)內(nèi)參和外參可以計算出十字交叉點相對于相機(jī)的實際距離;
則可以算出當(dāng)前機(jī)器人距離圖像中的十字交叉點的距離,相機(jī)像素坐標(biāo)轉(zhuǎn)換為物理坐標(biāo)具體公式如下:
x=(u/fx+uo)*z
y=(v/fy+vo)*z
z=(RT)(3)
x和y為實際物理坐標(biāo),(u,v)為像素在圖像上的坐標(biāo),uo和vo為物理坐標(biāo)軸和像素坐標(biāo)軸的偏移。Z為相機(jī)實際高度,這里通過RT矩陣來計算,R為旋轉(zhuǎn)矩陣,T為平移向量,z為兩者相乘的第三位。
假設(shè)確定機(jī)器人初始位置,并確定一塊地面磚的寬和高,則每次提取出十字交叉點后都可以確定機(jī)器人相對于初始位置的相對距離,形成局部定位;當(dāng)沒有尋找到十字交叉點時,則用輪式里程計來估計當(dāng)前位置。
圖1及圖2a-2d展示了提取地面線的例子。其中,圖1所示的原圖像,圖2d為提取出的地面線和十字交叉點。
步驟一,基于線段分割檢測器(lsd)提取算法和霍夫變換(Hough變換)提取直線。先用lsd算法初步提取直線,即先使用2*2模板進(jìn)行梯度計算,i(x,y)處的梯度計算公式如下:
i(x,y)指圖像(x,y)處的像素值,x為圖像橫坐標(biāo),y為圖像縱坐標(biāo),gx(x,y)指水平方向的梯度值,gy(x,y)指豎直方向的梯度值。
再進(jìn)行梯度的排序和梯度的閾值篩選,則最后留下的梯度像素處進(jìn)行區(qū)域增長,最后分割的區(qū)域?qū)?yīng)一個矩形,矩形的中心計算方式如下:
G(j)為像素j的梯度幅值,下標(biāo)j被用于遍歷矩形區(qū)域內(nèi)所有的像素,Cx和Cy為矩形中心的坐標(biāo)。
圖2a展示了在圖1中利用lsd提取出的直線,可見提取的直線是十分雜亂的,許多地面花紋都被提取出來。為了提取出最關(guān)鍵的地面磚縫隙,將全部的直線都變換到霍夫(Hough)空間,霍夫變換直線公式如下:
r=xcosθ+ysinθ。
r為直線距離圖像中心的極徑,θ為直線的極角。x為點橫坐標(biāo),y為縱坐標(biāo)。
則可以轉(zhuǎn)換到極坐標(biāo)下的r和θ。每一根直線可以得到一個r和θ值,建立一個θ為橫坐標(biāo)r為縱坐標(biāo)的圖,每個像素值代表其統(tǒng)計r和θ值的個數(shù)。再對這個圖進(jìn)行高斯模糊,使得附近的一些值可以聚合在一起,如圖2(b)所示。再遍歷出其中的最大值,并判斷其最大值是否大于閾值1,再將對應(yīng)的直線在原圖中顯示出來,即可提取出豎直中心方向地面磚輪廓線,這里稱為主線。如圖2(c)所示。
步驟二,基于運動跟蹤確定地面線和十字。根據(jù)當(dāng)前輪式里程計得到的機(jī)器人運行信息可以限制豎直方向的地面線的搜索范圍,則每次搜索主線的范圍為上次檢測到的主線的r'和θ'值的10誤差范圍,搜索范圍的r'和θ'值的計算公式如下:
r'=r+krvy/dt
θ'=θ+kθvθ/dt
r為前一幀的極徑,θ為前一幀的極角,vy和vθ為里程計得到當(dāng)時橫向和轉(zhuǎn)向速度,kr和kθ為一個轉(zhuǎn)換系數(shù),是定值。
在這個范圍之內(nèi)再用步驟一搜索最大值,則可得到主線。在得到主線后,在主線θ值相差80以上的Hough空間搜索水平方向的縫隙線,并判斷其統(tǒng)計值是否大于閾值2。當(dāng)找到這兩根線后,則可以計算出十字交叉點的像素位置。
步驟三,基于像素直方圖和紋理特征分類剔除錯誤線。將得到的兩根線或一根線的周圍20個像素范圍的圖像提出轉(zhuǎn)化為圖像,例如線豎直長度為160,則其圖像為160*20。將此其轉(zhuǎn)換到Hsv空間,并那其中的色調(diào)空間作直方圖統(tǒng)計,再提取周圍的局部二值模式特征向量(lbp)紋理特征向量,將顏色特征向量和紋理特征向量結(jié)合為特征向量,將每一幀的特征向量進(jìn)行比較。使用相關(guān)性比較,線性比較公式如下:
其中
H1指當(dāng)前特征向量,H2指模板特征向量,N指特征向量的維數(shù)。d(H1,H2)為兩者線性距離比較的結(jié)果。
若相差過大,說明此時檢測到的是地面上的一些標(biāo)簽或貼紙,則剔除之。
當(dāng)確定機(jī)器人相對于初始位置的相對距離,形成局部定位后,基于地面磚輪廓線的在線柵格地圖的建立與導(dǎo)航。設(shè)定每次覆蓋的區(qū)域,并且全部路徑都是沿著地面線行走。首先,沿著地面線在設(shè)定的區(qū)域邊框進(jìn)行大致的范圍覆蓋,即確定這塊區(qū)域的覆蓋邊緣,并建立了以地面磚為柵格大小的邊緣。再在區(qū)域邊緣里進(jìn)行弓形繞圈覆蓋方法,并同時建立這塊區(qū)域的柵格地圖,并將已覆蓋的柵格設(shè)為已走柵格。并用激光獲取當(dāng)前的障礙,當(dāng)遇到障礙時,對這個障礙進(jìn)行一個繞圈,以獲得障礙的大小,并將有障礙的柵格設(shè)為不可通行區(qū)域,當(dāng)繞完障礙后,再繼續(xù)弓形覆蓋。當(dāng)從區(qū)域初始位置繞行后到區(qū)域?qū)α⒔墙Y(jié)束點,判斷整個區(qū)域的可通行柵格是否都已填滿,若填滿,則將結(jié)束點作為下一個區(qū)域的初始點進(jìn)行覆蓋。否則,繼續(xù)填充這塊區(qū)域。
上述實施例是對本發(fā)明的說明,不是對本發(fā)明的限定,任何對本發(fā)明簡單變換后的方案均屬于本發(fā)明的保護(hù)范圍。