滕開雯,丁 康,王 碩
(天津職業(yè)技術(shù)師范大學(xué)信息技術(shù)工程學(xué)院,天津 300222)
隨著人工智能技術(shù)的不斷發(fā)展,智能駕駛運(yùn)用的領(lǐng)域也十分廣泛,特別是在汽車、物流配送、共享出行、無人零售、港口碼頭等領(lǐng)域獲得了日益廣泛的應(yīng)用[1-2]。2016年作為自動駕駛的開端,許多國內(nèi)外企業(yè)紛紛投入其中。自動駕駛行業(yè)之所以能夠得到各著名企業(yè)的爭奪,其意義在于自動駕駛有益于社會,是人們所支持的。本項(xiàng)目能夠改善城市交通安全,便捷管理交通行駛,為城市交通作出貢獻(xiàn)。
本文設(shè)計(jì)并搭建基于樹莓派的智能自動駕駛系統(tǒng)[3-4],采集道路信息并分析運(yùn)用了樹莓派開發(fā)板、視覺傳感器以及OpenCV等軟件,從而實(shí)現(xiàn)避障、方向控制等基本功能。
樹莓派硬件和OpenCV算法是此次項(xiàng)目研究的主要內(nèi)容。
樹莓派應(yīng)用研究,主要是配合樹莓派攝像頭收集信息,包括實(shí)驗(yàn)場景下的跑道、路標(biāo)、障礙物、行人等圖片和視頻。通過socket與上位機(jī)通訊,首先下位機(jī)要有完整的套接字APⅠ或者完整的TCP/ⅠP協(xié)議棧。接著,為了要確保下位機(jī)的ⅠP地址能夠與路由器、上位機(jī)共同保持在一條網(wǎng)段,就必須把下位機(jī)的Wi-Fi和上位機(jī)聯(lián)入同一網(wǎng)絡(luò)路由器下。TCP需要指定一個(gè)主機(jī)(比如下位機(jī))使用listen監(jiān)聽端口,然后另一臺設(shè)備(比如上位機(jī))使用connect去建立連接,connect成功后兩邊就可以通過send和recv來收發(fā)信息了。通訊完成后關(guān)閉套接字以釋放連接。
OpenCV算法研究,主要是處理輸入的圖像,在CV中選擇適當(dāng)調(diào)用灰度、選擇感興趣區(qū)域的方法。采用神經(jīng)網(wǎng)絡(luò)算法,在OpenCV ML庫中調(diào)用多層感知器模型(MLP),對輸入圖像進(jìn)行分類和識別。此外,小車使用了Arduino、電機(jī)驅(qū)動器、Wi-Fi等模塊硬件。為了使電腦能夠發(fā)送相關(guān)指令控制智能小車做出相關(guān)的動作,此次項(xiàng)目利用Wi-Fi連接起智能小車和電腦,這樣便可以通過Wi-Fi發(fā)送相關(guān)指令。系統(tǒng)的整體框架如圖1所示。
圖1 系統(tǒng)整體框架圖
車架、4個(gè)車輪(2個(gè)前輪,2個(gè)后輪)、4個(gè)直流電機(jī)、Arduino控制板、樹莓派板、2個(gè)舵機(jī)、Wi-Fi模塊以及攝像頭等構(gòu)成了智能自動駕駛小車的硬件部分。其中,控制板直接安裝于底盤上方,2個(gè)舵機(jī)垂直疊加安裝于底盤前方[5],上舵機(jī)安裝于下舵機(jī)上方,而攝像頭安裝于上舵機(jī)上方,上舵機(jī)用于攝像頭上下?lián)u擺,下舵機(jī)用于攝像頭左右搖擺,Wi-Fi模塊安裝于底盤后方。智能自動駕駛小車實(shí)物如圖2所示。
圖2 智能自動駕駛小車實(shí)物圖
電源、車體驅(qū)動、主控等部分組成了智能小車的系統(tǒng),各部分設(shè)計(jì)原理如下。
電源部分:電源元件為7.4 V、4 000 mAh充電鋰電池和LM7805穩(wěn)定器。7.4 V可充電鋰電池主要負(fù)責(zé)為小車提供直流電壓。該系統(tǒng)采用了LM7805穩(wěn)壓電路,這樣便可以給系統(tǒng)輸入一個(gè)直流穩(wěn)壓電源,以便于讓系統(tǒng)的電源電壓保持穩(wěn)定。LM7805穩(wěn)壓電源電路原理圖如圖3所示。
圖3 LM7805穩(wěn)壓電源電路原理圖
由圖3可知,整流、濾波、穩(wěn)壓、儲能等功能元件搭成了LM7805穩(wěn)壓電源電路。通常線性電源用作串聯(lián)穩(wěn)壓電源。電壓首先通過橋式整流器電路和C1濾波電容進(jìn)行整流和濾波,LM7805穩(wěn)壓電源電路的VⅠN和GND兩端將形成不穩(wěn)定的直流電壓。最后,不穩(wěn)定的直流電壓再經(jīng)過LM7805的穩(wěn)壓功能,并由C3進(jìn)行濾波,此時(shí)便在穩(wěn)壓電源的輸出端產(chǎn)生了精度高、穩(wěn)定度好的直流輸出電壓。
驅(qū)動部分:車底盤、2個(gè)TB6612FNG芯片、4個(gè)直流電機(jī)、4個(gè)車輪為小車的驅(qū)動部分。為了實(shí)現(xiàn)智能小車前后行駛、左右轉(zhuǎn)向的基本功能,此系統(tǒng)采用了H橋TB6612FNG驅(qū)動電路控制智能小車的4個(gè)車輪。TB6612FNG芯片原理圖如圖4所示。
圖4 TB6612FNG芯片原理圖
圖4中,AO1、AO2、PWMA、AⅠN1、AⅠN2這5個(gè)引腳用于控制一路電機(jī),其他三路電機(jī)類似。電機(jī)的正極連接到AO1,負(fù)極連接到AO2,PWMA、AⅠN2、AⅠN1引腳控制電機(jī)。其中PWMA接到控制板,通過改變占空比的方式調(diào)節(jié)電機(jī)的速度。
主控部分:智能小車的主控部分分為3個(gè)部分,分別為Arduino板、擴(kuò)展板和樹莓派。為了能夠達(dá)到控制智能小車行駛、精準(zhǔn)避障和實(shí)現(xiàn)車載圖像能夠?qū)崟r(shí)傳輸?shù)墓δ?,首先需要接入攝像頭和舵機(jī),以實(shí)現(xiàn)對前方道路的數(shù)據(jù)收集和檢測。同時(shí),在小車行駛的過程中,從攝像頭獲取的實(shí)時(shí)視頻信息先要傳入到樹莓派,再通過Wi-Fi模塊傳輸?shù)诫娔X端,這樣就可以在電腦端觀察到小車的實(shí)時(shí)行駛軌跡視頻。
首先是小車無障礙行駛分析。啟動小車后,小車將會通過攝像頭進(jìn)行實(shí)時(shí)路況的捕捉,并將數(shù)據(jù)傳入樹莓派進(jìn)行分析。分析中進(jìn)行操作判斷,若直線行駛,則無需進(jìn)行電機(jī)速度轉(zhuǎn)速的改變,小車可以根據(jù)規(guī)定路線和速度進(jìn)行直線行駛;如需轉(zhuǎn)彎,則控制轉(zhuǎn)彎一側(cè)方向的電機(jī)速度,使其略低于另一側(cè)電機(jī)的速度,等轉(zhuǎn)彎結(jié)束后恢復(fù)直線行駛,使兩側(cè)電機(jī)速度相同,這樣就能使小車實(shí)現(xiàn)快速并精準(zhǔn)的轉(zhuǎn)彎。
其次是小車有障礙行駛分析。啟動小車后,進(jìn)行攝像頭捕捉和樹莓派分析數(shù)據(jù)。當(dāng)遇到紅綠燈時(shí)進(jìn)行判斷,若為紅燈,則在規(guī)定的地方進(jìn)行停止等待,直到為綠燈;反之則進(jìn)行障礙物判斷,若存在障礙物,則停下等待并繼續(xù)進(jìn)行捕捉和分析,直到障礙物消除再繼續(xù)行駛。
3.2.1 驅(qū)動控制
2塊TB6612FNG芯片可以直接驅(qū)動四路直流電機(jī)。采用脈寬調(diào)制方法,隨著占空比的變化產(chǎn)生脈寬調(diào)制信號,電機(jī)的轉(zhuǎn)速取決于PWM占空比。當(dāng)設(shè)備正常工作時(shí),STBY引腳設(shè)置為高電平,ⅠN1和ⅠN2保持不變。通過調(diào)節(jié)脈寬調(diào)制引腳的輸入信號,可以實(shí)現(xiàn)電機(jī)的單向調(diào)速。當(dāng)PWM引腳設(shè)置為高電平時(shí),如果需要調(diào)整電機(jī)的雙向速度,則需要調(diào)整ⅠN1和ⅠN2的輸入信號。
3.2.2 避障功能
目前來說,常用的避障方案有傳統(tǒng)避障方案和深度學(xué)習(xí)避障方案[6-11],傳統(tǒng)避障方案使用超聲波測距,這種方法容易受到干擾,測量的距離短,且對較小的物體不敏感。此次智能小車使用的是PyTorch框架進(jìn)行深度學(xué)習(xí)的避障方案,可以利用深度學(xué)習(xí)算法的優(yōu)勢,實(shí)現(xiàn)一個(gè)魯棒性較強(qiáng)的避障方案,且計(jì)算速度快,能夠達(dá)到實(shí)施效果。避障場景分為3部分:當(dāng)遇到紅燈時(shí),智能小車將會在合適的位置停下;當(dāng)遇到行人時(shí),智能小車也會停車;當(dāng)遇到行人同時(shí)也遇到綠燈時(shí),智能小車會停車。小車停車的視角如圖5所示。
圖5 小車停車的視角
小車在運(yùn)行的過程中,攝像頭將前方畫面實(shí)時(shí)傳輸?shù)綐漭芍?,樹莓派將畫面圖像看成一個(gè)大坐標(biāo)系,分別有x值和y值,由于不同的畫面對應(yīng)著不同的y值,因此y值會不斷在變化,通過計(jì)算,當(dāng)小車需要停車的時(shí)候,y的值大于0.5,其余時(shí)刻y值均小于0.5。因此,通過代碼控制電機(jī),使y值大于0.5時(shí),行駛速度為0,即小車相應(yīng)停下,否則就繼續(xù)行駛,行駛速度取值0.0~1.0。
將小車放在給定的跑道里,把小車的攝像頭打開,通過終端里面可以觀察到攝像頭捕捉的圖像中間有1個(gè)圓圈,如圖6所示。當(dāng)在移動小車收集數(shù)據(jù)時(shí),將圓圈放到小車所需沿著行走的路線上,通過手柄控制對每一張圖片進(jìn)行保存。為了使小車在轉(zhuǎn)彎處能夠精準(zhǔn)地進(jìn)行轉(zhuǎn)彎,就要在轉(zhuǎn)彎處重復(fù)收集數(shù)據(jù)。如果小車遇到需要停止的位置,則需改變圓圈的位置,需要將手柄上推,讓圓圈離開圖像,從而使小車能夠在后續(xù)訓(xùn)練中能正確做出相應(yīng)動作。
圖6 數(shù)據(jù)收集視角
調(diào)試的過程是漫長的,每個(gè)項(xiàng)目的實(shí)現(xiàn)都少不了一步一步的調(diào)試。在小車的調(diào)試過程中,首先測試了小車按照軌跡行駛功能[12-15],在測試過程中,小車雖然能夠按照既定路線行駛,但是在轉(zhuǎn)彎處走的并不精準(zhǔn),甚至偏離跑道,如圖7所示。
圖7 小車偏離跑道圖
經(jīng)過分析,筆者們認(rèn)為是數(shù)據(jù)采集數(shù)量不足所導(dǎo)致的,因此就在轉(zhuǎn)彎處多收集了數(shù)據(jù),最后測試結(jié)果符合了要求。隨后進(jìn)行避障功能的測試,在進(jìn)行第一次的行人避障的測試中,行人個(gè)體較小,如圖8所示。
圖8 小行人模型視角圖
小車捕捉圖像信息后,數(shù)據(jù)分析不是很精準(zhǔn)導(dǎo)致小車?yán)^續(xù)行駛。后來通過多次調(diào)試,更換了行人模型,并不斷修改參數(shù)值,使得小車能夠精準(zhǔn)判斷行人的存在并能做出相應(yīng)的動作。行人避障測試完成后,緊接著進(jìn)行紅綠燈識別測試,剛開始測試的時(shí)候,小車遇到紅燈不?;蛘咧煌? s后繼續(xù)行駛,筆者們認(rèn)為也是因?yàn)閿?shù)據(jù)采集的數(shù)量不夠所導(dǎo)致的,因此就增加了數(shù)據(jù)數(shù)量,但測試結(jié)果還是一樣。經(jīng)過一段時(shí)間的測試分析,發(fā)現(xiàn)是紅綠燈模型的原因,剛開始收集數(shù)據(jù)的時(shí)候沒注意到紅綠燈側(cè)邊也有燈光,把側(cè)邊的燈光也收集了,如圖9所示。
圖9 紅綠燈側(cè)邊燈光收集視覺圖
測試的時(shí)候小車識別不準(zhǔn),因此遇到紅燈不?;蛘咧煌? s后繼續(xù)行駛的現(xiàn)象,于是決定重新收集紅綠燈的數(shù)據(jù),并且在收集的過程中將紅綠燈偏轉(zhuǎn)相應(yīng)的角度,使小車攝像頭所看到的圖像只有紅綠燈正面的燈光,經(jīng)過測試,此次紅綠燈的識別測試也取得了良好的效果。最后,將測試小車循跡功能所采集的數(shù)據(jù)和測試相關(guān)避障功能所采集的數(shù)據(jù)結(jié)合一起訓(xùn)練,得到了最終的成果。
本文搭建了基于樹莓派的智能自動駕駛系統(tǒng),并完成了系統(tǒng)的整體調(diào)試。此系統(tǒng)除了能夠完成相應(yīng)循跡行駛的功能外,還能根據(jù)路況和紅綠燈進(jìn)行作出相應(yīng)的判斷。此系統(tǒng)使用樹莓派能夠提高計(jì)算速度,從而快速作出反應(yīng)。使用深度學(xué)習(xí)的避障方法,利用深度學(xué)習(xí)算法的優(yōu)勢,使避障更加的靈活快速。系統(tǒng)具有良好的遠(yuǎn)控功能,圖像實(shí)時(shí)傳送清晰穩(wěn)定,道路行駛精確度高,在自動駕駛領(lǐng)域有廣泛應(yīng)用的基礎(chǔ)。