謝智陽,龐項文
(1.河源職業技術學院 機電工程學院,廣東 河源 517000;2.河源市工業機器人技術應用工程技術研究中心,廣東 河源 517000)
競速小車按尋跡傳感器進行分類大致包含光電傳感器導航[1]、電磁導航[2]、CCD 攝像頭導航[3]和激光雷達導航[4].光電傳感器導航有成本低廉、易于實現等優點,一直以來都是簡易尋跡小車的研究熱點.競速小車的成績除受尋跡傳感器的影響之外,尤為重要的是其控制算法的優劣會在競速賽中起到關鍵性的作用,然而小車在直道行駛中很難體現出各自的差距,因此研究如何快速通過彎道是算法設計的重點.
文獻[5]研究了在停車過程中采用了梯形規劃曲線的停車策略,初步解決了停車過程中減速距離短、平穩性差的問題;文獻[6]采用強化學習的方法在一定程度上解決了智能車路徑認知的問題;文獻[7-8]在智能車避障和多工況方面作了較深入的研究.鑒于前人對過彎策略研究的較少,可借鑒的經驗很難從文獻中找到,且缺乏系統性的研究策略.筆者以開源的Arduino UNO 單片機為控制核心構建了競速小車,并用固定參數的PID 算法和模糊PD 算法進行了系統性的過彎策略研究.
系統主要由Arduino UNO 單片機、八路光電傳感器探測模塊、陀螺儀模塊、紅外避障傳感器、電機驅動模塊和轉向系統組成.Arduino UNO 單片機為主控模塊,負責采集各種傳感器的輸入信號和控制算法的運算;八路光電傳感器探測模塊負責探測小車相對于賽道的偏離情況,并將探測結果反饋至主控單片機;陀螺儀模塊負責探測小車的傾斜角,用以判斷小車是處在平道、上坡和下坡3 種狀態中的何種狀態;賽道終點處設有障礙物,當紅外避障傳感器探測到前方有障礙物時,實現停車功能.
尋跡模塊采用TCRC5000 紅外傳感器,紅外傳感器采集到路徑信息通過比較器后直接傳到MCU 進行處理,同時JY901 陀螺儀捕捉角度信號輸入MCU,MCU 統一將各傳感器輸入數據進行綜合判斷、運算,并輸出信號控制舵機及電機驅動模塊BTS7970.

圖1 系統硬件結構
電機驅動模塊選用BTS7970,該電機驅動模塊具有功率大、性能穩定、體積緊湊等特點,非常適合小車的電機驅動,其原理見圖2.

圖2 單路電機驅動原理
八路光電傳感器探測模塊選用TCRC5000 紅外模塊,此模塊集成度高、布局靈活、接線簡易.為保證小車具有較好的前瞻性,尋跡模塊安裝在距小車前車輪9~10 cm 處.安裝位置距離過長會導致小車上坡時與賽道發生剮蹭,到達坡頂時易丟失信號;距離過短會導致實時性不強,速度受限.探測模塊共由八組紅外光電傳感器組成,根據本賽道的實際寬度,每組紅外光電傳感器的間隔為2.5 mm,具體布局見圖3,若改變賽道黑線的實際寬度,則需重新調整紅外光電傳感器的間距.

圖3 八路光電傳感器探測模塊布局

圖4 軟件系統結構
在結合文獻[9-12]的基礎上,設計并優化本系統的控制策略,系統總體執行流程見圖4.系統軟件流程包含常規模式和模糊PD 模式,常規模式執行經典的固定參數PID 算法,模糊PD 模式則執行參數根據賽道實際情況參數可變的模糊PD 算法,且引入陀螺儀傳感器,用以實現坡度檢測功能,能有效防止小車因車速過快沖出賽道.
TCRC5000 紅外模塊是開關量輸入,即壓黑線為低電平,沒壓黑線為高電平,因此只需讀取相關IO 端口的電平狀態便可獲知相關傳感器是否壓到黑線,如想把零亂的8 個傳感器的輸入值反饋至控制算法中計算就必須對傳感器輸入的值進行組合量化排序.首先對與傳感器連接的IO 端口進行初 始化,把IO 口設置成輸入模式以讀取傳感器輸入的高低電平信號,用for循環將8 組傳感器的值存至一個八位數組里,并按表1 的映射關系進行映射,映射前,尋跡模塊的探測精度為1/8,映射后的探測精度為1/15,在不增加硬件成本的情況下,將探測精度提升一倍,有效保證競速小車行駛的穩定性.
小車驅動電機采用BTS7970 電機驅動進行驅動,該電機驅動模塊引出4 個引腳IN1~IN4 供用戶操作,IN1 和IN2 控制左輪,IN3 和IN4 控制右輪.本文重點研究了如何在不脫離賽道的前提下快速通過彎道,處理方式主要是直道以正常速度行駛,在進入彎道時進行減速同時給予兩個輪相應的差速以模擬真車的差速器來達到過彎時更順暢快速,彎道的減速處理將傳感器位置和電機進行關聯,具體策略見公式(1).

公式(1)中V 為期望速度,即小車在該賽道上的上限速度;Kp為比例參數;error 為小車的方向偏離值.小車無偏離時,偏離值為0,誤差隨黑線偏離中間傳感器距離增大而增大,一邊誤差為正一邊為負具體偏離值的映射值見表1.

表1 傳感器映射關系

表2 有差速的對應

表3 無差速的誤差
由表2 和表3 可知,有無差速的各個誤差的左右電機的PWM 對應關系,其差速與誤差成一定的線性關系,會根據賽道的路況的變化而變化,具有一定的適應性,性能表現會比一般的等速過彎有顯著的提升.
PID 參數整定過程是理論與工程實踐經驗相互結合的過程,實驗前需結合小車模型大致推算出PID 參數的范圍,工程實踐中需反復調試參數進行實驗分析,從而得到最佳的PID 參數組合.
PID 的經典公式為:

由圖5 和PID 的經典公式可知,經典的PID 控制算法由期望值、反饋值、比例項調節參數、積分項調節參數、微分項調節參數和輸出值構成.
由經典的PID 公式得出本文的數字PID 公式(3).

由公式(3)和圖5 可知,PID 的輸入為誤差error、輸出為舵機PWM 的關聯值out,此值經換算后為舵機的PWM 值.

圖5 本文數字PID 框架
第一步,整定比例參數Kp,此時微分參數和積分參數為零,即out=Kp*error,實驗結果見圖6.
由圖6 可知Kp為7 時,整個系統的反應速度快,但震蕩也較大,且震蕩頻率會相對較高.
Kp為2 時,整個系統的反應速度會變得非常緩慢,但到了引導線后波動不大,該參數的應變能力不強,不適合用于賽道.
本文采用比較折中比例參數,即Kp為4,從圖6 可看到該參數在震蕩和系統響應速度上都比較理想.
經實驗分析,比例參數相對較大時,系統反應會迅速,但系統的震蕩也會很大,誤差會在期望值間來回震蕩,整個系統顯得很不穩定且效率低下,并不理想.而把比例值調到相對較小時,系統的反應就會相對緩慢,越小越慢,由于比例值小所以到了期望值后它的震蕩不會很明顯,但響應遲鈍.增大Kp則響應快但震蕩大,減小Kp則震蕩小但響應慢,這是一個矛盾體,因此經典的PID 算法在Kp的基礎上引入積分參數,當Kp調到系統適中的時候,固定Kp,緊接著調試Ki,具體見公式(4).

圖6 比例值大小效果對比

公式(4)中的error_sum 是誤差進行自我累加的結果,如果進行操作后誤差還沒消除,error_sum 便會愈加愈大,操控的力度也會愈大,直到消除誤差,它便會漸漸減小,直至為0.積分參數在消除靜態誤差效果比較好,如果誤差較大且短時間內修正不好的話,error_sum 便會累加到系統的極限,會超過相應的硬件的執行極限,導致系統崩潰,此時要進行積分分離處理,操作相對復雜.對此,選擇屏蔽積分參數,即Ki=0.
其實只引入比例項參數Kp時,已經得到初步的尋跡效果,但想得到更好的過彎的效果,便要引入微分項參數Kd.本文重點對引入微分項參數Kd進行實驗分析,見公式(5),通過實驗得到最佳的微分項參數Kd.

在Kp的基礎上引入微分項參數Kd會起到預測變化、抑制誤差增大的作用,彌補Kp比例的缺陷.微分簡要的說是把當前誤差與上次誤差進行比較,來得出它的變化曲線、變化規律,再施加一定的阻尼力,讓誤差接近0 時減小調節力度,使小車可從震蕩中恢復過來,增加動態穩定性,提高小車的抗干擾性.
由于賽道路況較復雜,若想獲得極佳的過彎效果,固定參數的PID 算法還不足以適應復雜的賽道情況,為了得到更快的過彎速度,需對PID 算法參數進行簡單的模糊化.經過多次實驗分析,本文重點對PD參數進行實驗整定,模糊控制器總體框架見圖7.
模糊控制器的輸入量為誤差e 與誤差的變化率ec,輸出為PD 控制器的比例參數Kp和微分參數Kd的語言變量,本文的Kp、Kd的模糊子集為{負、零、正},模糊規則見表4,Z1 為激進PD 參數,Z2 為中等偏激進PD 參數,Z3 為中等折中PD 參數,Z4 為保守PD 參數,參數再根據計算和經驗進行賦值.

圖7 模糊控制器架構
單獨運用固定參數的PID 算法并不能很好的適應賽道,在長直道入彎的時候由于慣性的作用使小車偏離賽道甚至有沖出賽道的可能,且過彎后恢復穩定的時間過長,并不適合該賽道使用,因此本文在固定參數的PID 的基礎上加入了模糊規則,使系統具有一定的適應性.根據圖8 的實驗結果可知,相比于固定參數的PID 算法,模糊PD 算法能穩定、快速的通過彎道,且小車擺動幅度較小.

表4 模糊規則表

圖8 模糊后的小車過彎行徑
(1)設計了由Arduino UNO 單片機、八路光電傳感器探測模塊、陀螺儀模塊、紅外避障傳感器、電機驅動模塊和轉向系統組成的競速小車.
(2)筆者分別從比例算法、固定參數PD 算法和模糊PD 算法進行了系統性的實驗研究.實驗結果表明,固定比例算法、固定參數的PD 算法在直道上與模糊PD 算法并無明顯差異,而在彎道上模糊PD 算法明顯優于固定參數PD 算法和比例算法.同時,給出了詳細的調參過程和實驗數據分析,為競速小車過彎策略研究提供了重要的試驗經驗.