<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > 基于計算機視覺的移動機器人導航

          基于計算機視覺的移動機器人導航

          作者:趙瑜,種蘭祥,張萬緒 時間:2008-11-21 來源:現(xiàn)代電子技術(shù) 收藏

            現(xiàn)代機器人技術(shù)在人工智能、計算機技術(shù)和傳感器技術(shù)的推動下獲得了飛速發(fā)展,其中移動機器人因具有可移動性和自治能力,能適應環(huán)境變化被廣泛用于物流、探測、服務等領(lǐng)域。移動機器人的核心技術(shù)之一是導航技術(shù),特別是自主導航技術(shù)。由于環(huán)境的動態(tài)變化和不可預測性、機器人感知手段的不完備等原因,使得移動機器人的導航難度較大,一直是人們研究的重點。

          本文引用地址:http://www.ex-cimer.com/article/89715.htm

            目前常用的一種導航方式是“跟隨路徑導引”,即機器人通過對能感知到某些外部的連續(xù)路徑參考信息做出相應的反應來導航。如在機器人運動路徑上敷設金屬導線或磁釘,通過檢測金屬導線或磁釘?shù)奶卣餍畔泶_定機器人的位置。從導航的角度看,這種方法的優(yōu)點是可靠性較高,但功能單一,如不能在行進的同時對目標進行識別、避障,對環(huán)境的適應能力較弱、靈活性較差、維護成本較高,因此限制了其在移動機器人中的應用。

            隨著計算機技術(shù)、數(shù)字圖像處理技術(shù)及圖像處理硬件的發(fā)展,基于的導航方式在機器人導航中得到廣泛關(guān)注。在實際應用中,只需要在路面上畫出路徑引導線,如同在公共交通道路上畫的引導線一樣,機器人就可以通過視覺進行自主導航。相對于敷設金屬導線、磁釘?shù)确椒?,這種方法增強了系統(tǒng)的靈活性,降低了維護成本。視覺信息中包含有大量的數(shù)據(jù),要從中提取有用的信息,需要復雜的算法及耗時的計算。如何保證視覺導航系統(tǒng)在正確理解路徑信息的前提下仍具有較好的實時性和魯棒性,是該方法要解決的核心問題。

          1 視覺導航系統(tǒng)構(gòu)成及工作過程

            基于的移動機器人導航實驗系統(tǒng)的硬件部分由計算機、USB接口的攝像頭、LEGO實驗用機器人組成。軟件分為2部分,即圖像處理和機器人運動控制?;谝曈X導航的原始輸入圖像是連續(xù)的數(shù)字視頻圖像。系統(tǒng)工作時,圖像預處理模塊首先對原始的輸入圖像進行縮小、邊緣檢測、二值化等預處理。其次利用哈夫變換提取出對機器人有用的路徑信息。最后,運動控制模塊根據(jù)識別的路徑信息,調(diào)用直行或轉(zhuǎn)彎功能模塊使機器人做相應的移動。整個工作流程如圖1所示。

          1.1 視覺導航的圖像預處理

            目前圖像采集設備都具有較高的空間和灰度分辨率,精度高、數(shù)據(jù)量大。

            實驗中的原始輸入圖像是USB攝像頭采集320×240像素的RGB格式圖像,最大幀數(shù)30幀/s。

            圖像預處理的效果對后續(xù)哈夫變換檢測路徑信息的速度和準確性有很大影響。對整幅圖像進行抽取時計算量過大、也無必要,故先將彩色圖像轉(zhuǎn)換為灰度圖像,再將圖像的大小依據(jù)最近鄰域插值法原理進行縮小以節(jié)約后續(xù)計算時間。在實驗室環(huán)境下,經(jīng)測試,將原始圖像縮小到30%仍然能滿足需要,處理時間縮短了72%。

           

            由于圖像傳感器從時間和空間上對介質(zhì)(光)采樣,其圖像質(zhì)量對現(xiàn)場的非均勻光場和其他干擾因素非常敏感,二值化時,不同光照條件下閾值的確定是一件比較困難的工作。目前常用的閾值選取方法有雙峰法、迭代法和最大類間方差法。從執(zhí)行時問和處理效果2方面考慮,對3種方法比較后(結(jié)果如表1所示),在優(yōu)先考慮實時性的前提下,選用雙峰法來求取閾值。在實驗室條件下,路徑環(huán)境相對理想,黑色引導線與背景反差較大。在灰度直方圖上,引導線和背景都形成高峰,對這2個峰值及谷底的求取也可簡化,使用灰度級的最大值和最小值代替2個峰值,那么這2個峰值的中間值即可作為谷底用作圖像的閾值。

           

            地面的反光和陰影,以及不均勻的光照都會導致同一幅圖像的二值化效果表現(xiàn)出很大差別,圖2和圖3是對同一幅圖像在不同光照條件下二值化的結(jié)果,可以看到在光照條件2下會出現(xiàn)大量的黑點,這些黑點將嚴重影響提取路徑信息的速度并且可能導致錯誤的路徑信息。然而,相對于灰度、顏色特征,邊緣特征受光照影響較小。為此,對縮小后的圖像先進行引導線的邊緣檢測,邊緣檢測后圖像中引導線邊緣像素灰度的對比度得到增強,通過實驗確定合適的閾值,然后對圖像進行二值化以提取路徑信息。

           

          1.2 引導線角度檢測

            采用哈夫變換檢測路徑引導線的角度。為了簡單而又不失一般性,引導線分1條路徑和2條相交的路徑。當2條直線的夾角等于90°時即認為是兩條相互垂直的路徑。直線的哈夫變換利用如下直線的極坐標方程:

           

            式(1)中,(x,y)表示圖像空間xy中所有共線的點即圖像中的黑點;θ表示直線法線和x軸的夾角,取值范圍為0~180°;λ表示直線到原點的距離。

          2 視覺導航的機器人運動控制

            機器人運動控制部分分為直行控制和轉(zhuǎn)彎控制2部分。

          2.1 直行控制

            如果哈夫變換的檢測結(jié)果表明是一條直線即機器人視野中只有1條主引導線時,則運行直行模塊。實際中有2種情況需要考慮:一是機器人的初始位置不一定正對引導線,二是在機器人的機電配置中,左右輪子的馬達運動不會絕對精確和對稱。這些會使機器人在運動中出現(xiàn)側(cè)偏??刹捎孟率龇椒ㄟM行直行控制:根據(jù)引導線在圖像平面坐標中的位置來判斷機器人的偏向。當引導線位于圖像平面的左半邊,說明攝像頭的光軸與引導線不垂直且相對于引導線右偏,則命令機器人左轉(zhuǎn);當引導線位于圖像平面的右半邊,說明攝像頭的光軸與引導線不垂直且相對于引導線左偏,則命令機器人右轉(zhuǎn);當引導線在圖像平面兩邊均存在時,則命令機器人不偏轉(zhuǎn)繼續(xù)直行。機器人在前進過程中,根據(jù)圖像平面中引導線位置不斷調(diào)整方位,以一定的轉(zhuǎn)動角度(轉(zhuǎn)動角度盡量小,這樣機器人的擺動幅度就會小)在直線路徑上行走。

          2.2 轉(zhuǎn)彎控制

            如果哈夫變換的檢測結(jié)果表明是兩條相互垂直的直線,即機器人的視野中出現(xiàn)轉(zhuǎn)彎路口,則開始運行轉(zhuǎn)彎模塊。

            機器人需要在距轉(zhuǎn)角合適的距離處開始運行轉(zhuǎn)彎模塊,以保證機器人視野中始終具有引導線。如圖4所示,AB段表示攝像頭的縱向視野范圍,C點為轉(zhuǎn)角點,機器人需要知道自身在實際二維平面中相對于轉(zhuǎn)角點C的距離即BC段距離。由圖像信息獲得現(xiàn)實世界坐標系中的參數(shù),即所謂三維重建,這需要對基于的移動機器人導航系統(tǒng)進行攝像機標定。

            鑒于移動機器人識別的引導線在地面上這一限制條件,并且攝像頭固定在機器人上,可以選擇機器人坐標系為世界坐標系,即世界坐標系與機器人同步移動。坐標原點為標定模板的左下角標定點的中心,Zw軸垂直地面,XwYw平面即為地面。在該坐標系下地面目標的坐標可以表示為(Xw,Yw,0),標定模板由直徑5 mm、相距10 mm共72個圓點構(gòu)成,如圖5所示。

           

            移動機器人的攝像機標定問題,如果忽略因物面與攝像機光軸不垂直造成的非線性,則可歸結(jié)為在二維世界坐標系中求變換矩陣M。

           

            世界坐標系(Xw,Yw,Zw),Zw軸垂直地面,XwYw平面即為地面,在該坐標系下地面目標的坐標P可以表示為(Xw,Yw,0)。式(2)中Xi,Yj(其中i=1,2,…,n,j=1,2,…,n)即為地面目標的坐標(Xw,Yw)。只要有4個標定點就可以求解該線性方程組,分別測得其在地面上的坐標(Xw,Yw,0),再根據(jù)由圖像處理的方法得到的圖像坐標系中的像素坐標(ui,vj)(其中i=1,2,…,n,j=1,2,…,n),即可求得變換矩陣M,M=[m11,m12,m14,m21,m22,m24,m31,m32]T,其中m34=1。變換矩陣M的元素取值受到攝像頭俯仰角和架設高度的影響。在實驗室條件下,本系統(tǒng)選取BC=13 cm時開始運行轉(zhuǎn)彎模塊。

            在單目視覺的條件下,對于固定的俯仰角,為保證道路引導線不移出攝像頭視野范圍,必須控制機器人以一定的弧度轉(zhuǎn)彎,即沿弧線路徑執(zhí)行轉(zhuǎn)彎模塊。要做到這一點,弧線的弧度必須選取合適。在轉(zhuǎn)彎過程中需要根據(jù)機器人的位置不斷調(diào)整機器人的運動速度和轉(zhuǎn)動角度,具體過程如下:

            (1)找出圖像中最后一行中點m的像素坐標(um,vm),即攝像頭視野最下方的中點,通過變換矩陣M將其轉(zhuǎn)換為世界坐標系xyz中的位置(xm,ym),z軸垂直于xy平面即地面。

            (2)找出圖像中轉(zhuǎn)角點t的像素坐標(ut,vt),通過變換矩陣M求出其在世界坐標系xyz中的位置(xt,yt)。

            (3)以地面上轉(zhuǎn)角點為圓心的世界坐標系定義為XYZ,Z軸垂直于XY平面即地面,求出弧線在此坐標系中的方程,(x-a)2+(y-b)2=r2(a,b)表示在坐標系XYZ下弧線所在圓的圓心,r表示圓的半徑。

            (4)將xyz坐標系下的坐標點(xm,ym)轉(zhuǎn)換到XYZ坐標系下,用坐標(Xm,Ym)表示,如圖6所示。X軸與x的夾角為θ,XOY坐標系的原點O即為轉(zhuǎn)角點t,則:

           

            (5)弧線方程中當y=Ym時,求得X,比較x與Xm,若Xm-x>0,則命令機器人左轉(zhuǎn);若Xm-x<0,則命令機器人右轉(zhuǎn),否則直行。

            本系統(tǒng)確定轉(zhuǎn)彎弧的半徑為20 cm,弧度為90°的弧線即可使機器人順利轉(zhuǎn)彎,機器人視野中始終保持引導線。

          3 實驗結(jié)果及結(jié)論

            實驗中選用的LEGO移動機器人,其運動速度為8.57 cm/s(指令設定Power=25 RPM)。導航場地中畫有寬1 cm的黑色引導線,實驗要求中機器人完全根據(jù)引導線自主運動。實驗中,識別1幀圖像并且機器人根據(jù)識別的路徑信息運行直行或轉(zhuǎn)彎模塊共需0.311 s,即機器人每處理1幀圖像移動2.67 cm。實驗室中的光照條件是機器人移動時的主要干擾,而銳利的引導線邊緣受光照影響較小,對這些干擾有較好的濾除作用。經(jīng)過在陰天白天、晴天白天以及開燈和不開燈的情況下、晚上開燈的情況下、遮蓋物位于攝像頭上方50 cm處形成陰影情況下,機器人能正確的沿引導線移動。同時,當攝像頭視野范圍內(nèi)引導線消失即認為出現(xiàn)障礙物,機器人能發(fā)出前方有障礙物的報警信息。

            可見上面所述方法有較好的實時性和魯棒性有一定的通用性,使得該視覺導航方法具有一定的應用價值。只要光照條件變化不是非常劇烈,在工廠、醫(yī)院、辦公樓等環(huán)境中,機器人根據(jù)路徑引導線可自主到達目的地。

            當然,由于移動機器人活動場景的復雜性和動態(tài)特性,以及視覺處理的復雜性,視覺導航還有很多需要解決的問題,例如當導航場地出現(xiàn)較大面積的強烈反光、極暗的陰影時能否有效可靠的進行移動機器人的導航控制,這需要進一步研究。另外,如何將視覺系統(tǒng)與本系統(tǒng)機器人平臺中的超聲波傳感器、光電傳感器及聲音傳感器在空間、時間及數(shù)據(jù)上進行融合以提高系統(tǒng)的適應性和環(huán)境識別能力也是一個研究方向。

           

          攝像頭相關(guān)文章:攝像頭原理


          關(guān)鍵詞: 計算機視覺

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();