楊志江, 鄭 昆, 耿春明, 夏繼強
(1.北京航空航天大學(xué) 機械工程及自動化學(xué)院,北京 100191;2.蕪湖賽寶信息產(chǎn)業(yè)技術(shù)研究院有限公司,安徽 蕪湖 241000)
在移動機器人和智能車的避障和定位研究中,超聲波避障在直線性和非接觸性兩方面優(yōu)于機械避障,而在對于減小被測物顏色、空間煙霧與光線對測距的影響方面優(yōu)于激光避障,因此應(yīng)用廣泛。如果目的是將車體周圍所有障礙物都可以探測到,一般采用的方法是多個超聲波傳感器在不同位置進(jìn)行并列安裝,每個超聲波傳感器獨立工作,而每個超聲波傳感器又作為一個通信節(jié)點,通過工業(yè)總線和核心控制板組網(wǎng),比如控制器局域網(wǎng)(controller area network,CAN)總線,各個測距節(jié)點的測距信息直接傳送給核心控制板。這種方法的缺點在于單個超聲波探頭的傳感器節(jié)點掛載在總線上占用了大量的系統(tǒng)硬件資源,另外核心控制板要對大量實時信息進(jìn)行處理,這也大大浪費了控制系統(tǒng)軟件資源,形成一個體積龐大,核心控制板軟件編寫復(fù)雜的系統(tǒng)[1]。針對這一問題,本文采用的方法是同樣在RS—485總線上掛載多個超聲波測距從站,但每一從站中又具有多路超聲波傳感器,每個從站作為一個通信節(jié)點,從站采集的多路信息匯總后經(jīng)RS—485總線傳輸?shù)街锌匕暹M(jìn)行實時處理后,再將數(shù)據(jù)發(fā)送給機器人或汽車的核心控制板,中控板作為系統(tǒng)核心控制板和下層的從站的中間節(jié)點,可以進(jìn)行信息的預(yù)處理,簡化核心控制板的中央處理器(central processing unit,CPU)資源。本文也闡述了實際工程應(yīng)用中的超聲波傳感器的布置方式。單個超聲波測距從站包含多路超聲波傳感器的設(shè)計能夠節(jié)省機器人和汽車控制系統(tǒng)的硬件資源;中控板對多個超聲波測距從站的信息進(jìn)行整合后再發(fā)送給控制核心板的設(shè)計簡化了核心板的軟件編寫;利用RS—485總線可以與多個帶有RS—485接口設(shè)備互連,實現(xiàn)數(shù)據(jù)的高速遠(yuǎn)距離傳輸,且控制方便[2]。
超聲波測距原理主要是利用超聲波傳感器向外發(fā)射超聲波時開始計時,超聲波在空氣中傳播,遇到障礙物后返回,超聲波傳感器接收到反射波后立即停止計時。根據(jù)計時器記錄時間t和超聲波聲速計算障礙物距離(s=ct/2,c為超聲波聲速)時會受溫度影響稍有變化,有些超聲波測距設(shè)備會進(jìn)行溫度補償設(shè)計[3],但由于本文主要在室內(nèi)自動導(dǎo)引車(automatic guided vehicle,AGV)叉車上使用,室內(nèi)溫度下,c一般取為344 m/s[4]。由于所采用的超聲波發(fā)射器是收發(fā)一體,在激勵脈沖停止后,仍然有余波產(chǎn)生,會在近處產(chǎn)生較大的盲區(qū),根據(jù)這一點可以得出實際運用的性能參數(shù)。
系統(tǒng)主要由中控板和超聲波測距從站組成,系統(tǒng)組成框圖如圖1所示。圖中超聲波測距從站中包含多路超聲波傳感器。中控板和各個超聲波測距從站通過RS—485總線相連,各超聲波測距從站實時通過多路超聲波傳感器測量機器人或汽車周圍障礙物的信息,中控板以一定的時間間隔分別獲取各從站的信息,匯集各模塊信息經(jīng)一定的處理后向上一級中央控制系統(tǒng)發(fā)送最終的數(shù)據(jù)結(jié)果,其中中央控制系統(tǒng)僅對中控板進(jìn)行簡單命令的發(fā)送和數(shù)據(jù)接收,極大減輕了移動機器人或汽車的中央控制系統(tǒng)CPU的負(fù)擔(dān)。中控板和超聲波從站均以STM32單片機作為控制和處理的核心,其系統(tǒng)時鐘可達(dá)到72 MHz,可保證數(shù)據(jù)的實時性。
圖1 系統(tǒng)組成框圖
中控板的任務(wù)為:1)接收上一級控制系統(tǒng)的命令、向上一級控制系統(tǒng)即核心控制板,發(fā)送數(shù)據(jù);2)通過RS—485總線向各個從站發(fā)送命令和接收各從站的實時數(shù)據(jù),即中控板主要完成命令的接收和發(fā)送功能,其硬件中需包含RS—485模塊和向上級控制系統(tǒng)通信模塊。因為中控板與機器人和汽車的核心控制系統(tǒng)的通信要求的多樣,所以要進(jìn)行定制。本文設(shè)計的系統(tǒng)是以工控機作為核心控制系統(tǒng),其與中控板通過串口進(jìn)行簡單的協(xié)議通信,故文中設(shè)計的中控板硬件結(jié)構(gòu)如圖2所示,中控板作為多節(jié)點信息匯總的主節(jié)點通過掛載的從節(jié)點個數(shù)不同,可以實現(xiàn)超聲波測距回路大幅度的增減。
圖2 中控板硬件結(jié)構(gòu)
從站包含2組8路超聲波測量回路,每路均包含1個收發(fā)一體式超聲波探頭、超聲波發(fā)射電路、回波的濾波電路,由雙四通道模擬多路選通開關(guān)4052進(jìn)行分時選通;2組回路分別擁有一個回波的一級濾波放大電路和STM32的40 kHz脈沖產(chǎn)生I/O口;而兩組回路又共享STM32控制內(nèi)核和MAX3485通信模塊,圖3為超聲波回路硬件。
圖3 超聲波測距從站硬件結(jié)構(gòu)
該設(shè)計以STM32為控制核心,協(xié)調(diào)各電路的工作,兩組超聲波回路并行執(zhí)行,STM32同時在兩組回路的I/O口發(fā)送40 kHz脈沖,并且同時選中每組中4052的同一通道,進(jìn)入發(fā)射電路激勵傳感器向外發(fā)出超聲波,遇到障礙物會返回反射波,進(jìn)入接收電路進(jìn)行簡單的處理后經(jīng)各自的4052通道進(jìn)入放大濾波電路后進(jìn)入STM32的ADC通道經(jīng)軟件計算得出最終的障礙物距離,同時保存測得距離的傳感器所在的通路即可得到障礙物的方位,經(jīng)MAX3485以RS—485通信協(xié)議上傳給中控板障礙物的距離與方位的信息。
中控板主要完成接收上一級控制系統(tǒng)的命令和向其發(fā)送處理后的數(shù)據(jù)以及向超聲波從站發(fā)送命令及接收從站實時測得的障礙物距離與方位的信息。系統(tǒng)開始后首先初始化,經(jīng)MAX3485向第一個從站發(fā)送訪問命令,然后等待判斷是否收到從站數(shù)據(jù),然后處理并保存所接收的數(shù)據(jù),如果該從站第1次未響應(yīng),則為保證可靠性再次向該從站發(fā)送命令,當(dāng)所有從站訪問結(jié)束后等待接收移動機器人或智能車控制系統(tǒng)的命令,收到后則向控制系統(tǒng)發(fā)送最終處理后的數(shù)據(jù),中控板流程如圖4所示。中控板的接收數(shù)據(jù)命令是通過串口中斷子程序完成。
圖4 中控板流程
超聲波從站主要是完成8路超聲波傳感器測距及接收中控板的命令和向中控板發(fā)送傳感器測得障礙物的信息,每個從站都有自己的地址,當(dāng)中控板發(fā)出命令時每個從站都會接收到,但只有地址匹配的從站向中控板發(fā)送數(shù)據(jù)。從站程序的設(shè)計主要由主程序模塊、定時中斷模塊、串口中斷接收及串口發(fā)送數(shù)據(jù)模塊等組成,在此僅對主程序和中斷程序予以說明。在主程序開始初始化后首先調(diào)用超聲波發(fā)射子程序并打開TIM2,TIM2 主要是用于計時回波時間和通道的選擇,在延時1.5 ms后開始調(diào)用回波處理子程序判斷回波并計算距離,如果接收到中控板的命令且地址匹配,則通過RS—485向中控板發(fā)送實時數(shù)據(jù),否則,本次循環(huán)結(jié)束,對于TIM2中斷主要完成2組4052的通道選擇,同時選中兩組超聲波回路相同標(biāo)號的2組進(jìn)行激勵,為防止從站發(fā)生死循環(huán)或其他故障時,能自動復(fù)位程序從而利用系統(tǒng)時鐘設(shè)計一看門狗。超聲波從站流程如圖5。
圖5 超聲波從站流程
該系統(tǒng)中,中控板為主站,超聲波測距模塊為從站,主從之間通信為RS—485協(xié)議,每次通信中由主機發(fā)起,向從站發(fā)送地址(從站地址為0x01遞加1)及相應(yīng)的指令,從機采用中斷方式接收數(shù)據(jù),只有當(dāng)某個從機的地址匹配時,該從機才響應(yīng)并向主機發(fā)送數(shù)據(jù)。因每一從站發(fā)送的數(shù)據(jù)包括8路探頭測得的距離值(mm),每探頭距離值兩字節(jié)表示,即至少有16 B的數(shù)據(jù),需進(jìn)行差錯控制,以保證數(shù)據(jù)傳輸?shù)恼_性。在以下幾個方面進(jìn)行說明:
1)因采用問答式協(xié)議,當(dāng)某一從站地址匹配后向主機發(fā)送數(shù)據(jù)時,因在總線上的其他從站處于監(jiān)聽狀態(tài),故其他從站可能會將該數(shù)據(jù)中的某一部分判斷為主機的問詢命令,從而進(jìn)行響應(yīng)引起總線沖突。
解決方法:主機在發(fā)送問詢命令時,加入起始和結(jié)束標(biāo)記,該標(biāo)記不與從站應(yīng)答中的數(shù)據(jù)相同,因本超聲波測距模塊最遠(yuǎn)測得距離為3 500 mm,用兩字節(jié)表示,故十六進(jìn)制最大為0x0DAC,其最高位為0x0D,故在發(fā)送數(shù)據(jù)中不能出現(xiàn)連續(xù)2次大于0x0D的字節(jié),故選擇0xAA,0x55和0x55,0xAA 分別作為起始和結(jié)束標(biāo)記。
2)在從站發(fā)送數(shù)據(jù)中16 B的距離值可能因受到干擾而引起主站接收錯誤。
解決方法:加入發(fā)送數(shù)據(jù)校驗位,因最高字節(jié)為0x0D,故8路最高字節(jié)相加和最大為0x68,可用1個字節(jié)表示,從而將8路距離值高字節(jié)相加為校驗字節(jié)。
3)主機問詢某一從站時,如果在規(guī)定時間內(nèi)沒有收到從站應(yīng)答,則主機認(rèn)為問詢失敗,并重新問詢,如果3次問詢?nèi)允t記錄失敗次數(shù),問詢下一從站,在這一過程中主機在第二次問詢時,可能會收到從站第一次問詢應(yīng)答結(jié)果。
解決方法:在主機發(fā)送問詢命令和從站發(fā)送應(yīng)答數(shù)據(jù)幀時加入1 B表示問詢次數(shù),僅當(dāng)主機從機匹配則表示本次通信成功。
由上三種情況從而確定主機發(fā)送命令幀格式為
0xAA0x55從站地址命令代碼訪問次數(shù)0x550xAA
其中,命令代碼:0x03讀取從站值;從站地址為:0x01,0x02,0x03以此類推;訪問次數(shù)為:0x01,0x02,0x03中某一個。
從站發(fā)送應(yīng)答幀格式為
本站地址訪問次數(shù)16B距離值校驗字節(jié)
其中,從站地址為:0x01,0x02,0x03以此類推,數(shù)據(jù)在節(jié)點板初始化時從FLASH閃存中取得;訪問次數(shù)為:0x01,0x02,0x03中某一個,由節(jié)點板識別到的主機問詢命令中的問詢字節(jié)所得。
經(jīng)實驗測得,利用70 mm直徑的圓木作為障礙物,探頭測距的范圍類似于圖6(a)的形狀,可以看出在近端和遠(yuǎn)端會產(chǎn)生兩側(cè)的測量盲區(qū),在該地帶障礙物無法測得。另外一體式超聲波激勵后會產(chǎn)生一段時間的余波,所以在近端會產(chǎn)生測距盲區(qū),在該盲區(qū)中所測距離是不可靠的,而這種情況不可避免的。因此,為盡可能保證障礙物有效識別,探頭必須間隔布局,最終的效果如圖6(b),近端極限距離和近端盲區(qū)的極限值相等,為了保證在大于近端極限距離的區(qū)域的障礙完全測得,布局間隔必須適合,使相鄰兩個探頭的測距范圍重合一部分,而遠(yuǎn)端的極限距離則會隨布局間隔變化而變化。該設(shè)計所得到的最優(yōu)間距40 cm,近端極限距離30 cm,遠(yuǎn)端極限距離為120 cm。
圖6 超聲波探頭布局
以車體大小為2.8 m×2 m為例,為了可以探測到車體一整周的障礙物,基本保證無盲區(qū),如圖7進(jìn)行布置,共要安裝有32個超聲波探頭,由于每個從站包含8路超聲波回路,所以只需要4個485總線從站節(jié)點就可以實現(xiàn),極大地節(jié)約了硬件資源。但由于實驗車具有行進(jìn)速度v,在一個探頭的測量周期t下,保證試驗車不行駛進(jìn)入近端盲區(qū),即進(jìn)入小于近端極限距離d的區(qū)域,系統(tǒng)的實際近端盲區(qū)極限值為D=d+vt。如行進(jìn)速度為0.7 m/s,t為200 ms,則實際盲區(qū)為44 cm。
圖7 超聲波探頭試驗車布局示例
本文提出基于STM32 的RS—485總線與中控板組網(wǎng)的多路一體式超聲波測距模塊設(shè)計方法,由于在一個節(jié)點中包含8路的超聲波回路,該設(shè)計不僅可以對超聲波回路進(jìn)行整倍數(shù)增減,而且極大地節(jié)約了硬件資源,減輕了總線的負(fù)載。由于較大的車體需要的超聲波回路較多,該模塊的設(shè)計提供了其全方位的避障的可能。該設(shè)計已經(jīng)在工廠中進(jìn)行了試用,工作正常。