陳 波,傅 攀,陸 軍
(西南交通大學 機械工程學院,四川 成都 610031)
兩輪自平衡車源于倒立擺,具有駕駛方式新穎、小型化、機動靈活、無污染等特點[1];同時,由于其具有非線性、強耦合性以及本質(zhì)不穩(wěn)定性[2],對其進行控制也成為檢驗算法的很好途徑。PID神經(jīng)網(wǎng)絡(luò)[3]是三層前饋動態(tài)網(wǎng)絡(luò),具有非線性,可用于動態(tài)系統(tǒng)辨識與控制。訓練好的PID神經(jīng)網(wǎng)絡(luò)可以作為兩輪小車的模型,在與平衡小車相同激勵的觸發(fā)下,其輸出近似小車的實際輸出,以其輸出為依據(jù),我們可以快速訓練NNC(神經(jīng)網(wǎng)絡(luò)控制)部分的網(wǎng)絡(luò),提高神經(jīng)網(wǎng)絡(luò)控制的實時性。因此,本文采用了PID神經(jīng)網(wǎng)絡(luò)進行系統(tǒng)辨識,并在NNC部分對傳統(tǒng)的控制器參數(shù)進行優(yōu)化,以改善小車的平衡性能。
基于AVR的兩輪小車的結(jié)構(gòu)和原理如圖1所示。它主要由車架、電機、編碼器、陀螺儀加速度計、驅(qū)動器和控制器組成。
圖1 基于AVR單片機的兩輪小車結(jié)構(gòu)和原理
本文所用編碼器為自制車輪轉(zhuǎn)向、轉(zhuǎn)速檢測模塊,碼盤固定于電機軸上,以切割紅外對管發(fā)出的紅外光,產(chǎn)生高低電平,進而對車輪信息編碼。每個車輪的狀態(tài)由兩個紅外對管進行檢測,一路作為中斷信號傳遞給ATmega16單片機,用于觸發(fā)中斷、計數(shù)和計算車輪轉(zhuǎn)速;中斷觸發(fā)時,另一路信號所具有的電平狀態(tài)作為判別轉(zhuǎn)向的依據(jù)。
本文采用的小車姿態(tài)信息檢測模塊是陀螺儀加速度計一體的MPU6050,自帶運算處理模塊,其輸出即為同一時刻的陀螺儀測量值(角速度)和加速度計測量值(角度),避免了分別用陀螺儀和加速度計單獨測量后再進行融合帶來的時差問題,使用方便。
該兩輪小車控制器以 ATmega16[4,5]為基礎(chǔ),主要用于接收編碼器和陀螺儀加速度計檢測到的小車姿態(tài)信息,然后進行運算并將控制信號傳遞給電機驅(qū)動器,以控制電機運轉(zhuǎn),使小車維持基本的平衡。
系統(tǒng)辨識網(wǎng)絡(luò)NNI結(jié)構(gòu)圖見圖2,它是將PID控制規(guī)律融入神經(jīng)網(wǎng)絡(luò)構(gòu)成的,其隱層節(jié)點分別為比例(P)、積分(I)、微分(D)單元,采用BP學習算法。
隱層的比例、積分、微分節(jié)點的激活函數(shù)q1,q2,q3分別為:
其中:xi(k)和qi(k)(i=1,2,3)分別為各隱層節(jié)點的第k次輸入、輸出。輸出層節(jié)點采用線性神經(jīng)元。
本文采用C語言[6]編寫神經(jīng)網(wǎng)絡(luò)辨識程序,通過對上一時刻來自編碼器、陀螺儀加速度計的數(shù)據(jù)進行處理,獲得小車上一時刻的狀態(tài)信息,包括角度、角速度、位置、位置微分;通過對這4個狀態(tài)量的運算處理,獲得對下一時刻小車電機的控制信號,即小車系統(tǒng)的輸入;并通過對下一時刻來自編碼器、陀螺儀加速度計的數(shù)據(jù)進行處理,獲得小車下一時刻的狀態(tài)信息,即小車系統(tǒng)的輸出。用獲得的“輸入/輸出”數(shù)據(jù)對系統(tǒng)辨識部分的PID神經(jīng)網(wǎng)絡(luò)進行訓練,獲得平衡小車的近似模型NNI。
(1)經(jīng)t步訓練后,隱層至輸出層權(quán)值調(diào)整算法為:
(2)經(jīng)t步訓練后,輸入層至隱層權(quán)值調(diào)整算法為:
其中:1wij(t)(j=1,2;i=1,2,3)為經(jīng)t次訓練后輸入層節(jié)點j與隱層節(jié)點i的連接權(quán)值;2wi(t)為經(jīng)t次訓練后隱層節(jié)點i與輸出層節(jié)點的連接權(quán)值;uj為輸入層節(jié)點j的輸入;xi(k)和qi(k)為隱層節(jié)點i的第k個輸入和輸出;x′(k)和y1(k)為輸出層節(jié)點的第k個輸入和輸出;η1和η2均為步長;e1(t)為經(jīng)t次訓練后小車實際輸出y與辨識網(wǎng)絡(luò)NNI輸出y1的偏差。
由于AVR中的控制器有4個輸入量、1個輸出量,本文神經(jīng)網(wǎng)絡(luò)控制(NNC)程序采用如圖3所示結(jié)構(gòu)。輸出層的神經(jīng)元為自適應(yīng)線性神經(jīng)元。
圖2 NNI結(jié)構(gòu)圖
圖3 NNC結(jié)構(gòu)
網(wǎng)絡(luò)權(quán)值調(diào)整算法如下:
其中:E(t)為目標函數(shù);wl(t)(l=1,2,3,4)為經(jīng)t次訓練后,輸入層第l個神經(jīng)元與輸出層神經(jīng)元的連接權(quán)值;η為步長;e(t)為經(jīng)t次訓練后期望輸出r與網(wǎng)絡(luò)實際輸出y的偏差;al為輸入層節(jié)點l的輸入。
本文中兩輪小車的控制原理見圖4,在基于AVR的兩輪小車的基礎(chǔ)上,利用PID神經(jīng)網(wǎng)絡(luò)對兩輪小車的模型NNI進行辨識,以兩輪小車某時刻的輸入和輸出作為辨識神經(jīng)網(wǎng)絡(luò)(PID神經(jīng)網(wǎng)絡(luò))的兩個輸入,將網(wǎng)絡(luò)的輸出y1與小車實際輸出y進行比較,如果兩者的偏差e1超過設(shè)定值,則通過BP算法對網(wǎng)絡(luò)權(quán)值進行調(diào)整,直到e1符合要求。當e1符合要求后,系統(tǒng)以NNI的輸出y1為小車實際輸出,通過與期望輸出r進行比較,得出偏差e2,然后通過BP算法在內(nèi)部不斷調(diào)整控制器網(wǎng)絡(luò)NNC,直到偏差e2滿足預設(shè)條件。當e2符合要求后,對應(yīng)的控制器參數(shù)就是得到優(yōu)化后的參數(shù),將其傳遞給AVR中的控制器變量,用以優(yōu)化小車的平衡性能。程序一直循環(huán)下去,實時控制小車的運行狀態(tài)。
圖4 基于PID神經(jīng)網(wǎng)絡(luò)的兩輪小車原理圖
圖4中,e為期望輸出與網(wǎng)絡(luò)實際輸出的偏差,u為控制器產(chǎn)生的控制信號,y1為在控制信號u和小車實際輸出y的作用下辨識網(wǎng)絡(luò)NNI的輸出,e1為小車實際輸出y與y1的偏差,e2為期望輸出r與y1的偏差。
基于PID神經(jīng)網(wǎng)絡(luò)的兩輪自平衡小車程序流程見圖5。
圖5 基于PID神經(jīng)網(wǎng)絡(luò)的兩輪小車程序流程圖
兩輪小車直立時,角度輸出約為90°,若小車前傾,輸出角度會減小;反之,則會增大。
由于小車的“平衡效果”指的就是小車直立時其Z軸繞垂線的波動范圍,波動范圍越小,表明小車平衡性越好,所以,用小車直立時的角度輸出曲線來分析小車的平衡性。
單純的基于AVR的兩輪小車的輸出曲線見圖6,經(jīng)過網(wǎng)絡(luò)優(yōu)化的兩輪小車的輸出曲線見圖7。
圖6 網(wǎng)絡(luò)優(yōu)化前角度曲線
圖7 網(wǎng)絡(luò)優(yōu)化后角度曲線
圖6、圖7顯示的角度是經(jīng)過10倍放大得到的,經(jīng)計算得知,未經(jīng)網(wǎng)絡(luò)優(yōu)化的角度波動范圍約±2.1°,網(wǎng)絡(luò)優(yōu)化后的角度波動范圍約±1.4°,小車平衡性能提高了約33.3%,表明神經(jīng)網(wǎng)絡(luò)對控制器參數(shù)起到了一定的優(yōu)化作用。
本文基于AVR的兩輪小車,運用神經(jīng)網(wǎng)絡(luò)對兩輪小車的控制器參數(shù)進行了優(yōu)化,并最終改善了兩輪小車的平衡性能。這證明:神經(jīng)網(wǎng)絡(luò)的確可以優(yōu)化兩輪小車的性能。
需要注意,用于波形顯示的角度數(shù)據(jù)是通過數(shù)據(jù)線以串口通信的形式傳遞給電腦串口調(diào)試助手進行顯示的,數(shù)據(jù)線會對小車的運動造成一定的干擾。
[1] 付勇杰.基于神經(jīng)網(wǎng)絡(luò)的兩輪自平衡代步車的研究[D].太原:太原理工大學,2012:1-38.
[2] 陸軍.基于PID和LQR控制的兩輪自平衡小車研究[D].成都:西南交通大學,2012:1-43.
[3] 徐麗娜.神經(jīng)網(wǎng)絡(luò)控制[M].北京:電子工業(yè)出版社,2009.
[4] 胡漢才.高檔AVR單片機原理及應(yīng)用[M].北京:清華大學出版社,2008.
[5] 胡漢才.高檔AVR單片機原理及應(yīng)用習題與實驗指導[M].北京:清華大學出版社,2008.
[6] 劉建清,孫保書,李鳳偉,等.輕松玩轉(zhuǎn)AVR單片機C語言[M].北京:北京航空航天大學出版社,2011.