李志強,康欽清,肖玉亮,李本高,黃 明,王東滔
(湖南涉外經濟學院 信息與機電工程學院,湖南 長沙 410205)
隨著人工智能技術的迅猛發展,眾多人工智能控制產品應用到了各行各業中[1]。無人駕駛汽車綜合了計算機、模式識別、智能控制、智能傳感器等多種技術,旨在減少人為因素引起的交通意外,或代替人類進入危險場景完成工作[2-4],從而提升人們的生活質量。智能小車是無人駕駛汽車的研究基礎,自動避障技術一直是智能小車研究的核心方向之一。避障系統中的傳感器負責采集障礙物信息,通過智能小車的避障系統識別并判斷出障礙物的位置、形狀、大小等信息,小車做出對應的避讓動作。付曉云等[5]設計了一款基于紅外傳感器與超聲波傳感器結合的智能避障小車,曾穎琳等[6]將超聲波傳感器與舵機結合,不斷檢測左、前、右3個方向的障礙物。本項目組為進一步提升智能小車的避障性能,設計了一種基于Arduino平臺的智能避障小車。小車的避障系統由超聲波傳感器、紅外傳感器、激光傳感器組成。多種傳感器協同工作,提升小車的避障性能。
本系統整體設計如圖1所示。系統的整體模塊包括:Arduino開發板、電源模塊、電機模塊以及由紅外傳感器、激光傳感器和超聲波傳感器組成的測距避障模塊等。

圖1 系統整體設計
本設計以Arduino平臺為核心,組成紅外雙點避障、激光單點避障和超聲波180°掃描避障相結合的多傳感器自動避障系統,采集并識別障礙物信息后,通過I/O口輸出信號控制電機驅動模塊,完成小車的前進、左轉、右轉、后退等運行動作,從而實現多方位、廣角障礙物的躲避[7]。
Arduino開發平臺是一款使用簡單、功能多樣的開源電子平臺。本設計選取Arduino Uno R3作為主控模塊。Arduino Uno R3是一款基于ATmega328的微控制器板,編程靈活,支持C語言編程。它有14個數字I/O口(其中6個可用作PWM輸出),6個模擬輸入,16 MHz晶振時鐘,USB接口,電源插孔,ICSP接頭和復位按鈕。所有傳感器與主板連接,借助USB接口實現序下載和數據通信。
電機模塊包括直流電機和電機驅動控制模塊。智能小車由電機提供動力,完成行走和避障兩項任務。本設計使用4個直流電機,分左、右兩側串聯連接。Arduino Uno無法驅動4個直流電機,需借助電機驅動模塊完成電機驅動。
本設計采用L298N模塊作為電機控制模塊。L298N是一種高壓、大電流電機驅動芯片,其工作電壓最大可達到46 V,電流峰值可達3 A,內部的全橋式驅動器可用來驅動直流電機、步進電機和繼電器線圈,最高可同時驅動兩個直流電機實現正反轉和調速功能,L298N內置過熱保護電路,非常適合在電池供電的智能小車、機器人上使用。小車方向控制與邏輯輸入引腳高低點對應關系表如表1所示。
如表1所示,EN為使能端,高電平有效;A,B為電機驅動模塊的輸入端,X表示任意電平;Y表示小車電機的輸出狀態。

表1 驅動控制電機真值
本設計中,L298N的輸入端與Arduino開發板的I/O口相連,驅動兩組電機,通過Arduino開發板I/O口電平的變化,控制左右兩側電機的正、反轉及停止,實現小車前進、后退、左轉、右轉和停止等方向控制功能。兩組電機轉動狀態與小車運動狀態對應如表2所示。

表2 兩組電機狀態與小車運動狀態對應
2.3.1 常用避障傳感器
常見的避障傳感器有紅外避障傳感器、激光傳感器、超聲波傳感器等。
紅外避障傳感器是根據反射紅外光探測前方障礙物,確定有無障礙物的存在,同時使用不同顏色指示燈指示狀態。在信號輸出沒有檢測到障礙物時,輸出高電平,LED指示燈變綠色;檢測到障礙物時,輸出低電平,LED指示燈變紅色。紅外避障傳感器可根據電位器調節探測距離約為3~30 cm。
激光傳感器是目前較為流行的傳感器,相較于紅外傳感器、激光傳感器,其測距結果可精確到毫米級,且測量結果不受前方障礙物的顏色和反射光影響。激光傳感器通過I2C通信總線與單片機相連接,具有高精度、高準確度、高性能等特點,激光傳感器感器探測距離約為30~200 cm。
超聲波傳感器是利用超聲波特性研制而成的傳感器,采用IO觸發測距,借助超聲波傳播的時間來判斷自身與障礙物的距離。超聲波傳感器發送端發出超聲波,當超聲波碰到障礙物時,聲波會產生反射。當超聲波傳感器的接收端收到返回的超聲波信號,就會自動計算超聲波的往返時間。探測距離約為2~450 cm。
D=T×V/2
(1)
公式(1)中,D為障礙物與小車之間的距離;T為高電平的持續時間,單位為s;V為超聲波傳播速度,在常溫15℃空氣中傳播的超聲波速度為340 m/s。
2.3.2 多傳感器自動避障系統
3種傳感器的探測距離與探測原理各有不同,如:超聲波具有扇形發散特性,而激光傳感器所發送的激光則是一束很細的激光束,可適用于不同類型的障礙物測距。由此,本設計采用紅外線、超聲波和激光3種器件相結合的多傳感器自動避障系統。
如表3所示給出了不同傳感器各自的特點。結合小車的功能需求,小車車架設計為兩層。車架的第一層(底層)左、右各安裝了一個紅外測距避障傳感器,用于檢測小車前方近距離的障礙物;在車架第二層的下方前端中部安裝激光測距避障傳感器,用于探測小車前方較遠距離的障礙物;第二層頂部采用舵機加超聲波傳感器形式。在小車行駛過程中,超聲波傳感器在舵機的協助下,左右旋轉180°,完成小車在左、前、右3個方向上障礙物的距離測量。控制中心將所收集到的數據進行掐頭去尾取平均值處理,從而得到障礙物距離測試位置的距離。借助多傳感器自動避障系統,實現近、遠距離障礙物探測的全部覆蓋。

表3 不同傳感器的特點及安裝方案
2.3.3 WiFi控制模塊
WiFi模塊通過指定信道號的方式來進行快速聯網。在無線聯網過程中,本模塊首先會對當前的所有信道自動進行一次掃描,搜索準備連接的目的AP創建的(或Adhoc)網絡。串口WiFi模塊提供了設置工作信道的參數,在已知目的網絡所在信道的條件下,可以直接指定模塊的工作信道,從而達到加快聯網速度的目的。
WiFi模塊的型號是UNO R3 ESP8266。該模塊功能強大,支持手機端控制,可以更輕松的構建物聯網項目。本設計中利用智能手機的WiFi模塊與Arduino小車連接,設計并實現智能手機和智能小車的通信。手機終端發出3種不同的控制信號,通過WiFi模塊將控制信號傳遞給攝像頭模塊。攝像頭模塊對控制信號所要求的目標顏色進行追蹤并將相應的坐標值發送給Arduino開發板。借助WiFi模塊,智能小車控制更加便捷。
2.3.4 電源模塊
可調穩壓電源模塊的型號是LM2596S。LM2596S是電流輸出降壓開關型集成穩壓芯片,它內含固定頻率振蕩器(150 kHz)和基準穩壓器(1.23 V),具有完善的保護電路、電流限制、熱關斷電路等。LM2596S只需極少的外圍器件便可構成高效穩壓電路。輸入電壓范圍為2.5~35 V,調節電位器可輸出1.25~35 V的電壓,轉換效率高達92%。采用LM2596S穩壓并提供穩定的5 V電壓給Arduino Uno R3供電。
智能小車運行的總流程如圖2所示。Arduino智能避障小車在行駛的過程中,需要不斷判斷是否有障礙物的存在。規定Arduino依據傳感器優先級紅外避障傳感器>激光傳感器>超聲波傳感器進行障礙物判定。起步時,借助紅外探測傳感器,確定小車周圍是否有障礙物。若有障礙物,小車后退;若無障礙物,小車前進。小車行駛過程中,借助激光傳感器進行較遠距離障礙物的判定。若激光傳感器檢測到有障礙物,則小車進入超聲波檢測區。位于頂部的超聲波測距避障模塊需要不間斷收集左、前、右3個方位的障礙物信息,計算出與障礙物間的距離,并上傳至Arduino開發板。小車的執行單元結合所收集到的障礙物信息,進行相應的規避動作。若激光傳感器未檢測到障礙物,則小車繼續直行。

圖2 智能小車運行的總流程
小車第一層設置位于小車兩端的紅外傳感器,優先級最高,首先判定前方是否有障礙物;無障礙,小車直行;存在障礙物,小車后退;正常行駛時,利用激光傳感器判定是否存在障礙物,走的過程中利用超聲波測量,確定當前距離,從而實現系統的避障功能。
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();
}
}
連接好智能小車各模塊,檢查是否有疏漏;通電源、啟動小車。
小車啟動后,分別在前方、左側、右側以及左右側同時放置障礙物擋板,設計不同障礙物模式。智能小車遇各種障礙后避障情況,如表4所示。小車啟動,前方有障礙物且左右離障礙物的距離均小于10 cm時,小車會向后倒退,遠離障礙物;若與障礙物的距離左側小于30 cm,右側比左側大,此時小車完成掉頭右轉;左側距離大于30 cm,右側距離比左側更大,此時小車完成90°右轉。同理,小車左轉。其他情況,小車直行。

表4 小車遇障行駛情況
本文對智能小車的自動檢測避障和控制進行了研究和設計,主要設計了一種紅外雙點避障、激光單點避障和超聲波180°掃描避障相結合的測距避障智能小車,研究了智能小車的測距避障等功能。通過測試驗證,所設計的智能小車能實現近、遠距離障礙物探測的全部覆蓋,完全符合設計要求。經實驗證明,本智能小車能夠完成復雜障礙的自動避障。