基于智能車(chē)非勻速行駛記憶算法的研究和實(shí)現(xiàn)
硬件實(shí)現(xiàn)原理
按照競(jìng)賽的某些規(guī)定,本文設(shè)計(jì)了如圖1所示的硬件原理框圖。紅外傳感器采用一排13對(duì)紅外發(fā)射接收管,利用其接收的電平大小經(jīng)過(guò)MCU的ADC后由MCU 判斷當(dāng)前黑線所處的位置,為了降低功耗,系統(tǒng)中還增加了MOS開(kāi)關(guān)管,當(dāng)檢測(cè)某紅外傳感器時(shí)該傳感器供電打開(kāi),其余的則關(guān)閉。賽道中具有十字交叉路口,同時(shí)必須判斷起始(即終止線),因此智能車(chē)預(yù)先可以配置當(dāng)前賽道的總的十字交叉?zhèn)€數(shù),同時(shí)通過(guò)軟件算法可以判斷出是否經(jīng)過(guò)世紀(jì)交叉口(起始終止線可以作為一個(gè)十字交叉線)。系統(tǒng)運(yùn)行時(shí),按照紅外傳感器采集的信息可以判斷出當(dāng)前引導(dǎo)線的位置,即在小車(chē)的左邊、中間或右邊,偏離多少,MCU據(jù)此以及由Hall測(cè)速傳感器獲知的當(dāng)前小車(chē)的速度確定小車(chē)當(dāng)前的行為,主要控制舵機(jī)即小車(chē)的方向和電機(jī)即小車(chē)的速度。
圖1 系統(tǒng)硬件框圖
軟件控制算法
系統(tǒng)軟件控制主要包括兩部分,也即記憶算法的兩個(gè)過(guò)程,從行駛過(guò)程中看即第一圈和第二圈,其流程框圖如圖2所示。
圖2 系統(tǒng)軟件控制流程圖
初圈的控制和記憶
智能車(chē)在行使第一圈時(shí)的主要目的就是記憶賽道信息特征,并進(jìn)行一定的處理。按常規(guī)方法小車(chē)需要?jiǎng)蛩傩旭?,以便在固定的時(shí)間間隔或固定的路程間隔記憶相關(guān)的道路信息。數(shù)據(jù)記憶時(shí),采用了12個(gè)磁鋼的霍爾傳感器,車(chē)輪轉(zhuǎn)一圈得到12個(gè)計(jì)數(shù),即使在速度很快的情況下響應(yīng)時(shí)間也是us級(jí)的,精度足夠滿足要求。
在非勻速的條件下,采用了新的數(shù)據(jù)存儲(chǔ)格式。首先對(duì)當(dāng)前的狀態(tài)進(jìn)行彎直的判斷,根據(jù)迷糊控制得到的舵機(jī)的轉(zhuǎn)角值c_ang,判斷得到當(dāng)前車(chē)的彎直情況。同時(shí)由于車(chē)是非勻速行駛的,而第二圈所行駛的時(shí)間間隔和路程間隔也并不一定和第一圈完全相同,因此只判斷彎直情況,在彎道時(shí),記憶每一個(gè)測(cè)試點(diǎn)的轉(zhuǎn)角值,而直道時(shí),既沒(méi)必要存儲(chǔ)轉(zhuǎn)角,又可節(jié)省大量存儲(chǔ)空間,因此對(duì)于直道時(shí)只記憶直道的起點(diǎn)和終點(diǎn)路程,而該路程是小車(chē)相對(duì)于起始點(diǎn)的絕對(duì)路程,也即霍爾傳感器檢測(cè)到的磁鋼的個(gè)數(shù)ect_cnt。
系統(tǒng)按照前一狀態(tài)和當(dāng)前狀態(tài)的不同情況分別進(jìn)行數(shù)據(jù)存儲(chǔ),其算法如下:當(dāng)前一狀態(tài)是彎道,現(xiàn)狀態(tài)是直道時(shí),即彎直態(tài),則寫(xiě)入0x7f,ect_cnt,其中ect_cnt是當(dāng)前的路徑計(jì)數(shù);當(dāng)直直態(tài)時(shí),不存儲(chǔ);當(dāng)直彎時(shí),寫(xiě)入當(dāng)前的ect_cnt,0x7f,當(dāng)前的c_ang;當(dāng)彎彎時(shí),寫(xiě)入c_ang。系統(tǒng)初始化時(shí)為彎道,則開(kāi)始行駛后,進(jìn)入起跑線,此時(shí)檢測(cè)到是直道,進(jìn)入彎直狀態(tài),寫(xiě)入0x47和當(dāng)前的ect_cnt,這就是道路的起始存儲(chǔ)數(shù)據(jù)。
數(shù)據(jù)的分析及處理
第二圈過(guò)起跑線時(shí),系統(tǒng)配置成進(jìn)入彎直狀態(tài),此時(shí)應(yīng)該根據(jù)第一圈記錄的數(shù)據(jù)算出直道的長(zhǎng)度,這樣車(chē)在直線上就可以以很高的速度行使,并且能夠提前減速,安全進(jìn)彎,達(dá)到很好的控制效果。
在由直線進(jìn)彎時(shí),如果在彎道中出現(xiàn)直道,并且計(jì)算出其長(zhǎng)度小于某一值的時(shí)候,認(rèn)為是過(guò)彎過(guò)程中出現(xiàn)的小范圍的直線,仍按照彎道處理。本算法的核心也在于如何過(guò)濾彎道中出現(xiàn)的直道,以及從分析不同的彎道形式。把彎道分成以下幾類(lèi):
?。╝) 急彎:這里所說(shuō)的急彎也就是競(jìng)賽規(guī)定的曲率最小的彎。在急彎時(shí),轉(zhuǎn)角的個(gè)數(shù)相對(duì)較少,轉(zhuǎn)角值相對(duì)較大,并且在正常情況下所有的都是同向的。
(b)圓形彎道:相比于其他幾種賽道元素,圓形賽道的識(shí)別比較簡(jiǎn)單,當(dāng)同一個(gè)方向的轉(zhuǎn)角大于某一個(gè)數(shù)值時(shí),并且中間過(guò)程中沒(méi)有換向發(fā)生,便可以認(rèn)為小車(chē)進(jìn)入了圓形賽道。因?yàn)樵诮嵌鹊目刂粕?,本系統(tǒng)采用了模糊控制,車(chē)在進(jìn)彎時(shí)能夠迅速調(diào)整角度,并以一個(gè)恒定的角度過(guò)彎,以上的數(shù)據(jù)是驗(yàn)證了這一結(jié)果。
(c)小S彎:小S彎的特點(diǎn)是:在過(guò)彎的整個(gè)過(guò)程中既有左轉(zhuǎn)又有右轉(zhuǎn)的,并且左轉(zhuǎn)角度的個(gè)數(shù)和右轉(zhuǎn)角度的個(gè)數(shù)都應(yīng)該大于某一個(gè)值。此外,單次左轉(zhuǎn)或者右轉(zhuǎn)的角度的個(gè)數(shù)小于某一個(gè)值??紤]到小S的前后可能會(huì)接著其他彎道,本系統(tǒng)在第一個(gè)換向點(diǎn)之前,按照其彎道行走,在換向點(diǎn)之后采取小S的行走策略,在最后一個(gè)換向點(diǎn)之前結(jié)束。
?。╠)大S彎:大S相比小S而言,其賽道特征是相似的,只是判斷的標(biāo)準(zhǔn)稍有不同。首先,大S之間有較長(zhǎng)距離的直道,必須加大直道的判斷范圍才能將其過(guò)濾掉。其次,單次左轉(zhuǎn)或者右轉(zhuǎn)的角度的個(gè)數(shù)應(yīng)該大于小S的個(gè)數(shù)。