對(duì)于小車的控制算法,神經(jīng)網(wǎng)絡(luò)應(yīng)該是不錯(cuò)的選擇。但是很多人沒有用,我想是計(jì)算量和收斂特征的問題導(dǎo)致大家在研究算法時(shí)不敢越雷池。神經(jīng)網(wǎng)絡(luò)的研究一般是基于OFF-LINE的,而飛思卡爾比賽用的只是MCU的ON-LINE模式的,這似乎就有了矛盾;另外,神經(jīng)網(wǎng)絡(luò)無論在分類還是擬合作用上,計(jì)算精確性并不是100%,這也是航空技術(shù)不用神網(wǎng)的原因。 此篇博文主要討論神經(jīng)網(wǎng)絡(luò)用在小車控制算法上的可能性以及如何利用神經(jīng)網(wǎng)絡(luò)于小車控制算法。
想必自動(dòng)化的學(xué)生都對(duì)控制模型的建模有很深的印像,有的碩士論文就是研究這些模型。一般用機(jī)理分析法和系統(tǒng)辨識(shí)法對(duì)實(shí)驗(yàn)數(shù)據(jù)建模,得到傳遞函數(shù),然后通過調(diào)試實(shí)際系統(tǒng),從開環(huán)到閉環(huán),不斷調(diào)整參數(shù)和控制參數(shù)。舉個(gè)例子:要建立小車直線、弧線行走的控制模型,即通過實(shí)測(cè)數(shù)據(jù)建立驅(qū)動(dòng)控制和小車轉(zhuǎn)彎偏移量的關(guān)系,那么輸入的參數(shù)是當(dāng)前速度,曲率大小,轉(zhuǎn)彎弧度,最大安全速度,目前偏移角度等等參數(shù),而輸出的就是目標(biāo)速度,目標(biāo)角度。這個(gè)輸入和輸出之間的關(guān)系就是控制模型,一般也叫控制器。小車跑得快,跑得穩(wěn),主要就是這個(gè)”控制器“,控制器擬合得好,適應(yīng)性強(qiáng),OK,成績(jī)就不差。
說了半天,小車控制算法要解決的問題是: 輸入——>控制模型——>輸出控制參數(shù)。
按一般的方法,控制模型的建立需要大量數(shù)據(jù),離線在線都必需調(diào)試多遍,系統(tǒng)的適應(yīng)性不佳。而嘗試神經(jīng)網(wǎng)絡(luò),這些問題就都可以很大程度地避免了。
1 首先,有必要介紹一下神經(jīng)網(wǎng)絡(luò),到底神經(jīng)網(wǎng)絡(luò)是干什么用的,如何用。神經(jīng)網(wǎng)絡(luò)的理論并不復(fù)雜,我想是有些書或論文把簡(jiǎn)單問題復(fù)雜化了。大家不要對(duì)它恐懼。一堆數(shù)據(jù)A,通過一個(gè)NET不斷調(diào)整,得到另一堆數(shù)據(jù)B。而A和目標(biāo)結(jié)果數(shù)據(jù)C都是已知的,NET是未知的,這個(gè)調(diào)整NET的過程就是訓(xùn)練,NET訓(xùn)練好的結(jié)果是使B和C的誤差最小,誤差合理就收斂。收斂完了,這個(gè)NET就可以用了。神經(jīng)網(wǎng)格的核心就是得到一個(gè)NET。控制模型就是一個(gè)NET,NET包含很多參數(shù),如權(quán)值,隱含層數(shù),訓(xùn)練方法,神經(jīng)元模型,傳遞函數(shù)等,只要建立一個(gè)NET,那么輸入和輸出的關(guān)系就建立起來了。
神經(jīng)網(wǎng)絡(luò)主要有兩個(gè)作用:一個(gè)是分類,另一個(gè)是回歸(擬合)。如果把它運(yùn)用于小車控制算法,毫無疑問是用于回歸擬合的功能。回歸什么呢?對(duì),回歸上面所說的控制模型,這個(gè)NET就是控制器。
神經(jīng)網(wǎng)絡(luò)用于小車控制算法上的優(yōu)勢(shì)比較明顯,模型可以隨時(shí)調(diào)整,而且模型不是通過公式表示,只是一個(gè)NET來表達(dá),避免復(fù)雜的參數(shù)調(diào)整和試算過程。通過新的環(huán)境參數(shù)得到新的NET,增強(qiáng)系統(tǒng)的適應(yīng)性。
為什么有些車在自己的場(chǎng)地上跑得好好的,在其它的場(chǎng)地上就不行呢?
為什么有些車不斷地調(diào)整控制模型,控制效果卻不好呢?
如何選擇控制器的輸入?yún)?shù),參數(shù)的權(quán)重如何介定呢?
。。。。。。。。
一系列的問題,神經(jīng)網(wǎng)絡(luò)可以給大家答案。
2 WJ本人對(duì)神經(jīng)網(wǎng)絡(luò)用于小車控制的一點(diǎn)思考。
神經(jīng)網(wǎng)絡(luò)常用的一般有:感知器,BP,HOPFILED,RBF,ANN,ART和Kohonen網(wǎng)絡(luò)。如果不用工具箱函數(shù)(即MATLAB的API函數(shù)),自己寫的話,無所謂,說不定自己可以創(chuàng)造一種網(wǎng)絡(luò)。只要收斂快,計(jì)算量小,泛化性能好,網(wǎng)絡(luò)耗費(fèi)資源小就行,話說起來簡(jiǎn)單,卻有一定難度。但是小車的需求低,精度無需太高,因此應(yīng)該來說比較容易實(shí)現(xiàn)。
神經(jīng)網(wǎng)絡(luò)比PID,模糊控制,遺傳算法,bangbang等算法,更宏觀,可以理解為從系統(tǒng)整體入手建模。但是正如本博文開頭所說:計(jì)算量和收斂性必需保證,神經(jīng)網(wǎng)絡(luò)才有運(yùn)用的可能性。WJ建議從以下幾個(gè)方面解決這兩個(gè)問題:
(1)不要指望神經(jīng)網(wǎng)絡(luò)的實(shí)時(shí)性。神經(jīng)網(wǎng)絡(luò)最要命的耗費(fèi)時(shí)間是訓(xùn)練,神經(jīng)網(wǎng)絡(luò)在車運(yùn)行時(shí)進(jìn)行一兩次成功的訓(xùn)練即可。在小車跑直線時(shí)通過獲得的數(shù)據(jù)訓(xùn)練,因?yàn)橹本€時(shí)CPU會(huì)有空閑時(shí)間。另外,相信大家經(jīng)常用撥碼開關(guān)去選擇多種控制決策,這不失一種方法。但是,這個(gè)控制決策是死的,也是事先規(guī)劃好的,必定不能適應(yīng)新的KT板的各種路徑。
(2)最好用片內(nèi)FLASH或SD卡,數(shù)據(jù)的處理是很重要的,數(shù)據(jù)也非常寶貴的,把數(shù)據(jù)存起來,傳給PC,OFFLINE時(shí)研究神經(jīng)網(wǎng)絡(luò)的算法(有無數(shù)種訓(xùn)練算法),這是其一。其二,訓(xùn)練好的網(wǎng)絡(luò)存在SD卡里,下次如果需要再訓(xùn)練,從老的網(wǎng)絡(luò)開始(一般網(wǎng)絡(luò)權(quán)值是隨機(jī)開始),效率會(huì)高很多。
(3)正如數(shù)據(jù)融合一樣,有決策層和數(shù)據(jù)層的融合,神經(jīng)網(wǎng)絡(luò)也一樣,有決策層和數(shù)據(jù)層的運(yùn)用。由于小車的路徑是連續(xù)的,那么數(shù)據(jù)層的神經(jīng)網(wǎng)絡(luò)肯定是用得著的。在圖像采集里,一般是40mS采集一次路徑并做控制判決,那么這40mS的時(shí)間不夠用怎么辦?大家常用的一種方法是干脆80mS采集一次。我的建議是前60ms采集一次圖像并作控制決策。后20ms運(yùn)用前4Oms提取的路徑信息并用神網(wǎng)預(yù)測(cè)路徑的變化,這么一來相當(dāng)于在20ms的時(shí)間里采集了一次圖像??上攵?,效率提高了。
(4)上面是從數(shù)據(jù)層采用神經(jīng)網(wǎng)絡(luò),這里講一下從決策層采作神經(jīng)網(wǎng)絡(luò)。舉個(gè)例子,假如控制器的輸出-3 -2 -1 0 1 2 3分別代表舵機(jī)左偏30,左偏20,左偏10,直行,右偏10,右偏20,右偏30,而小車前7次的控制決策是:直行,右偏10,直行,左偏10,直行,右偏10,直行,(0 1 0 -1 0 1 0 )。。。。,那么第8次的決策通過神網(wǎng)應(yīng)該就是左偏(-1)。如果實(shí)際需要的不是左偏的話,就應(yīng)該把神網(wǎng)“懲罰”一下。
(5)尋找合適的誤差閾值。小車尋跡不像激光切割,精度要求并不高。其訓(xùn)練的誤差值可以“商量”的。
(6)神網(wǎng)的訓(xùn)練數(shù)據(jù)不是抓到一個(gè)就可以的,是要選擇的。但這個(gè)選擇也是要耗時(shí)間的,如果是在PC上,F(xiàn)CM(模糊聚類)是不錯(cuò)的選擇。但是MCU是扛不起這個(gè)重任的,于是選擇合適的訓(xùn)練數(shù)據(jù)和目標(biāo)數(shù)據(jù)也是一個(gè)重要的研究話題。這里,如何優(yōu)化神網(wǎng)輸入不是重點(diǎn),略過。
(7)重視歸一化處理和神經(jīng)網(wǎng)絡(luò)訓(xùn)練算法。這兩點(diǎn)很重要,歸一化可以理解為把(100 45 -67 90)歸一化為(1 0.45 -0.67 0.9),好處是改進(jìn)數(shù)據(jù)的規(guī)范性,加快收斂。另外訓(xùn)練算法的重要性不言而喻,如用梯度下降法訓(xùn)練法使誤差達(dá)到最小,什么是梯度下降法呢?打個(gè)比方,你要下山,山前的坡度是30度,山后是懸崖坡度是90度,要下山快,當(dāng)然是找坡度大的直接跳。這個(gè)下山坡度和訓(xùn)練梯度是同一個(gè)含義
(8)個(gè)人覺得利用神經(jīng)網(wǎng)絡(luò)進(jìn)行速度控制有較大優(yōu)勢(shì),比PID控制起來精度會(huì)有些缺陷,但速度快。由于摩阻力,小車動(dòng)力性能,小車驅(qū)動(dòng)性能,電池等原因,需要對(duì)速度閉環(huán)控制。假如:小車以單位時(shí)間10ms為節(jié)拍,速度從X1m/s->Y1m/s,需要PWM為d1%占空比,速度從X2m/s->Y2m/s,需要PWM為d2%占空比.......速度從Xn m/s->Yn m/s,需要PWM為dn%占空比,那么以(X,Y)為訓(xùn)練輸入,(D)為訓(xùn)練輸出,建立神經(jīng)網(wǎng)絡(luò)并訓(xùn)練,那么建立起PWM和速度控制之間的關(guān)系是非常輕易的事。
評(píng)論