孫沐紫 潘嘉鑫 許釗赫 張文聰
【摘? 要】本文基于OpenMV和Arduino設(shè)計(jì)了智能巡線機(jī)器人小車,有效解決了識(shí)別路徑準(zhǔn)確性低和快速性差的難題。文中基于Arduino開(kāi)發(fā)板系統(tǒng)設(shè)計(jì)的循跡避障智能車,它采用OpenMV機(jī)器視覺(jué)模塊和PID控制算法進(jìn)行循跡,以及超聲波測(cè)距模塊進(jìn)行避障處理。在機(jī)器視覺(jué)方面,采用顏色識(shí)別算法、閾值二值化處理、權(quán)重計(jì)算、線性回歸算法、路徑追蹤和圖像捕捉等算法。完成了小車躲避障礙物及沿特定路線行駛的任務(wù)。最后,通過(guò)實(shí)驗(yàn),驗(yàn)證了文中所設(shè)計(jì)小車智能行駛的準(zhǔn)確性和快速性。
【關(guān)鍵詞】循跡避障;智能車;PID算法;機(jī)器視覺(jué)
1. 引言
當(dāng)今世界,科技水平和人工智能發(fā)展非常迅速,每個(gè)人的行為與生活方式及工業(yè)的運(yùn)作流程都受到了影響,研究能夠自動(dòng)躲避障礙物并能沿特定路線行駛的智能小車已然成為研究的熱點(diǎn)。[1]。智能小車集道路感知、路徑規(guī)劃于一體,常見(jiàn)的設(shè)計(jì)方案以stm32或Arduino作為主控,結(jié)合多路傳感器,利用紅外循跡模塊進(jìn)行路徑追蹤,利用超聲波傳感器完成避障[2]。
在已有超聲波避障的方法中,大多方案采用收集小車正前方、左方和右方的數(shù)據(jù),將左右方數(shù)據(jù)與障礙距離判向值進(jìn)行對(duì)比作為轉(zhuǎn)向依據(jù),但該方法存在探測(cè)盲區(qū);現(xiàn)有智能車巡線設(shè)計(jì)大多采用多個(gè)紅外傳感器用來(lái)環(huán)境數(shù)據(jù)采集,由于傳感器獲取的信息存在不連續(xù)、不完全以及不可靠的特點(diǎn),該巡線方式對(duì)于復(fù)雜路況有一定缺陷[3-4]。因此,本文采用了超聲波測(cè)距避障及OpenMV巡線信息融合的采集方法,設(shè)計(jì)了具有超聲避障、循跡路線的雙功能巡線避障小車,優(yōu)勢(shì)互補(bǔ),使采集的信息更加完善可靠,有望在工業(yè)運(yùn)作中得到應(yīng)用。
2. 智能車總體設(shè)計(jì)
智能循跡避障小車以Arduino為主控制器,電源模塊、OpenMV機(jī)器視覺(jué)模塊、超聲波測(cè)距模塊、驅(qū)動(dòng)放大模塊、舵機(jī)轉(zhuǎn)向模塊組成硬件系統(tǒng)部分。在超聲波避障方面,是以傳感器傳回的數(shù)據(jù)為基礎(chǔ),Arduino進(jìn)行運(yùn)算處理,對(duì)轉(zhuǎn)向舵機(jī)及電機(jī)進(jìn)行控制;循跡路線功能通過(guò)串口通訊,將OpenMV模塊采集的數(shù)據(jù)傳輸給Arduino主控板,控制電機(jī)速度和舵機(jī)轉(zhuǎn)向,完成功能。小車的機(jī)械結(jié)構(gòu)采用對(duì)稱結(jié)構(gòu)設(shè)計(jì),3D打印車模、減速比大的電機(jī),可以完成爬坡等動(dòng)作,解決重心不穩(wěn)、載重小等問(wèn)題。
系統(tǒng)驅(qū)動(dòng)電路大體分為兩部分,首先采用具有三態(tài)輸出的八路緩沖器74LS541,該芯片將主控的控制信號(hào)傳送給由大功率直流電機(jī)驅(qū)動(dòng)芯片構(gòu)成的雙BTS7960 H橋驅(qū)動(dòng)電路,由于同時(shí)使用兩個(gè)芯片會(huì)輸出一個(gè)較大電流在BTS7960芯片與電源線路中流過(guò),芯片封裝與電源平面的電感和電阻會(huì)引發(fā)電源噪聲,所以在此處添加具有極性的鉭電容用來(lái)穩(wěn)定降噪,防止地面反彈,從而使電機(jī)正常且穩(wěn)定驅(qū)動(dòng)[5]。
541線路驅(qū)動(dòng)電路以及雙BTS7960H橋驅(qū)動(dòng)電路分別如圖2、圖3所示。
3. 控制原理及算法設(shè)計(jì)
3.1循跡算法設(shè)計(jì)
循跡算法設(shè)計(jì)如圖4所示。
3.1.1. 圖像預(yù)處理
OpenMV模塊在采集和傳輸圖像過(guò)程中受多種因素的影響,圖像會(huì)產(chǎn)生較大噪聲,因而需要對(duì)采集的圖像進(jìn)行預(yù)處理。
在選定小車行駛的軌跡后,應(yīng)預(yù)先進(jìn)行賽道顏色閾值采集,使用OpenMV IDE自帶的閾值調(diào)節(jié)工具,獲取更加穩(wěn)定的顏色閾值,采集圖像后,進(jìn)行二值化處理,即將圖像轉(zhuǎn)化為黑白圖。
當(dāng)選定的分割閾值使前景區(qū)域的平均灰度、背景區(qū)域的平均灰度與整幅圖像的平均灰度之間差距最大時(shí),為較為理想的分割閾值。該差別用區(qū)域的方差來(lái)表示,其相互關(guān)系如下所示:
二值化后采用腐蝕(erode)跟膨脹(dilate)的組合進(jìn)行數(shù)學(xué)形態(tài)學(xué)的計(jì)算,可以很好地過(guò)濾噪聲、去除小孔洞、區(qū)分線路邊界。圖像預(yù)處理及返回值如圖5。
3.1.2. OpenMV巡線通信
將圖像分成若干ROI(感興趣區(qū)),根據(jù)控制對(duì)象和OpenMV的姿態(tài)確定并賦予每個(gè)區(qū)域權(quán)值,距離鏡頭越遠(yuǎn)的權(quán)重越小,對(duì)每個(gè)區(qū)域各自調(diào)用find_blobs函數(shù),根據(jù)面積大小過(guò)濾尋找區(qū)域內(nèi)最大的色塊,用每個(gè)區(qū)域的最大顏色塊的中心點(diǎn)的x坐標(biāo)值乘本區(qū)域的權(quán)值進(jìn)行加權(quán)平均計(jì)算,算出偏移畫面的偏移量和曲線曲率。
通過(guò)Arduino與OpenMV的通信,將計(jì)算的偏差角度送給Arduino開(kāi)發(fā)板,通過(guò)PID算法對(duì)小車姿態(tài)進(jìn)行不斷地調(diào)整,進(jìn)而達(dá)成精準(zhǔn)循跡目的,穩(wěn)定性較好,具有較強(qiáng)的魯棒性。智能車設(shè)計(jì)實(shí)物圖如下圖6所示。
3.2. 避障算法設(shè)計(jì)
本設(shè)計(jì)以HS-SR04超聲波模塊承擔(dān)測(cè)距避障任務(wù),利用該模塊,可以測(cè)量距離,進(jìn)而判斷前方道路是否存在障礙,且對(duì)于同一角度的測(cè)距,應(yīng)采集三次,取平均值以減小誤差。該模塊通過(guò)施加一個(gè)超過(guò)10us的脈沖觸發(fā)信號(hào),模塊內(nèi)將發(fā)出8個(gè)40kHz的周期電平并檢測(cè)回波,一旦接收端接收到返回信號(hào),則輸出回響信號(hào),回響信號(hào)的脈寬與距離呈線性關(guān)系[7-8],設(shè)距離為y厘米、回響信號(hào)的高電平時(shí)間為x、此時(shí)的聲速z米/秒,則
通過(guò)距離的測(cè)量,分段控制兩個(gè)直流電機(jī),進(jìn)而控制小車的前進(jìn)速度,在距離障礙物過(guò)近時(shí)也能快速停下來(lái);判斷各方位的距離遠(yuǎn),控制舵機(jī)轉(zhuǎn)向,若前方出現(xiàn)障礙,小車進(jìn)行危險(xiǎn)檢測(cè),由于超聲波模塊的最大感應(yīng)角為15°,以小車正前方為基準(zhǔn)角0°,通過(guò)將超聲波傳感器前方180°視野分為六個(gè)區(qū),即以30°劃分[9],基本能覆蓋小車前方的180°區(qū)域,程序運(yùn)行時(shí)采集六個(gè)區(qū)的邊界點(diǎn)距離,根據(jù)與最大檢測(cè)有效距離和采集的其余值比較,因?yàn)槌暡▊鞲衅髯畲髾z測(cè)的有效距離有限,對(duì)數(shù)據(jù)進(jìn)行處理,采取限幅,將最大距離設(shè)定為固定值,再根據(jù)最大值確定舵機(jī)的轉(zhuǎn)動(dòng)角度,進(jìn)而達(dá)到避障的目的。避障算法設(shè)計(jì)如圖8所示。
3.3. 小車調(diào)試結(jié)果分析
本文搭建了小車的測(cè)試軌道,前半段為障礙物路段,后半段為循跡路段[10],經(jīng)過(guò)調(diào)試,小車能夠完成一些基本的避障任務(wù),而且能夠較好地克服其他單一點(diǎn)采集的方法存在的問(wèn)題,使小車能夠順利實(shí)現(xiàn)避障任務(wù)。
通過(guò)將曲線擬合,得到較為符合設(shè)計(jì)要求的返回值與理論值之間的函數(shù)關(guān)系式,由于電機(jī)扭矩并不完全相同,前進(jìn)時(shí)存在偏差,小車不斷前進(jìn)過(guò)程中,偏差不斷累計(jì),導(dǎo)致影響最終效果,所以初步設(shè)想兩種誤差補(bǔ)償方案:方案1.在OpenMV返回的角度值后增加5°(右轉(zhuǎn))作為偏差量補(bǔ)償;方案2.假設(shè)理論值為f(x),實(shí)際值為x,補(bǔ)償量△x,△x=f(x)-x,進(jìn)而在每次動(dòng)作步之后進(jìn)行參量補(bǔ)償,實(shí)現(xiàn)誤差修正,使小車得以穩(wěn)定前進(jìn)。根據(jù)補(bǔ)償?shù)男Ч?,選用方案2作為本次誤差補(bǔ)償方案。
4. 結(jié)論
本文給出了基于Arduino開(kāi)發(fā)板的巡線避障智能車的設(shè)計(jì)與實(shí)現(xiàn)方案,能夠?qū)崿F(xiàn)巡線和自動(dòng)避障,并且具有性能穩(wěn)定、操作簡(jiǎn)單的優(yōu)點(diǎn)。設(shè)計(jì)過(guò)程中采用OpenMV作為視覺(jué)處理模塊,可拓展性強(qiáng)。大量設(shè)定路線和障礙物的實(shí)驗(yàn)表明,本文所設(shè)計(jì)小車能夠成功地實(shí)現(xiàn)障礙物躲避和沿設(shè)定路線行駛,有望在數(shù)字物流等工業(yè)或生活領(lǐng)域中得到應(yīng)用。
作者在以后的研究中將考慮在此基礎(chǔ)上編寫其他功能,如條形碼識(shí)別顏色追蹤,能夠根據(jù)條形碼實(shí)現(xiàn)貨物堆放等,以適應(yīng)更為復(fù)雜的路線。
參考文獻(xiàn):
[1]付琳,王宗冕,楊達(dá)琛,田貝贈(zèng),張子威,鄭淼建.基于Arduino單片機(jī)的智能快遞小車設(shè)計(jì)[J].內(nèi)燃機(jī)與配件,2020(17):198-199.
[2]趙云娥,吳振強(qiáng).基于Arduino的雙模式智能避障小車系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2017,40(21):94-97.
[3]彭登峰.具有避障及循跡功能的智能小車系統(tǒng)設(shè)計(jì)[J].數(shù)字技術(shù)與應(yīng)用,2020,38(11):7-9.
[4]趙旭磊,耿召里,李小華.智能小車避障算法和速度調(diào)節(jié)算法研究[J].遼寧科技大學(xué)學(xué)報(bào),2018,41(03):212-217.
[5]宋洪慧,李春芾,朱江.智能小車直流電機(jī)驅(qū)動(dòng)電路設(shè)計(jì)[J].機(jī)電技術(shù),2015(06):84-87.
[6]李思熠,王少坤.基于OpenMV和Arduino的智能巡線機(jī)器人[J].科技與創(chuàng)新,2020(22):50-53.
[7]程立英,李鵬飛,白雪.基于Arduino單片機(jī)控制的避障小車的設(shè)計(jì)方案[J].計(jì)算機(jī)產(chǎn)品與流通,2018(12):277.
[8]王坤,劉紅,廖小琴,韋啟旻,張穎. 智能滅火車的設(shè)計(jì)[J]. 計(jì)算機(jī)科學(xué)與應(yīng)用,2016,6(12):786-793. http://dx.doi.org/10.12677/CSA.2016.612094
[9]李成成,張曉玲.智能小車循跡避障的新策略[J].計(jì)算機(jī)與數(shù)字工程,2019,47(04):966-969+974.
[10]閆博揚(yáng),李玉衡,姚磊.基于Arduino開(kāi)發(fā)板的自動(dòng)循跡避障智能車控制系統(tǒng)設(shè)計(jì)[J].軟件,2020,41(07):57-60.
基金項(xiàng)目:
國(guó)家級(jí)大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目 S202010429168
作者簡(jiǎn)介:
孫沐紫,女,2000.10.24,漢族,黑龍江樺南,就讀于青島理工大學(xué)電氣工程及其自動(dòng)化專業(yè),在讀,研究方向:模塊化多電平變換器。