李 濤,李富強(qiáng),唐堅(jiān)強(qiáng),于澤寬
(中國礦業(yè)大學(xué) 徐海學(xué)院,江蘇 徐州 221008)
設(shè)計(jì)與制作智能尋跡車是一種入門門檻低、發(fā)展空間大、涵蓋知識廣的活動。在機(jī)器人游中國的比賽中,由于場地復(fù)雜,對智能尋跡車的穩(wěn)定性是個(gè)很高的挑戰(zhàn)。能完成比賽的往往是少數(shù),能取得高分的更是鳳毛麟角,究其原因多是因?yàn)槌绦虻聂敯粜圆粡?qiáng),未能完全考慮比賽情況所致。筆者對智能尋跡車的控制算法做了很多創(chuàng)造性的改進(jìn),實(shí)踐證明這些改進(jìn)很好地改善智能尋跡車的穩(wěn)定性,非常具有借鑒性。
傳統(tǒng)的灰度傳感器的使用多是預(yù)設(shè)一個(gè)閾值,以返回的灰度值與閾值的大小關(guān)系來確定檢測到的是白還是灰。這種做法的好處是簡單、高效,但對環(huán)境要求很高,幾乎不能有附加光源干擾而且環(huán)境光線不同閾值也要人為調(diào)整。基于此許多人提出了種種由控制器自行調(diào)整閾值的算法即動態(tài)閾值的算法。然而這些算法有些過于局限有些則過于復(fù)雜,并不能很好的適用于智能小車。于是在準(zhǔn)備“機(jī)器人游中國”項(xiàng)目過程中提出了3種適于智能小車的動態(tài)閾值算法,并且實(shí)踐證明這些算法可以很好的適應(yīng)比賽場地而且具有明顯的抗干擾性。
在函數(shù)之前,為每一個(gè)傳感器配套建立了3個(gè)變量,一個(gè)白線變量、1個(gè)綠地變量、1個(gè)閾值變量。

圖1 系統(tǒng)流程圖Fig.1 Flow chart of the system
本算法的過程為:先人工給一個(gè)起始的閾值,然后讓機(jī)器人采集灰度值,當(dāng)碰到綠地時(shí)存入綠地變量,碰到白線時(shí)存入白線變量。當(dāng)綠地變量和白線變量都有值時(shí)開始自己運(yùn)算閾值。在存入綠地變量之前與當(dāng)前值比較,假如大于當(dāng)前值則存入,小于則丟棄。這樣綠地變量存入的灰度值永遠(yuǎn)都是過去識別到的綠地值中最高的。白線值采用相反的方式,保證白線變量存入的灰度值永遠(yuǎn)都是過去識別到的白線值中最低的。假設(shè)到任意時(shí)刻t為止,共識別到n個(gè)白線值、m個(gè)綠地值,則:

下一時(shí)刻的閾值為最終白線值與最終綠地值的平均值。隨著小車在場地上的運(yùn)動,這個(gè)算法統(tǒng)計(jì)到的白線值與綠地值越來越多,從中篩選出來的最值越來越接近這個(gè)場地的最值,得到的閾值就越來越可靠。
核心代碼:

這個(gè)算法適用于本場地上的所有地點(diǎn)的綠地值均超不過任何一點(diǎn)的白線值的情況。
在函數(shù)之前,為每一個(gè)傳感器配套建立了兩個(gè)變量,一個(gè)綠地變量、一個(gè)閾值變量。
本算法的過程為:先賦一個(gè)初始的閾值,在小車運(yùn)行過程中不斷更新綠地變量的值,并且根據(jù)本次綠地值與上次綠地值的差值調(diào)整閾值,形象地說就是水漲船高。
若AD轉(zhuǎn)換速度過快,則可能發(fā)生這樣的情況:從綠地到白線的過程中灰度值是漸變的而不是突變的,導(dǎo)致閾值被逐漸抬到了高于白線值的區(qū)域而無法識別白線。解決辦法是:令閾值曲線的變化率明顯小于綠地曲線。如圖2所示,閾值曲線變化率=灰度曲線變化率/2,這樣當(dāng)綠地值在較小范圍內(nèi)波動的話閾值仍可以很好地跟蹤,但在大范圍波動的話綠地值曲線與閾值曲線就會有交點(diǎn),在程序上反映為返回值大于閾值,即可識別綠地與白線。

圖2 灰度值關(guān)于閾值的變化曲線Fig.2 Gray value of threshold change curves
這個(gè)算法適用于傳感器在場地的任意地點(diǎn)綠地值變化不大的情況。
這個(gè)算法適用于傳感器數(shù)量較多的情況下,對傳感器依賴程度低、適應(yīng)性及抗干擾性極強(qiáng)。對灰度傳感器的唯一要求是:負(fù)責(zé)巡線的灰度傳感器是一樣的,而且沒有損壞。
本算法的過程為:在場地的任何一個(gè)地點(diǎn),先考慮一組傳感器有些踩到白線另一些踩在綠地上的情況:采集一組中的所有n個(gè)傳感器的灰度值,取一個(gè)最高值暫認(rèn)為是白線,取一個(gè)最低值暫認(rèn)為是綠地。假如發(fā)現(xiàn)靠近最高值的數(shù)據(jù)與靠近最低值的數(shù)據(jù)之間有明顯的分界區(qū)間,就認(rèn)為靠近最高值的數(shù)據(jù)均為白線值,靠近最低值的數(shù)據(jù)均為綠地值。假如采集到的8個(gè)數(shù)據(jù)沒有明顯分界區(qū),也就是說都差不多,就認(rèn)為現(xiàn)在均為綠地值或均為白線值,如圖3所示。
現(xiàn)考慮返回來的8個(gè)灰度值全部接近,即沒有明顯的分界區(qū),則認(rèn)為當(dāng)前全部踩到白線或全部踩到綠地。對于如何辨別這兩種情況,課題組針對游中國的場地設(shè)計(jì)了一種特殊的方式:遍觀游中國的場地,沒有可以讓車子前后兩側(cè)的傳感器同時(shí)全部踩到白線的地方,所以,假如車子一側(cè)的傳感器返回值全部接近,則此時(shí)判斷另一側(cè)的傳感器,假如它踩到線則可以通過它分析出的白線值與綠地值來判斷兩側(cè)的所有傳感器的踩線情況,因?yàn)榇藭r(shí)車前側(cè)和后側(cè)挨得很近,認(rèn)為這兩側(cè)的光線環(huán)境是一樣的。假如前后兩側(cè)的灰度值都互相接近,則認(rèn)為此時(shí)兩側(cè)都踩在綠地上,因?yàn)椴豢赡苡兴械膫鞲衅魅坎仍诎拙€上的情況。

圖3 不同傳感器的灰度值Fig.3 Gray value of different sensors
假如這些傳感器的白線值不非常靠近,但與綠地值的差值是差不多一樣的可以對某些傳感器返回的灰度值做一些預(yù)處理(如可以先把其中一個(gè)傳感器讀取的灰度值加200在做分析)。使之與其他傳感器特性一致。如果某些傳感器差值不一樣但是白、綠的比值是差不多的可以乘以一個(gè)修正系數(shù)(如可以先把一個(gè)傳感器讀取的灰度值乘以2再分析)。總之就是保證在做分析之前用軟件和硬件的方法保證所有的灰度值在踩到白線的值是靠近的,綠地值也是靠近的,這樣才能進(jìn)行準(zhǔn)確的統(tǒng)計(jì)學(xué)上的分析。
在所有有關(guān)轉(zhuǎn)彎的控制中,依靠時(shí)間去控制轉(zhuǎn)彎的算法最為高效但也最不可靠,所以課題組在設(shè)計(jì)之初就采用了完全依靠傳感器來確定轉(zhuǎn)彎開始與終止的策略。但是在課題組所了解的算法中有些是因?yàn)榭煽啃愿叩撬俣缺容^慢,有些則是速度較快但轉(zhuǎn)彎后晃動明顯,筆者取各家之所長自己編寫了簡潔高效、快速穩(wěn)定的轉(zhuǎn)彎算法:
核心代碼:

這個(gè)算法的原理是先以很快的速度轉(zhuǎn)彎,直到最左(右)端傳感器檢測到白線,再以很慢的速度轉(zhuǎn)彎直到指定的傳感器檢測到白線。這樣,當(dāng)轉(zhuǎn)彎結(jié)束時(shí),電機(jī)停留在一個(gè)很小的轉(zhuǎn)速上,晃動現(xiàn)象不明顯,保證了之后的巡線可以快速地進(jìn)入到穩(wěn)定狀態(tài)(可以看到上面的代碼中轉(zhuǎn)彎的前期是以70%的高速旋轉(zhuǎn),而后期則是25%的低速)。
這個(gè)剎車的原理是調(diào)用剎車函數(shù)時(shí)先去掉電機(jī)兩端電壓一小段時(shí)間,使電機(jī)電樞電流下降,然后再讀取剎車之前最后一個(gè)時(shí)刻的速度參數(shù),再給一個(gè)相反的速度參數(shù),這時(shí)電機(jī)還來不及反轉(zhuǎn)但是電樞上會有一個(gè)很強(qiáng)的反向轉(zhuǎn)矩,產(chǎn)生近似抱死的效果,然后很快松開以保護(hù)電機(jī)和驅(qū)動,考慮到此時(shí)車速已經(jīng)降了下來所以接下來以1/2的速度繼續(xù)反向給電壓,很快電機(jī)就會開始反轉(zhuǎn),盡量在剛剛反轉(zhuǎn)的時(shí)刻(此時(shí)速度為零)撤掉電壓,電機(jī)就會停止,也就是車子停下來。實(shí)踐證明這個(gè)算法的效果非常明顯,剎車距離大大縮短,唯一的缺點(diǎn)就是剎車時(shí)點(diǎn)頭現(xiàn)象比較明顯。
核心代碼:

實(shí)踐證明本算法雖然功能簡單但效果非常明顯,它使比賽的成功率有了質(zhì)的改善。出線找回的基本原理是檢測到前方?jīng)]有線時(shí)自動退回,另外算法中還設(shè)計(jì)了一個(gè)開關(guān)變量back,當(dāng)back寫1的時(shí)候打開出線找回功能,當(dāng)back寫0時(shí)關(guān)閉這個(gè)功能。這樣做主要是為了區(qū)別上橋與上天臺時(shí)因?yàn)檐囶^突然抬起而檢測不到白線與因巡線出界而檢測不到白線的情況。具體做法是當(dāng)出界前最后一次檢測到白線是在兩端時(shí)認(rèn)為這是巡線出界,當(dāng)出界前最后檢測到白線的傳感器不是兩端的時(shí)就認(rèn)為這是車頭突然抬起。
核心代碼:

其中FlagFB為行駛方向標(biāo)志位,num(char i)為查詢指定傳感器組的踩白線的傳感器個(gè)數(shù)的函數(shù)。Seconds()為虛擬系統(tǒng)時(shí)鐘查詢函數(shù)。
另外,函數(shù)中關(guān)于time的改動是為了在調(diào)用延時(shí)巡線出界時(shí),要把出界找回的時(shí)間從巡線時(shí)間里剔除而做的處理。這樣便使出界找回的時(shí)間不算在正確巡線的時(shí)間里。
通過以上算法與控制策略上的改良,小車的運(yùn)行穩(wěn)定性有了明顯提升,比賽完成率大大提高,且在高速與低速狀態(tài)下都有不錯(cuò)的表現(xiàn)。重要的是算法上的改良為小車的調(diào)試工作帶來了極大的方便,所要調(diào)整的參數(shù)大大減少,隊(duì)員可以把更多的精力放在比賽策略和路線選擇上,這對比賽是非常重要的。
[1]葉煒垚,王春香,楊明,等.虛擬障礙物的移動機(jī)器人路徑規(guī)劃方法[J].機(jī)器人,2011,33(3):273-278.
YE Wei-yao,WANG Chun-xiang,YANG Ming,et al.Virtual obstacles based path planning for mobile robots[J].Robot,2011,33(3):273-278.
[2]譚浩強(qiáng).C語言程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2005.
[3]顧斌.基于單片機(jī)的機(jī)器人視覺傳感系統(tǒng)的硬件設(shè)計(jì)[J].現(xiàn)代農(nóng)業(yè)科學(xué),2008,15(5):53-59.
GU Bin.Based on SCM’s robot vision sensor system’s hardware design[J].Modern Agricultural Sciences,2008,15(5):53-59.
[4]陳應(yīng)松,肖世德,王文璽,等.自主導(dǎo)航移動機(jī)器人視覺系統(tǒng)的一種標(biāo)定方法[J].計(jì)算機(jī)工程與運(yùn)用,2009,45(23):190-199.
CHEN Ying-song,XIAO Shi-de,WANG Wen-xi,et al.Method of robot vision system calibration on autonomous navigation[J].Computer Engineering and Applications,2009, 45(23):190-199.
[5]蔡濤,段善旭,李德華.視覺基礎(chǔ)矩陣估計(jì)方法的性能比較與分析 [J].計(jì)算機(jī)科學(xué),2009,36(12):243-289.
CAI Tao,DUAN Shan-xu,LI De-hua.Performance comparison and analysis of fundamental matrix estimating methods for computer vision applications[J].Computer Science,2009,36(12):243-289.
[6]Olivier D F,Steve M.Motion from point matches:Multiplicity of solutions[J].Intermational Journal of Computer Vision,1990(4):225-246.
[7]Luong Q T,Olivier D F.The fundamental matrix:theory,algorithms,and stability analysis[J].International Journal of Computer Vision,1996(17):43-75.
[8]Seiler A, Balendran V, Sivayoganathan K,et al.Reverse engineering from uni-directional CMM scan data[J].The International Journal of Advanced Manufacturing Technology,1996,11(4):276-284.