荊 鑫
(1.黑龍江科技大學研究生學院,黑龍江 哈爾濱 150028 ;2.布達佩斯科技和經(jīng)濟大學電氣工程與信息學院,匈牙利 布達佩斯 1114)
自動汽車駕駛系統(tǒng)對提高駕駛員的安全和進一步減少交通事故中的傷亡產(chǎn)生了積極影響[1]。近年來,各種各樣的傳感器和控制器憑借成本低和精度高的優(yōu)點,可以很容易解決現(xiàn)實生活中自動駕駛汽車的許多問題。目前,已經(jīng)安裝了半自動或全自動泊車輔助系統(tǒng)的汽車有福特??怂埂⒇S田普銳斯和梅賽德斯。特斯拉、奧迪和谷歌等公司也在向市場推出安全可靠的自動駕駛系統(tǒng)[1]。Arduino是一個操作方便、易于使用的開源編程平臺[2],它可以在Windows、Macintosh OS X和Linux三大主流操作系統(tǒng)上運行。對于初學者來說,極易掌握,同時它在編程方面也有足夠的靈活性。簡單的開發(fā)方式使學習者能更快地完成項目的研究開發(fā)工作,大大節(jié)約了學習的成本,縮短了開發(fā)的周期。它具有C語言的開發(fā)環(huán)境,主要包括Arduino電路板和 Arduino IDE開發(fā)環(huán)境。選擇Arduino作為智能小車控制器的原因是它能通過控制各種各樣的傳感器來感知周圍環(huán)境,具有大量的可用庫和豐富的接口,例如數(shù)字I/O口、模擬I/O口,同時它還支持SPI、IIC和UART串口通信。自動并行泊車技術(shù)需要小車精確控制移動軌跡以及仔細觀察周圍的環(huán)境,因此,通過Arduino實現(xiàn)自動并行泊車是一個可行的計劃。
根據(jù)合理假設(shè)來編寫泊車算法和放置超聲波傳感器。模擬小車在真實環(huán)境的道路右側(cè)以恒定的轉(zhuǎn)速向前行駛,準備尋找可用泊車位進行泊車。在這種情況下,假設(shè)小車的右側(cè)由已經(jīng)停放的車輛和泊車位組成,小車上共設(shè)置2個超聲波傳感器,分別設(shè)置在小車的正前方和右側(cè)后方。在向前直行的過程中,右側(cè)超聲波傳感器檢測車輛與右側(cè)障礙物的距離,判斷該距離是否大于預(yù)設(shè)的泊車位寬度。如果車輛與右側(cè)障礙物的距離達不到預(yù)設(shè)值,那么小車將繼續(xù)行駛。如果寬度滿足要求,那么小車繼續(xù)行駛,從而測量泊車位的長度;如果長度也達到程序中設(shè)計的數(shù)值,那么小車停止前進,并執(zhí)行并行泊車的動作。否則,小車會繼續(xù)前進尋找合適的停車位。自主泊車過程如圖1所示。

圖1 自動泊車過程
Arduino是一個功能強大的控制器,它可以用來構(gòu)建數(shù)字設(shè)備和交互對象,從而感知和控制周圍的物理環(huán)境。ATmega2560是一款基于AVR增強RISC架構(gòu)的低功耗CMOS 8位微控制器,它有54路數(shù)字輸入/輸出端口(其中15個可以作為PWM輸出)和16路模擬輸入,電路板如圖2所示。通過pinMode()、digitalWrite()和digitalRead()等功能,Mega上的54個數(shù)字引腳都可以用作輸入或輸出。Arduino Mega 2560在5 V的電壓下工作,可以通過3種方式供電,而且能自動選擇供電方式。在自動泊車實驗中,選擇USB接口直接供電。Mega 2560作為小車的控制中樞,驅(qū)動小車的直流減速電機使小車按照設(shè)計者的意愿進行運動,超聲波傳感器也連接到Arduino板并集成到自動泊車系統(tǒng)中。因此,可以將程序上傳至Arduino Mega 2560電路板,從而實現(xiàn)智能小車的自動泊車[3]。

圖2 ArduinoMega2560
在智能小車上搭載2個HC-SR04超聲波傳感器,分別放置在小車的正前方和右后側(cè),測量小車與前方障礙物和右側(cè)障礙物的距離,該傳感器可以在2 cm~400 cm的距離內(nèi)提供測距功能,測距精度可以達到0.3 cm。HC-SR04有4個引腳,其中“Trig”引腳和“Echo”引腳與Arduino Mega 2560的數(shù)字口相連,并以高低電平的方式傳輸距離信息[4]。另外2個引腳為傳感器供電。超聲波傳感器可以使智能小車在行進過程中及時發(fā)現(xiàn)障礙物,并及時引導(dǎo)智能小車轉(zhuǎn)向,從而避開障礙物。
采用尾部帶A、B相位編碼器的直流減速電機,該電機可以直接輸出方波,不需要添加電路。在編寫程序時,把前一個A、B相位的輸出值保存起來,將其與下一個A、B相位的輸出值做比較,循環(huán)往復(fù),就可以得出碼盤轉(zhuǎn)動的方向和轉(zhuǎn)速,再用碼盤轉(zhuǎn)動的方向和轉(zhuǎn)速判斷小車的行進方向和行進速度[5]??梢該?jù)此設(shè)計一個PID算法來保持小車左右電機的轉(zhuǎn)速相同,使其穩(wěn)定地向前行駛。
超聲波測距裝置的主要原理是根據(jù)發(fā)射超聲波和接收超聲波產(chǎn)生的時差測算小車與障礙物的距離[6]。超聲波傳感器向一定方向發(fā)射超聲波,同時開始計時,超聲波在空氣中傳播,遇到障礙物后超聲波立即返回,超聲波傳感器收到反射波就會立即停止計時。已知超聲波經(jīng)過的總路程L=[(T×344)/2],則T=(2L)/344=0.0058L(T為時間)。具體原理如下:1)先在Trig端輸入1個長為2 μs的低電平方波,再在Trig端輸入1個長為10 us的高電平方波。2)輸入方波后,傳感器會自動發(fā)射8個40 kHz的超聲波,檢查是否有信號返回。如果有信號返回,那么發(fā)射超聲波測距,Echo端的電平由0變?yōu)?,定時器開始計時。3)當返回的超聲波被傳感器接收時,Echo端的電平由1變?yōu)?,定時器停止計時,定時器記錄的時間差即為超聲波由發(fā)射到返回的時長。
在小車行駛的過程中,保證小車筆直前進的前提是要保持小車左右電機的轉(zhuǎn)速相同。PID調(diào)節(jié)器是一種算法簡單、魯棒性好和可靠性高的控制策略,適用于可建立精確數(shù)學模型的控制系統(tǒng)。在自動并行泊車系統(tǒng)中選擇使用增量式PID控制算法。如圖3所示,給定參考值r(t)和實際輸出值c(t)構(gòu)成控制偏差e(t),PID調(diào)節(jié)器通過線性組合將偏差的比例、積分以及微分構(gòu)成控制量u(t),用控制量對被控對象進行控制。r(t)為預(yù)先設(shè)定小車電機的轉(zhuǎn)速,c(t)為小車實際電機的轉(zhuǎn)速,e(t)=c(t)-r(t)為轉(zhuǎn)速誤差,將e(t)作為PID控制器的輸入、u(t)為PID控制器的輸出,并作用到小車電機上。比例系數(shù)的作用是對速度偏差作出反應(yīng)。電機轉(zhuǎn)速偏差一旦產(chǎn)生就會使小車速度向偏差減少的方向變化。積分環(huán)節(jié)會消除靜態(tài)誤差,只要存在轉(zhuǎn)速偏差,積分作用就會不斷增大。微分環(huán)節(jié)的作用是阻止偏差的變化,偏差變化越快,微分環(huán)節(jié)的輸出就越大[7]。
PID調(diào)節(jié)器通過改變輸出PWM的值(范圍為0~255)來改變電機的轉(zhuǎn)速。r為設(shè)定轉(zhuǎn)速,n為實際轉(zhuǎn)速,u為PWM的輸入。通過A、B相位測出電機的轉(zhuǎn)速,與設(shè)定值比較得到轉(zhuǎn)速誤差,將轉(zhuǎn)速誤差送進PID調(diào)節(jié)器進行處理,最終消除小車的轉(zhuǎn)速誤差,使左右電機的轉(zhuǎn)速相等。
小車以恒定的轉(zhuǎn)速直線行駛,與右側(cè)路沿保持固定距離d,此時變量park_status的值為0。當小車經(jīng)過一個泊車位時,側(cè)面超聲波傳感器將判斷該泊車位的寬度是否大于設(shè)定的寬度B。如果寬度不夠,小車將繼續(xù)行駛;如果寬度足夠,小車將繼續(xù)行駛以測量泊車位長度L(如圖4所示),此時變量park_status的值為1。右側(cè)傳感器首次測量到距離大于設(shè)定的停車寬度為t1時刻,變量park_status的值變?yōu)?。右側(cè)傳感器測量到距離小于設(shè)定的停車寬度為t2時刻,變量park_status的值變?yōu)?。再根據(jù)已知的電機轉(zhuǎn)速就可以得出泊車位的長度。由此可以完成對泊車位的選擇。泊車位的判斷程序如下。


圖3 PID調(diào)節(jié)器
在找到合適的泊車位后,小車開始倒車。首先,當變量park_status=4時,小車先向后倒退一段距離,這是為了留出緩沖區(qū),避免在倒車時與其他障礙物碰撞。其次,讓小車右側(cè)電機停止轉(zhuǎn)動,左側(cè)電機向后轉(zhuǎn)動,調(diào)整姿態(tài)后,向后倒退。再次,保持小車左側(cè)電機停止轉(zhuǎn)動,右側(cè)電機向后轉(zhuǎn)動。此時小車車體幾乎全部進入泊車位。最后,只需要對小車姿態(tài)進行微調(diào),就可以完成泊車,該操作完成后給變量park_status賦值為5。當變量park_status=5時,2個傳感器測量小車與右側(cè)障礙物和前方障礙物的距離。如果距離大于設(shè)定值,就再次微調(diào)小車的姿態(tài),直到兩側(cè)距離都小于設(shè)定值。完成之后給變量park_status賦值為6,小車停止運動,完成整個自動泊車過程。自動泊車的程序如下。



圖4 測量泊車位長度
測試時將小車放置在模擬道路的起點,在小車的前方右側(cè)預(yù)留1個足夠小車泊車的泊車位。如果小車在不碰撞的情況下完全進入泊車位,就說明自動并行泊車系統(tǒng)設(shè)計成功。由于每次測試時小車的運動軌跡并不完全一致,例如電機編碼器的精度限制和小車的車輪滑移都會導(dǎo)致小車的運動軌跡發(fā)生改變。因此多次測試泊車過程并手動調(diào)試代碼后,消除了實際誤差,證明自動泊車實驗成功。
該設(shè)計開發(fā)的自動并行泊車系統(tǒng)具有良好的性能。根據(jù)測試的成果,該設(shè)計實現(xiàn)了基本目標。但是仍有許多方法可以提高自動泊車系統(tǒng)的質(zhì)量和性能,例如添加其他傳感器(激光雷達傳感器)或者使用更高級的算法(SLAM算法)等。綜上所述,在現(xiàn)代社會中,自動泊車系統(tǒng)是非常有前景的,但是由于真實交通的不可預(yù)測性,因此還需要對該系統(tǒng)進行更多的研究。