李志強(qiáng),康欽清,肖玉亮,李本高,黃 明,王東滔
(湖南涉外經(jīng)濟(jì)學(xué)院 信息與機(jī)電工程學(xué)院,湖南 長沙 410205)
隨著人工智能技術(shù)的迅猛發(fā)展,眾多人工智能控制產(chǎn)品應(yīng)用到了各行各業(yè)中[1]。無人駕駛汽車綜合了計算機(jī)、模式識別、智能控制、智能傳感器等多種技術(shù),旨在減少人為因素引起的交通意外,或代替人類進(jìn)入危險場景完成工作[2-4],從而提升人們的生活質(zhì)量。智能小車是無人駕駛汽車的研究基礎(chǔ),自動避障技術(shù)一直是智能小車研究的核心方向之一。避障系統(tǒng)中的傳感器負(fù)責(zé)采集障礙物信息,通過智能小車的避障系統(tǒng)識別并判斷出障礙物的位置、形狀、大小等信息,小車做出對應(yīng)的避讓動作。付曉云等[5]設(shè)計了一款基于紅外傳感器與超聲波傳感器結(jié)合的智能避障小車,曾穎琳等[6]將超聲波傳感器與舵機(jī)結(jié)合,不斷檢測左、前、右3個方向的障礙物。本項目組為進(jìn)一步提升智能小車的避障性能,設(shè)計了一種基于Arduino平臺的智能避障小車。小車的避障系統(tǒng)由超聲波傳感器、紅外傳感器、激光傳感器組成。多種傳感器協(xié)同工作,提升小車的避障性能。
本系統(tǒng)整體設(shè)計如圖1所示。系統(tǒng)的整體模塊包括:Arduino開發(fā)板、電源模塊、電機(jī)模塊以及由紅外傳感器、激光傳感器和超聲波傳感器組成的測距避障模塊等。
圖1 系統(tǒng)整體設(shè)計
本設(shè)計以Arduino平臺為核心,組成紅外雙點(diǎn)避障、激光單點(diǎn)避障和超聲波180°掃描避障相結(jié)合的多傳感器自動避障系統(tǒng),采集并識別障礙物信息后,通過I/O口輸出信號控制電機(jī)驅(qū)動模塊,完成小車的前進(jìn)、左轉(zhuǎn)、右轉(zhuǎn)、后退等運(yùn)行動作,從而實(shí)現(xiàn)多方位、廣角障礙物的躲避[7]。
Arduino開發(fā)平臺是一款使用簡單、功能多樣的開源電子平臺。本設(shè)計選取Arduino Uno R3作為主控模塊。Arduino Uno R3是一款基于ATmega328的微控制器板,編程靈活,支持C語言編程。它有14個數(shù)字I/O口(其中6個可用作PWM輸出),6個模擬輸入,16 MHz晶振時鐘,USB接口,電源插孔,ICSP接頭和復(fù)位按鈕。所有傳感器與主板連接,借助USB接口實(shí)現(xiàn)序下載和數(shù)據(jù)通信。
電機(jī)模塊包括直流電機(jī)和電機(jī)驅(qū)動控制模塊。智能小車由電機(jī)提供動力,完成行走和避障兩項任務(wù)。本設(shè)計使用4個直流電機(jī),分左、右兩側(cè)串聯(lián)連接。Arduino Uno無法驅(qū)動4個直流電機(jī),需借助電機(jī)驅(qū)動模塊完成電機(jī)驅(qū)動。
本設(shè)計采用L298N模塊作為電機(jī)控制模塊。L298N是一種高壓、大電流電機(jī)驅(qū)動芯片,其工作電壓最大可達(dá)到46 V,電流峰值可達(dá)3 A,內(nèi)部的全橋式驅(qū)動器可用來驅(qū)動直流電機(jī)、步進(jìn)電機(jī)和繼電器線圈,最高可同時驅(qū)動兩個直流電機(jī)實(shí)現(xiàn)正反轉(zhuǎn)和調(diào)速功能,L298N內(nèi)置過熱保護(hù)電路,非常適合在電池供電的智能小車、機(jī)器人上使用。小車方向控制與邏輯輸入引腳高低點(diǎn)對應(yīng)關(guān)系表如表1所示。
如表1所示,EN為使能端,高電平有效;A,B為電機(jī)驅(qū)動模塊的輸入端,X表示任意電平;Y表示小車電機(jī)的輸出狀態(tài)。
表1 驅(qū)動控制電機(jī)真值
本設(shè)計中,L298N的輸入端與Arduino開發(fā)板的I/O口相連,驅(qū)動兩組電機(jī),通過Arduino開發(fā)板I/O口電平的變化,控制左右兩側(cè)電機(jī)的正、反轉(zhuǎn)及停止,實(shí)現(xiàn)小車前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)和停止等方向控制功能。兩組電機(jī)轉(zhuǎn)動狀態(tài)與小車運(yùn)動狀態(tài)對應(yīng)如表2所示。
表2 兩組電機(jī)狀態(tài)與小車運(yùn)動狀態(tài)對應(yīng)
2.3.1 常用避障傳感器
常見的避障傳感器有紅外避障傳感器、激光傳感器、超聲波傳感器等。
紅外避障傳感器是根據(jù)反射紅外光探測前方障礙物,確定有無障礙物的存在,同時使用不同顏色指示燈指示狀態(tài)。在信號輸出沒有檢測到障礙物時,輸出高電平,LED指示燈變綠色;檢測到障礙物時,輸出低電平,LED指示燈變紅色。紅外避障傳感器可根據(jù)電位器調(diào)節(jié)探測距離約為3~30 cm。
激光傳感器是目前較為流行的傳感器,相較于紅外傳感器、激光傳感器,其測距結(jié)果可精確到毫米級,且測量結(jié)果不受前方障礙物的顏色和反射光影響。激光傳感器通過I2C通信總線與單片機(jī)相連接,具有高精度、高準(zhǔn)確度、高性能等特點(diǎn),激光傳感器感器探測距離約為30~200 cm。
超聲波傳感器是利用超聲波特性研制而成的傳感器,采用IO觸發(fā)測距,借助超聲波傳播的時間來判斷自身與障礙物的距離。超聲波傳感器發(fā)送端發(fā)出超聲波,當(dāng)超聲波碰到障礙物時,聲波會產(chǎn)生反射。當(dāng)超聲波傳感器的接收端收到返回的超聲波信號,就會自動計算超聲波的往返時間。探測距離約為2~450 cm。
D=T×V/2
(1)
公式(1)中,D為障礙物與小車之間的距離;T為高電平的持續(xù)時間,單位為s;V為超聲波傳播速度,在常溫15℃空氣中傳播的超聲波速度為340 m/s。
2.3.2 多傳感器自動避障系統(tǒng)
3種傳感器的探測距離與探測原理各有不同,如:超聲波具有扇形發(fā)散特性,而激光傳感器所發(fā)送的激光則是一束很細(xì)的激光束,可適用于不同類型的障礙物測距。由此,本設(shè)計采用紅外線、超聲波和激光3種器件相結(jié)合的多傳感器自動避障系統(tǒng)。
如表3所示給出了不同傳感器各自的特點(diǎn)。結(jié)合小車的功能需求,小車車架設(shè)計為兩層。車架的第一層(底層)左、右各安裝了一個紅外測距避障傳感器,用于檢測小車前方近距離的障礙物;在車架第二層的下方前端中部安裝激光測距避障傳感器,用于探測小車前方較遠(yuǎn)距離的障礙物;第二層頂部采用舵機(jī)加超聲波傳感器形式。在小車行駛過程中,超聲波傳感器在舵機(jī)的協(xié)助下,左右旋轉(zhuǎn)180°,完成小車在左、前、右3個方向上障礙物的距離測量??刂浦行膶⑺占降臄?shù)據(jù)進(jìn)行掐頭去尾取平均值處理,從而得到障礙物距離測試位置的距離。借助多傳感器自動避障系統(tǒng),實(shí)現(xiàn)近、遠(yuǎn)距離障礙物探測的全部覆蓋。
表3 不同傳感器的特點(diǎn)及安裝方案
2.3.3 WiFi控制模塊
WiFi模塊通過指定信道號的方式來進(jìn)行快速聯(lián)網(wǎng)。在無線聯(lián)網(wǎng)過程中,本模塊首先會對當(dāng)前的所有信道自動進(jìn)行一次掃描,搜索準(zhǔn)備連接的目的AP創(chuàng)建的(或Adhoc)網(wǎng)絡(luò)。串口WiFi模塊提供了設(shè)置工作信道的參數(shù),在已知目的網(wǎng)絡(luò)所在信道的條件下,可以直接指定模塊的工作信道,從而達(dá)到加快聯(lián)網(wǎng)速度的目的。
WiFi模塊的型號是UNO R3 ESP8266。該模塊功能強(qiáng)大,支持手機(jī)端控制,可以更輕松的構(gòu)建物聯(lián)網(wǎng)項目。本設(shè)計中利用智能手機(jī)的WiFi模塊與Arduino小車連接,設(shè)計并實(shí)現(xiàn)智能手機(jī)和智能小車的通信。手機(jī)終端發(fā)出3種不同的控制信號,通過WiFi模塊將控制信號傳遞給攝像頭模塊。攝像頭模塊對控制信號所要求的目標(biāo)顏色進(jìn)行追蹤并將相應(yīng)的坐標(biāo)值發(fā)送給Arduino開發(fā)板。借助WiFi模塊,智能小車控制更加便捷。
2.3.4 電源模塊
可調(diào)穩(wěn)壓電源模塊的型號是LM2596S。LM2596S是電流輸出降壓開關(guān)型集成穩(wěn)壓芯片,它內(nèi)含固定頻率振蕩器(150 kHz)和基準(zhǔn)穩(wěn)壓器(1.23 V),具有完善的保護(hù)電路、電流限制、熱關(guān)斷電路等。LM2596S只需極少的外圍器件便可構(gòu)成高效穩(wěn)壓電路。輸入電壓范圍為2.5~35 V,調(diào)節(jié)電位器可輸出1.25~35 V的電壓,轉(zhuǎn)換效率高達(dá)92%。采用LM2596S穩(wěn)壓并提供穩(wěn)定的5 V電壓給Arduino Uno R3供電。
智能小車運(yùn)行的總流程如圖2所示。Arduino智能避障小車在行駛的過程中,需要不斷判斷是否有障礙物的存在。規(guī)定Arduino依據(jù)傳感器優(yōu)先級紅外避障傳感器>激光傳感器>超聲波傳感器進(jìn)行障礙物判定。起步時,借助紅外探測傳感器,確定小車周圍是否有障礙物。若有障礙物,小車后退;若無障礙物,小車前進(jìn)。小車行駛過程中,借助激光傳感器進(jìn)行較遠(yuǎn)距離障礙物的判定。若激光傳感器檢測到有障礙物,則小車進(jìn)入超聲波檢測區(qū)。位于頂部的超聲波測距避障模塊需要不間斷收集左、前、右3個方位的障礙物信息,計算出與障礙物間的距離,并上傳至Arduino開發(fā)板。小車的執(zhí)行單元結(jié)合所收集到的障礙物信息,進(jìn)行相應(yīng)的規(guī)避動作。若激光傳感器未檢測到障礙物,則小車?yán)^續(xù)直行。
圖2 智能小車運(yùn)行的總流程
小車第一層設(shè)置位于小車兩端的紅外傳感器,優(yōu)先級最高,首先判定前方是否有障礙物;無障礙,小車直行;存在障礙物,小車后退;正常行駛時,利用激光傳感器判定是否存在障礙物,走的過程中利用超聲波測量,確定當(dāng)前距離,從而實(shí)現(xiàn)系統(tǒng)的避障功能。
void loop()
{
intSensor_L=A0;
intSensor_R=A1;
if (digitalRead(Sensor_L) ∣∣ digitalRead(Sensor_R))
{
if(sensor.readRangeSingleMillimeters()/10>40)
{
Go();
Serial.println(sensor.readRangeSingleMillimeters()/10);
}
else
{
stadiometry ();
Stop();
delay(50);
Jud();
L_R();
}
}
else
{
Qui_back();
delay(50);
Stop();
}
}
連接好智能小車各模塊,檢查是否有疏漏;通電源、啟動小車。
小車啟動后,分別在前方、左側(cè)、右側(cè)以及左右側(cè)同時放置障礙物擋板,設(shè)計不同障礙物模式。智能小車遇各種障礙后避障情況,如表4所示。小車啟動,前方有障礙物且左右離障礙物的距離均小于10 cm時,小車會向后倒退,遠(yuǎn)離障礙物;若與障礙物的距離左側(cè)小于30 cm,右側(cè)比左側(cè)大,此時小車完成掉頭右轉(zhuǎn);左側(cè)距離大于30 cm,右側(cè)距離比左側(cè)更大,此時小車完成90°右轉(zhuǎn)。同理,小車左轉(zhuǎn)。其他情況,小車直行。
表4 小車遇障行駛情況
本文對智能小車的自動檢測避障和控制進(jìn)行了研究和設(shè)計,主要設(shè)計了一種紅外雙點(diǎn)避障、激光單點(diǎn)避障和超聲波180°掃描避障相結(jié)合的測距避障智能小車,研究了智能小車的測距避障等功能。通過測試驗證,所設(shè)計的智能小車能實(shí)現(xiàn)近、遠(yuǎn)距離障礙物探測的全部覆蓋,完全符合設(shè)計要求。經(jīng)實(shí)驗證明,本智能小車能夠完成復(fù)雜障礙的自動避障。