江毓光
● 研究問題
前不久,筆者帶領(lǐng)學生參加了深圳市學生創(chuàng)客節(jié)中的“Arduino開源機器人現(xiàn)場挑戰(zhàn)賽”,在此挑戰(zhàn)賽中,巡線(讓機器人小車沿規(guī)定黑色賽道行走)是其中一項最基本的內(nèi)容,要實現(xiàn)巡線,一般采用四灰度傳感器形式(如圖1):傳感器2和3用于夾線巡跡,傳感器1和4用于判斷路口。但在實際競賽中,經(jīng)常會巡線脫軌,這是受場地光線或噴繪工藝等因素的影響,灰度傳感器常將比賽圖上暗的白色區(qū)域誤判為黑色區(qū)域,或?qū)⒘恋暮谏珔^(qū)域誤判為白色區(qū)域所致。因此,如何提高巡線的成功率成為急需解決的一大難題。
● 改進策略
誤判原因:程序中的灰度閾值通常都固定取為550,但當外部因素(場地光線或噴繪工藝等)影響比賽圖上某個區(qū)域的灰度時,灰度閾值550不會隨之變化,導(dǎo)致程序誤判。
改進策略:在4灰度傳感器的基礎(chǔ)上增加一個灰度傳感器5,專門用來讀取黑線的灰度值(如圖2),從而構(gòu)造出一個取代550的動態(tài)灰度閾值:動態(tài)灰度閾值=M+0.2M =1.2M(其中M為傳感器5實時讀取的黑線灰度值,加上0.2M的目的是允許一定范圍的誤差)。
● 具體做法
將傳感器1、2、3、4、5分別接在模擬口A1、A2、A3、A4、A5接口上,下文統(tǒng)一用A1代表模擬口A1獲取的傳感器1的灰度值,A5代表模擬口A5獲取的傳感器5的灰度值,以此類推。在ArduinoScratch軟件中,筆者用如上頁圖3所示的程序來讀取“動態(tài)灰度閾值”,并將程序定義為“讀取標準數(shù)”模塊,其中“hd”就是前面所說的“動態(tài)灰度閾值”,程序含義是:當灰度傳感器5在黑線上時,動態(tài)灰度閾值等于傳感器5實時讀取的灰度值的1.2倍,當灰度傳感器5脫離黑線時,動態(tài)灰度閾值等于灰度傳感器5離開黑線最后那一刻灰度值的1.2倍。
動態(tài)灰度閾值構(gòu)造出來后,就可以將它嵌入到巡線程序中,取代灰度閾值550。原四灰度傳感器夾線巡線程序如圖4所示,修改后的程序如圖5所示:調(diào)用“讀取標準數(shù)”模塊來讀取動態(tài)灰度閾值,然后把動態(tài)灰度閾值代替圖4中的灰度閾值550即可。
同理,修改后的左轉(zhuǎn)程序如圖6所示。其中“讀取模擬口A1量” “讀取模擬口A2量”等的意義與“讀取灰色傳感器(模擬)A1”“讀取灰色傳感器(模擬)A2”等相同。程序重復(fù)調(diào)用“讀取標準數(shù)”模塊來讀取動態(tài)灰度閾值以判斷黑線。
右轉(zhuǎn)等程序在此不再一一贅述。
● 實際成效
動態(tài)灰度閾值的構(gòu)造,大大優(yōu)化了Arduino小車的巡線程序,既解決了場地光線或噴繪工藝等因素影響而導(dǎo)致的比賽圖上白色區(qū)域灰度值變低的問題,又解決了上述因素導(dǎo)致的黑色區(qū)域灰度值增高的問題,顯著提高了巡線的準確性和成功率。筆者應(yīng)用優(yōu)化后的巡線程序在各種逆反射系數(shù)、分辨率、覆膜工藝不同的比賽圖上進行多次測試,巡線成功率高達95%以上。