李 濤,李富強(qiáng),唐堅(jiān)強(qiáng),于澤寬
(中國(guó)礦業(yè)大學(xué) 徐海學(xué)院,江蘇 徐州 221008)
設(shè)計(jì)與制作智能尋跡車(chē)是一種入門(mén)門(mén)檻低、發(fā)展空間大、涵蓋知識(shí)廣的活動(dòng)。在機(jī)器人游中國(guó)的比賽中,由于場(chǎng)地復(fù)雜,對(duì)智能尋跡車(chē)的穩(wěn)定性是個(gè)很高的挑戰(zhàn)。能完成比賽的往往是少數(shù),能取得高分的更是鳳毛麟角,究其原因多是因?yàn)槌绦虻聂敯粜圆粡?qiáng),未能完全考慮比賽情況所致。筆者對(duì)智能尋跡車(chē)的控制算法做了很多創(chuàng)造性的改進(jìn),實(shí)踐證明這些改進(jìn)很好地改善智能尋跡車(chē)的穩(wěn)定性,非常具有借鑒性。
傳統(tǒng)的灰度傳感器的使用多是預(yù)設(shè)一個(gè)閾值,以返回的灰度值與閾值的大小關(guān)系來(lái)確定檢測(cè)到的是白還是灰。這種做法的好處是簡(jiǎn)單、高效,但對(duì)環(huán)境要求很高,幾乎不能有附加光源干擾而且環(huán)境光線(xiàn)不同閾值也要人為調(diào)整。基于此許多人提出了種種由控制器自行調(diào)整閾值的算法即動(dòng)態(tài)閾值的算法。然而這些算法有些過(guò)于局限有些則過(guò)于復(fù)雜,并不能很好的適用于智能小車(chē)。于是在準(zhǔn)備“機(jī)器人游中國(guó)”項(xiàng)目過(guò)程中提出了3種適于智能小車(chē)的動(dòng)態(tài)閾值算法,并且實(shí)踐證明這些算法可以很好的適應(yīng)比賽場(chǎng)地而且具有明顯的抗干擾性。
在函數(shù)之前,為每一個(gè)傳感器配套建立了3個(gè)變量,一個(gè)白線(xiàn)變量、1個(gè)綠地變量、1個(gè)閾值變量。
圖1 系統(tǒng)流程圖Fig.1 Flow chart of the system
本算法的過(guò)程為:先人工給一個(gè)起始的閾值,然后讓機(jī)器人采集灰度值,當(dāng)碰到綠地時(shí)存入綠地變量,碰到白線(xiàn)時(shí)存入白線(xiàn)變量。當(dāng)綠地變量和白線(xiàn)變量都有值時(shí)開(kāi)始自己運(yùn)算閾值。在存入綠地變量之前與當(dāng)前值比較,假如大于當(dāng)前值則存入,小于則丟棄。這樣綠地變量存入的灰度值永遠(yuǎn)都是過(guò)去識(shí)別到的綠地值中最高的。白線(xiàn)值采用相反的方式,保證白線(xiàn)變量存入的灰度值永遠(yuǎn)都是過(guò)去識(shí)別到的白線(xiàn)值中最低的。假設(shè)到任意時(shí)刻t為止,共識(shí)別到n個(gè)白線(xiàn)值、m個(gè)綠地值,則:
下一時(shí)刻的閾值為最終白線(xiàn)值與最終綠地值的平均值。隨著小車(chē)在場(chǎng)地上的運(yùn)動(dòng),這個(gè)算法統(tǒng)計(jì)到的白線(xiàn)值與綠地值越來(lái)越多,從中篩選出來(lái)的最值越來(lái)越接近這個(gè)場(chǎng)地的最值,得到的閾值就越來(lái)越可靠。
核心代碼:
這個(gè)算法適用于本場(chǎng)地上的所有地點(diǎn)的綠地值均超不過(guò)任何一點(diǎn)的白線(xiàn)值的情況。
在函數(shù)之前,為每一個(gè)傳感器配套建立了兩個(gè)變量,一個(gè)綠地變量、一個(gè)閾值變量。
本算法的過(guò)程為:先賦一個(gè)初始的閾值,在小車(chē)運(yùn)行過(guò)程中不斷更新綠地變量的值,并且根據(jù)本次綠地值與上次綠地值的差值調(diào)整閾值,形象地說(shuō)就是水漲船高。
若AD轉(zhuǎn)換速度過(guò)快,則可能發(fā)生這樣的情況:從綠地到白線(xiàn)的過(guò)程中灰度值是漸變的而不是突變的,導(dǎo)致閾值被逐漸抬到了高于白線(xiàn)值的區(qū)域而無(wú)法識(shí)別白線(xiàn)。解決辦法是:令閾值曲線(xiàn)的變化率明顯小于綠地曲線(xiàn)。如圖2所示,閾值曲線(xiàn)變化率=灰度曲線(xiàn)變化率/2,這樣當(dāng)綠地值在較小范圍內(nèi)波動(dòng)的話(huà)閾值仍可以很好地跟蹤,但在大范圍波動(dòng)的話(huà)綠地值曲線(xiàn)與閾值曲線(xiàn)就會(huì)有交點(diǎn),在程序上反映為返回值大于閾值,即可識(shí)別綠地與白線(xiàn)。
圖2 灰度值關(guān)于閾值的變化曲線(xiàn)Fig.2 Gray value of threshold change curves
這個(gè)算法適用于傳感器在場(chǎng)地的任意地點(diǎn)綠地值變化不大的情況。
這個(gè)算法適用于傳感器數(shù)量較多的情況下,對(duì)傳感器依賴(lài)程度低、適應(yīng)性及抗干擾性極強(qiáng)。對(duì)灰度傳感器的唯一要求是:負(fù)責(zé)巡線(xiàn)的灰度傳感器是一樣的,而且沒(méi)有損壞。
本算法的過(guò)程為:在場(chǎng)地的任何一個(gè)地點(diǎn),先考慮一組傳感器有些踩到白線(xiàn)另一些踩在綠地上的情況:采集一組中的所有n個(gè)傳感器的灰度值,取一個(gè)最高值暫認(rèn)為是白線(xiàn),取一個(gè)最低值暫認(rèn)為是綠地。假如發(fā)現(xiàn)靠近最高值的數(shù)據(jù)與靠近最低值的數(shù)據(jù)之間有明顯的分界區(qū)間,就認(rèn)為靠近最高值的數(shù)據(jù)均為白線(xiàn)值,靠近最低值的數(shù)據(jù)均為綠地值。假如采集到的8個(gè)數(shù)據(jù)沒(méi)有明顯分界區(qū),也就是說(shuō)都差不多,就認(rèn)為現(xiàn)在均為綠地值或均為白線(xiàn)值,如圖3所示。
現(xiàn)考慮返回來(lái)的8個(gè)灰度值全部接近,即沒(méi)有明顯的分界區(qū),則認(rèn)為當(dāng)前全部踩到白線(xiàn)或全部踩到綠地。對(duì)于如何辨別這兩種情況,課題組針對(duì)游中國(guó)的場(chǎng)地設(shè)計(jì)了一種特殊的方式:遍觀(guān)游中國(guó)的場(chǎng)地,沒(méi)有可以讓車(chē)子前后兩側(cè)的傳感器同時(shí)全部踩到白線(xiàn)的地方,所以,假如車(chē)子一側(cè)的傳感器返回值全部接近,則此時(shí)判斷另一側(cè)的傳感器,假如它踩到線(xiàn)則可以通過(guò)它分析出的白線(xiàn)值與綠地值來(lái)判斷兩側(cè)的所有傳感器的踩線(xiàn)情況,因?yàn)榇藭r(shí)車(chē)前側(cè)和后側(cè)挨得很近,認(rèn)為這兩側(cè)的光線(xiàn)環(huán)境是一樣的。假如前后兩側(cè)的灰度值都互相接近,則認(rèn)為此時(shí)兩側(cè)都踩在綠地上,因?yàn)椴豢赡苡兴械膫鞲衅魅坎仍诎拙€(xiàn)上的情況。
圖3 不同傳感器的灰度值Fig.3 Gray value of different sensors
假如這些傳感器的白線(xiàn)值不非常靠近,但與綠地值的差值是差不多一樣的可以對(duì)某些傳感器返回的灰度值做一些預(yù)處理(如可以先把其中一個(gè)傳感器讀取的灰度值加200在做分析)。使之與其他傳感器特性一致。如果某些傳感器差值不一樣但是白、綠的比值是差不多的可以乘以一個(gè)修正系數(shù)(如可以先把一個(gè)傳感器讀取的灰度值乘以2再分析)??傊褪潜WC在做分析之前用軟件和硬件的方法保證所有的灰度值在踩到白線(xiàn)的值是靠近的,綠地值也是靠近的,這樣才能進(jìn)行準(zhǔn)確的統(tǒng)計(jì)學(xué)上的分析。
在所有有關(guān)轉(zhuǎn)彎的控制中,依靠時(shí)間去控制轉(zhuǎn)彎的算法最為高效但也最不可靠,所以課題組在設(shè)計(jì)之初就采用了完全依靠傳感器來(lái)確定轉(zhuǎn)彎開(kāi)始與終止的策略。但是在課題組所了解的算法中有些是因?yàn)榭煽啃愿叩撬俣缺容^慢,有些則是速度較快但轉(zhuǎn)彎后晃動(dòng)明顯,筆者取各家之所長(zhǎng)自己編寫(xiě)了簡(jiǎn)潔高效、快速穩(wěn)定的轉(zhuǎn)彎算法:
核心代碼:
這個(gè)算法的原理是先以很快的速度轉(zhuǎn)彎,直到最左(右)端傳感器檢測(cè)到白線(xiàn),再以很慢的速度轉(zhuǎn)彎直到指定的傳感器檢測(cè)到白線(xiàn)。這樣,當(dāng)轉(zhuǎn)彎結(jié)束時(shí),電機(jī)停留在一個(gè)很小的轉(zhuǎn)速上,晃動(dòng)現(xiàn)象不明顯,保證了之后的巡線(xiàn)可以快速地進(jìn)入到穩(wěn)定狀態(tài)(可以看到上面的代碼中轉(zhuǎn)彎的前期是以70%的高速旋轉(zhuǎn),而后期則是25%的低速)。
這個(gè)剎車(chē)的原理是調(diào)用剎車(chē)函數(shù)時(shí)先去掉電機(jī)兩端電壓一小段時(shí)間,使電機(jī)電樞電流下降,然后再讀取剎車(chē)之前最后一個(gè)時(shí)刻的速度參數(shù),再給一個(gè)相反的速度參數(shù),這時(shí)電機(jī)還來(lái)不及反轉(zhuǎn)但是電樞上會(huì)有一個(gè)很強(qiáng)的反向轉(zhuǎn)矩,產(chǎn)生近似抱死的效果,然后很快松開(kāi)以保護(hù)電機(jī)和驅(qū)動(dòng),考慮到此時(shí)車(chē)速已經(jīng)降了下來(lái)所以接下來(lái)以1/2的速度繼續(xù)反向給電壓,很快電機(jī)就會(huì)開(kāi)始反轉(zhuǎn),盡量在剛剛反轉(zhuǎn)的時(shí)刻(此時(shí)速度為零)撤掉電壓,電機(jī)就會(huì)停止,也就是車(chē)子停下來(lái)。實(shí)踐證明這個(gè)算法的效果非常明顯,剎車(chē)距離大大縮短,唯一的缺點(diǎn)就是剎車(chē)時(shí)點(diǎn)頭現(xiàn)象比較明顯。
核心代碼:
實(shí)踐證明本算法雖然功能簡(jiǎn)單但效果非常明顯,它使比賽的成功率有了質(zhì)的改善。出線(xiàn)找回的基本原理是檢測(cè)到前方?jīng)]有線(xiàn)時(shí)自動(dòng)退回,另外算法中還設(shè)計(jì)了一個(gè)開(kāi)關(guān)變量back,當(dāng)back寫(xiě)1的時(shí)候打開(kāi)出線(xiàn)找回功能,當(dāng)back寫(xiě)0時(shí)關(guān)閉這個(gè)功能。這樣做主要是為了區(qū)別上橋與上天臺(tái)時(shí)因?yàn)檐?chē)頭突然抬起而檢測(cè)不到白線(xiàn)與因巡線(xiàn)出界而檢測(cè)不到白線(xiàn)的情況。具體做法是當(dāng)出界前最后一次檢測(cè)到白線(xiàn)是在兩端時(shí)認(rèn)為這是巡線(xiàn)出界,當(dāng)出界前最后檢測(cè)到白線(xiàn)的傳感器不是兩端的時(shí)就認(rèn)為這是車(chē)頭突然抬起。
核心代碼:
其中FlagFB為行駛方向標(biāo)志位,num(char i)為查詢(xún)指定傳感器組的踩白線(xiàn)的傳感器個(gè)數(shù)的函數(shù)。Seconds()為虛擬系統(tǒng)時(shí)鐘查詢(xún)函數(shù)。
另外,函數(shù)中關(guān)于time的改動(dòng)是為了在調(diào)用延時(shí)巡線(xiàn)出界時(shí),要把出界找回的時(shí)間從巡線(xiàn)時(shí)間里剔除而做的處理。這樣便使出界找回的時(shí)間不算在正確巡線(xiàn)的時(shí)間里。
通過(guò)以上算法與控制策略上的改良,小車(chē)的運(yùn)行穩(wěn)定性有了明顯提升,比賽完成率大大提高,且在高速與低速狀態(tài)下都有不錯(cuò)的表現(xiàn)。重要的是算法上的改良為小車(chē)的調(diào)試工作帶來(lái)了極大的方便,所要調(diào)整的參數(shù)大大減少,隊(duì)員可以把更多的精力放在比賽策略和路線(xiàn)選擇上,這對(duì)比賽是非常重要的。
[1]葉煒垚,王春香,楊明,等.虛擬障礙物的移動(dòng)機(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語(yǔ)言程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2005.
[3]顧斌.基于單片機(jī)的機(jī)器人視覺(jué)傳感系統(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)航移動(dòng)機(jī)器人視覺(jué)系統(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]蔡濤,段善旭,李德華.視覺(jué)基礎(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.