滕開雯,丁 康,王 碩
(天津職業技術師范大學信息技術工程學院,天津 300222)
隨著人工智能技術的不斷發展,智能駕駛運用的領域也十分廣泛,特別是在汽車、物流配送、共享出行、無人零售、港口碼頭等領域獲得了日益廣泛的應用[1-2]。2016年作為自動駕駛的開端,許多國內外企業紛紛投入其中。自動駕駛行業之所以能夠得到各著名企業的爭奪,其意義在于自動駕駛有益于社會,是人們所支持的。本項目能夠改善城市交通安全,便捷管理交通行駛,為城市交通作出貢獻。
本文設計并搭建基于樹莓派的智能自動駕駛系統[3-4],采集道路信息并分析運用了樹莓派開發板、視覺傳感器以及OpenCV等軟件,從而實現避障、方向控制等基本功能。
樹莓派硬件和OpenCV算法是此次項目研究的主要內容。
樹莓派應用研究,主要是配合樹莓派攝像頭收集信息,包括實驗場景下的跑道、路標、障礙物、行人等圖片和視頻。通過socket與上位機通訊,首先下位機要有完整的套接字APⅠ或者完整的TCP/ⅠP協議棧。接著,為了要確保下位機的ⅠP地址能夠與路由器、上位機共同保持在一條網段,就必須把下位機的Wi-Fi和上位機聯入同一網絡路由器下。TCP需要指定一個主機(比如下位機)使用listen監聽端口,然后另一臺設備(比如上位機)使用connect去建立連接,connect成功后兩邊就可以通過send和recv來收發信息了。通訊完成后關閉套接字以釋放連接。
OpenCV算法研究,主要是處理輸入的圖像,在CV中選擇適當調用灰度、選擇感興趣區域的方法。采用神經網絡算法,在OpenCV ML庫中調用多層感知器模型(MLP),對輸入圖像進行分類和識別。此外,小車使用了Arduino、電機驅動器、Wi-Fi等模塊硬件。為了使電腦能夠發送相關指令控制智能小車做出相關的動作,此次項目利用Wi-Fi連接起智能小車和電腦,這樣便可以通過Wi-Fi發送相關指令。系統的整體框架如圖1所示。

圖1 系統整體框架圖
車架、4個車輪(2個前輪,2個后輪)、4個直流電機、Arduino控制板、樹莓派板、2個舵機、Wi-Fi模塊以及攝像頭等構成了智能自動駕駛小車的硬件部分。其中,控制板直接安裝于底盤上方,2個舵機垂直疊加安裝于底盤前方[5],上舵機安裝于下舵機上方,而攝像頭安裝于上舵機上方,上舵機用于攝像頭上下搖擺,下舵機用于攝像頭左右搖擺,Wi-Fi模塊安裝于底盤后方。智能自動駕駛小車實物如圖2所示。

圖2 智能自動駕駛小車實物圖
電源、車體驅動、主控等部分組成了智能小車的系統,各部分設計原理如下。
電源部分:電源元件為7.4 V、4 000 mAh充電鋰電池和LM7805穩定器。7.4 V可充電鋰電池主要負責為小車提供直流電壓。該系統采用了LM7805穩壓電路,這樣便可以給系統輸入一個直流穩壓電源,以便于讓系統的電源電壓保持穩定。LM7805穩壓電源電路原理圖如圖3所示。

圖3 LM7805穩壓電源電路原理圖
由圖3可知,整流、濾波、穩壓、儲能等功能元件搭成了LM7805穩壓電源電路。通常線性電源用作串聯穩壓電源。電壓首先通過橋式整流器電路和C1濾波電容進行整流和濾波,LM7805穩壓電源電路的VⅠN和GND兩端將形成不穩定的直流電壓。最后,不穩定的直流電壓再經過LM7805的穩壓功能,并由C3進行濾波,此時便在穩壓電源的輸出端產生了精度高、穩定度好的直流輸出電壓。
驅動部分:車底盤、2個TB6612FNG芯片、4個直流電機、4個車輪為小車的驅動部分。為了實現智能小車前后行駛、左右轉向的基本功能,此系統采用了H橋TB6612FNG驅動電路控制智能小車的4個車輪。TB6612FNG芯片原理圖如圖4所示。

圖4 TB6612FNG芯片原理圖
圖4中,AO1、AO2、PWMA、AⅠN1、AⅠN2這5個引腳用于控制一路電機,其他三路電機類似。電機的正極連接到AO1,負極連接到AO2,PWMA、AⅠN2、AⅠN1引腳控制電機。其中PWMA接到控制板,通過改變占空比的方式調節電機的速度。
主控部分:智能小車的主控部分分為3個部分,分別為Arduino板、擴展板和樹莓派。為了能夠達到控制智能小車行駛、精準避障和實現車載圖像能夠實時傳輸的功能,首先需要接入攝像頭和舵機,以實現對前方道路的數據收集和檢測。同時,在小車行駛的過程中,從攝像頭獲取的實時視頻信息先要傳入到樹莓派,再通過Wi-Fi模塊傳輸到電腦端,這樣就可以在電腦端觀察到小車的實時行駛軌跡視頻。
首先是小車無障礙行駛分析。啟動小車后,小車將會通過攝像頭進行實時路況的捕捉,并將數據傳入樹莓派進行分析。分析中進行操作判斷,若直線行駛,則無需進行電機速度轉速的改變,小車可以根據規定路線和速度進行直線行駛;如需轉彎,則控制轉彎一側方向的電機速度,使其略低于另一側電機的速度,等轉彎結束后恢復直線行駛,使兩側電機速度相同,這樣就能使小車實現快速并精準的轉彎。
其次是小車有障礙行駛分析。啟動小車后,進行攝像頭捕捉和樹莓派分析數據。當遇到紅綠燈時進行判斷,若為紅燈,則在規定的地方進行停止等待,直到為綠燈;反之則進行障礙物判斷,若存在障礙物,則停下等待并繼續進行捕捉和分析,直到障礙物消除再繼續行駛。
3.2.1 驅動控制
2塊TB6612FNG芯片可以直接驅動四路直流電機。采用脈寬調制方法,隨著占空比的變化產生脈寬調制信號,電機的轉速取決于PWM占空比。當設備正常工作時,STBY引腳設置為高電平,ⅠN1和ⅠN2保持不變。通過調節脈寬調制引腳的輸入信號,可以實現電機的單向調速。當PWM引腳設置為高電平時,如果需要調整電機的雙向速度,則需要調整ⅠN1和ⅠN2的輸入信號。
3.2.2 避障功能
目前來說,常用的避障方案有傳統避障方案和深度學習避障方案[6-11],傳統避障方案使用超聲波測距,這種方法容易受到干擾,測量的距離短,且對較小的物體不敏感。此次智能小車使用的是PyTorch框架進行深度學習的避障方案,可以利用深度學習算法的優勢,實現一個魯棒性較強的避障方案,且計算速度快,能夠達到實施效果。避障場景分為3部分:當遇到紅燈時,智能小車將會在合適的位置停下;當遇到行人時,智能小車也會停車;當遇到行人同時也遇到綠燈時,智能小車會停車。小車停車的視角如圖5所示。

圖5 小車停車的視角
小車在運行的過程中,攝像頭將前方畫面實時傳輸到樹莓派中,樹莓派將畫面圖像看成一個大坐標系,分別有x值和y值,由于不同的畫面對應著不同的y值,因此y值會不斷在變化,通過計算,當小車需要停車的時候,y的值大于0.5,其余時刻y值均小于0.5。因此,通過代碼控制電機,使y值大于0.5時,行駛速度為0,即小車相應停下,否則就繼續行駛,行駛速度取值0.0~1.0。
將小車放在給定的跑道里,把小車的攝像頭打開,通過終端里面可以觀察到攝像頭捕捉的圖像中間有1個圓圈,如圖6所示。當在移動小車收集數據時,將圓圈放到小車所需沿著行走的路線上,通過手柄控制對每一張圖片進行保存。為了使小車在轉彎處能夠精準地進行轉彎,就要在轉彎處重復收集數據。如果小車遇到需要停止的位置,則需改變圓圈的位置,需要將手柄上推,讓圓圈離開圖像,從而使小車能夠在后續訓練中能正確做出相應動作。

圖6 數據收集視角
調試的過程是漫長的,每個項目的實現都少不了一步一步的調試。在小車的調試過程中,首先測試了小車按照軌跡行駛功能[12-15],在測試過程中,小車雖然能夠按照既定路線行駛,但是在轉彎處走的并不精準,甚至偏離跑道,如圖7所示。

圖7 小車偏離跑道圖
經過分析,筆者們認為是數據采集數量不足所導致的,因此就在轉彎處多收集了數據,最后測試結果符合了要求。隨后進行避障功能的測試,在進行第一次的行人避障的測試中,行人個體較小,如圖8所示。

圖8 小行人模型視角圖
小車捕捉圖像信息后,數據分析不是很精準導致小車繼續行駛。后來通過多次調試,更換了行人模型,并不斷修改參數值,使得小車能夠精準判斷行人的存在并能做出相應的動作。行人避障測試完成后,緊接著進行紅綠燈識別測試,剛開始測試的時候,小車遇到紅燈不停或者只停1 s后繼續行駛,筆者們認為也是因為數據采集的數量不夠所導致的,因此就增加了數據數量,但測試結果還是一樣。經過一段時間的測試分析,發現是紅綠燈模型的原因,剛開始收集數據的時候沒注意到紅綠燈側邊也有燈光,把側邊的燈光也收集了,如圖9所示。

圖9 紅綠燈側邊燈光收集視覺圖
測試的時候小車識別不準,因此遇到紅燈不停或者只停1 s后繼續行駛的現象,于是決定重新收集紅綠燈的數據,并且在收集的過程中將紅綠燈偏轉相應的角度,使小車攝像頭所看到的圖像只有紅綠燈正面的燈光,經過測試,此次紅綠燈的識別測試也取得了良好的效果。最后,將測試小車循跡功能所采集的數據和測試相關避障功能所采集的數據結合一起訓練,得到了最終的成果。
本文搭建了基于樹莓派的智能自動駕駛系統,并完成了系統的整體調試。此系統除了能夠完成相應循跡行駛的功能外,還能根據路況和紅綠燈進行作出相應的判斷。此系統使用樹莓派能夠提高計算速度,從而快速作出反應。使用深度學習的避障方法,利用深度學習算法的優勢,使避障更加的靈活快速。系統具有良好的遠控功能,圖像實時傳送清晰穩定,道路行駛精確度高,在自動駕駛領域有廣泛應用的基礎。