數(shù)字形態(tài)學(xué)濾波器與智能車路徑記憶
引言
本文引用地址:http://www.ex-cimer.com/article/81348.htm “飛思卡爾”杯全國大學(xué)生智能車競賽規(guī)則明確指出,智能車在賽道上連續(xù)跑兩圈,并記錄其中最好的單圈成績,這使路徑記憶算法成為可能。如圖1所示,賽道記憶算法在第一圈以最安全的速度緩慢駛過一圈,并將賽道信息保存下來,第二圈根據(jù)保存下來的信息進(jìn)行車速和轉(zhuǎn)角決策的相應(yīng)最優(yōu)化,從而在第二圈取得好成績。無論智能車的傳感器前瞻距離有多遠(yuǎn),在跑圈時(shí)它都只能預(yù)測在一段有限距離內(nèi)賽道的情況。而采用賽道記憶算法的智能車,在第二圈時(shí)已對(duì)整個(gè)賽道有了全面的認(rèn)識(shí),從而在相同條件下,將比不使用賽道記憶的智能車更具優(yōu)勢。
第一圈準(zhǔn)確記憶賽道信息是第二圈控制策略的基礎(chǔ),是比賽成敗的關(guān)鍵。但是在第一圈中不論控制策略如何優(yōu)秀,賽車總會(huì)或多或少的偏離賽道,舵機(jī)的轉(zhuǎn)角信息總會(huì)出現(xiàn)一定程度的毛刺和擾動(dòng)等粗大誤差,其幅值足以引起處理器的誤判。如果不加處理直接應(yīng)用于第二圈控制,會(huì)對(duì)賽車造成嚴(yán)重干擾,不能以極限速度跑完比賽或者沖出賽道。通常的處理方法有兩種:一是通過閾值比較丟棄干擾值,但同時(shí)賽道信息也會(huì)同干擾信息一起被丟棄;二是通過低通濾波將干擾平均到多個(gè)位置,但同時(shí)破壞了賽道原始信息,而且在干擾幅值很大的時(shí)候效果也不是很明顯。
數(shù)學(xué)形態(tài)學(xué)(Mathematical Morphology)是一種新型的數(shù)字圖像處理方法和理論,其主要內(nèi)容是設(shè)計(jì)一整套的變換(運(yùn)算)、概念和算法,用以描述圖像的基本特征。提供了非常有效的非線性濾波技術(shù),該技術(shù)只取決于信號(hào)的局部形狀特征。因此,它在諸如形狀分析、模式識(shí)別、視覺校驗(yàn)、計(jì)算機(jī)視覺等方面,要比傳統(tǒng)的線性濾波更為有效。
算法的選取與實(shí)驗(yàn)結(jié)果對(duì)比
數(shù)學(xué)形態(tài)學(xué)的運(yùn)算以腐蝕和膨脹這兩種基本運(yùn)算為基礎(chǔ),引出了其它幾個(gè)常用的數(shù)學(xué)形態(tài)運(yùn)算。數(shù)學(xué)形態(tài)學(xué)中最常見的基本運(yùn)算只有七種,分別為:腐蝕、膨脹、開運(yùn)算、閉運(yùn)算、擊中、細(xì)化和粗化,它們是全部形態(tài)學(xué)的基礎(chǔ)。它們的定義如下:
設(shè)X代表一個(gè)數(shù)字圖像,我們假定該圖像是二值的,即取值只有1或0,則X表示一個(gè)二進(jìn)制信號(hào)集合,B是一個(gè)簡單的緊集合,稱為“結(jié)構(gòu)元素”。X被B膨脹和腐蝕的結(jié)果可以分別定義為:
在數(shù)字圖形處理領(lǐng)域中,數(shù)學(xué)形態(tài)學(xué)主要用于非線性變形,它可以局部地修改信號(hào)的幾何特征,并提供有關(guān)信號(hào)的幾何特征信息。根據(jù)不同的信號(hào)的形態(tài)特征,可以采用不同的數(shù)學(xué)形態(tài)學(xué)運(yùn)算對(duì)信號(hào)進(jìn)行處理,這些數(shù)學(xué)形態(tài)與運(yùn)算都被視為數(shù)學(xué)形態(tài)濾波器。在這種應(yīng)用方法中,每一個(gè)信號(hào)都被視為適當(dāng)?shù)木S數(shù)的歐幾里德空間中的集合。數(shù)學(xué)形態(tài)濾波器被定義為集合的運(yùn)算,它使信號(hào)的圖形變形,以提供關(guān)于其幾何結(jié)構(gòu)的數(shù)字化信息。對(duì)于被視為集合的二進(jìn)制信號(hào),腐蝕、膨脹、開運(yùn)算和閉運(yùn)算是最簡單的形態(tài)運(yùn)算。這些濾波器還可以引申到多維信號(hào)中去。此時(shí),形態(tài)濾波器利用的是灰值圖的數(shù)學(xué)形態(tài)運(yùn)算的定義。下面將探討如何將數(shù)學(xué)形態(tài)濾波器應(yīng)用到舵機(jī)轉(zhuǎn)角信號(hào)(一維數(shù)字信號(hào))的處理中,實(shí)現(xiàn)去除脈沖噪聲和減小擾動(dòng),以及在單片機(jī)上編程實(shí)現(xiàn)和快速運(yùn)算的方法。
數(shù)學(xué)形態(tài)濾波器通常是用在二維圖形的處理,為把數(shù)學(xué)形態(tài)濾波器推廣到一維的信號(hào)的處理中,下面再介紹一下腐蝕、膨脹、開運(yùn)算和閉運(yùn)算這一個(gè)基本運(yùn)算在一維信號(hào)處理中的定義:
設(shè)H、K分別為h[n]和k[n]的定義域,長度分別為N和M,一般N>M。H和K均為整數(shù)集合。
h[n]指包含舵機(jī)轉(zhuǎn)角信號(hào)的數(shù)字化序列,k[n]指結(jié)構(gòu)元素序列。
h被k腐蝕:
采用數(shù)字形態(tài)濾波方法,還要選用合理的算法。其中,如何選取模板序列的長度是關(guān)鍵,如果模板序列過長會(huì)將有用信號(hào)當(dāng)作噪聲濾除,過短則達(dá)不到濾除噪聲的目的。在采樣速率一定的情況下,序列的長度與時(shí)間成正比,這要求模板的長度要小于模型車的最小轉(zhuǎn)彎時(shí)間,大于舵機(jī)擾動(dòng)的最長時(shí)間。第一圈讓模型車勻速通過,這樣處理有兩個(gè)優(yōu)點(diǎn):
1) 可以固定最小轉(zhuǎn)彎時(shí)間,從而確定模板的長度。非勻速通過時(shí)速轉(zhuǎn)彎時(shí)間不定,要求模板長度可變,從而造成后續(xù)處理復(fù)雜,穩(wěn)定性不高。
2) 采樣序列的順序可以直接轉(zhuǎn)化為位移量,便于后續(xù)控制策略處理。相對(duì)于非勻速通過速度與時(shí)間乘積得到的位移,直接轉(zhuǎn)化得到的位移更準(zhǔn)確(在標(biāo)準(zhǔn)的韓國賽道上,實(shí)驗(yàn)?zāi)P蛙囍苯愚D(zhuǎn)化得到的賽道長度誤差小于5cm,速度與時(shí)間乘積得到賽道長度誤差在10cm以上)。
實(shí)驗(yàn)系統(tǒng)在圖2所示的賽道上,智能車對(duì)賽道信息的采樣速率為200Hz,以1.5m/s的速度勻速跑完第一圈的數(shù)據(jù)如圖3所示??梢钥吹皆趶澋乐校鏅C(jī)的轉(zhuǎn)角信息存在著嚴(yán)重的毛刺和擾動(dòng),不能直接用于第二圈的控制策略。圖4為matlab中采用3階巴特沃茲濾波處理后的結(jié)果,干擾的抑制效果仍然不理想,而且運(yùn)算量偏大,單片機(jī)難以承受。圖5為采用形態(tài)學(xué)濾波處理后的數(shù)據(jù),賽道信息完整準(zhǔn)確,可以較好的應(yīng)用于后續(xù)控制策略。
圖2 實(shí)驗(yàn)系統(tǒng)采用的賽道
圖3 第一圈記錄的賽道信息
圖 4 3階巴特沃茲濾波器處理后數(shù)據(jù)
圖5 形態(tài)學(xué)濾波處理后的數(shù)據(jù)
數(shù)學(xué)形態(tài)濾波的快速算法
由于數(shù)學(xué)形態(tài)濾波器只由加法、減法和比較運(yùn)算構(gòu)成,其運(yùn)算相對(duì)簡單,因此,它很適合于在計(jì)算功能相對(duì)較弱的單片機(jī)上應(yīng)用并能取得很好的效果。以往單片機(jī)由于受存儲(chǔ)容量、計(jì)算速度及字長的限制而使大多數(shù)的數(shù)字濾波器較難實(shí)現(xiàn),而形態(tài)濾波器則為單片機(jī)應(yīng)用數(shù)字濾波器代替以往的模擬濾波器提供了一條新的途徑。
由腐蝕的定義可知,欲計(jì)算f(n)的腐蝕值,需要知道該點(diǎn)前w(w為結(jié)構(gòu)元素的寬度)點(diǎn)的數(shù)據(jù);而要計(jì)算f(n)膨脹后的結(jié)果,則需要知道該點(diǎn)后w點(diǎn)的數(shù)據(jù)。由于運(yùn)算是一個(gè)腐蝕運(yùn)算接著一個(gè)膨脹運(yùn)算后得到的,在長度為L的數(shù)據(jù)中只有從第w點(diǎn)到第(L-w+1)點(diǎn),才可以得到開運(yùn)算的結(jié)果。
如圖6所示,我們定義一個(gè)模板序列,該序列的長度和結(jié)構(gòu)元素的寬度相同。該模板的初始值由前w個(gè)點(diǎn)的腐蝕值組成。以第n點(diǎn)為例,沿該點(diǎn)向前的方向?qū)δ0逍蛄械闹颠M(jìn)行膨脹運(yùn)算,運(yùn)算的結(jié)果即為該點(diǎn)的開運(yùn)算的結(jié)果。同時(shí),沿該點(diǎn)向后的方向繼續(xù)進(jìn)行腐蝕運(yùn)算,得到第(n+1)點(diǎn)的腐蝕值。將(n+1)點(diǎn)的腐蝕值作為模板序列的最后一個(gè)點(diǎn),并將模板序列前(w-1)點(diǎn)順次向前移動(dòng)一個(gè)位置。更新后的模板值即可用來做 (n+1)點(diǎn)的膨脹運(yùn)算,得到在(n+1)點(diǎn)的開運(yùn)算值。如此繼續(xù)下去,就可完成全部的開運(yùn)算。在做閉運(yùn)算也可采用類似的方法來提高計(jì)算的速度。
圖6 數(shù)學(xué)形態(tài)濾波快速算法
這樣,對(duì)長度為N的一段數(shù)據(jù),用M個(gè)零作為其結(jié)構(gòu)元素進(jìn)行處理時(shí),當(dāng)采用一般方法進(jìn)行計(jì)算,需要進(jìn)行2×M×N次的比較運(yùn)算。而當(dāng)采用快速算法時(shí),能夠在比較最大值的同時(shí)得到最小值,減少(N-M+1)×M次比較運(yùn)算,使程序的執(zhí)行速度提高了近一倍,而且,由于采用這種快速算法,可以實(shí)現(xiàn)路徑記憶信息的實(shí)時(shí)處理,很大程度上方便了第二圈控制策略的制定,因此,它使得形態(tài)濾波這種方法更加適合應(yīng)用于路徑信息的處理中。
實(shí)驗(yàn)及結(jié)論
通過對(duì)不同傳感器方案(光電管和CCD)的智能車在不同賽道多次實(shí)驗(yàn)發(fā)現(xiàn),對(duì)于光電管方案和CCD方案的智能車,賽道記憶算法都能一定程度上提高第二圈速度。智能車采用形態(tài)學(xué)濾波算法處理賽道記憶數(shù)據(jù)后,不但行駛的穩(wěn)定性、準(zhǔn)確性有了較大的提升,而且沒有大幅增加MCU的資源消耗,同時(shí)可以支持復(fù)雜的控制策略。上述方案具有很強(qiáng)的通用性,適用于不同傳感器方案、不同控制算法的智能車。
評(píng)論