周旭華,伍懿美,周志強(qiáng),張凌峰
(河源職業(yè)技術(shù)學(xué)院,廣東河源, 517000)
隨著科技的發(fā)展,在車間、倉庫、碼頭等場所出現(xiàn)了很多的物流小車代替人工工作,它們極大地節(jié)約了人力成本,而且還有工作效率高、準(zhǔn)確度高等特點。目前物流小車的導(dǎo)航方式主要有巡線的和雷達(dá),巡線導(dǎo)航的方式需要在它行走的路線上鋪上一條線(磁感線,有顏色的線等)給它導(dǎo)航,該工作需要較大的人力,且它轉(zhuǎn)向時會存在不穩(wěn)定的情況,而用OpenCV識別彩色線的導(dǎo)航方式,對光線的要求會比較苛刻;雷達(dá)導(dǎo)航不存在上述的問題,但是雷達(dá)價格較貴。相比巡線導(dǎo)航和雷達(dá)導(dǎo)航方式,二維碼識別導(dǎo)航既可以降低成本又能大大提高導(dǎo)航的精度[1~2]。
二維碼識別物流小車主要由識別解碼層和運(yùn)動控制層兩個部分組成,識別解碼層由攝像頭、OpenCV、樹莓派和降壓模塊組成,運(yùn)動控制層由MEGA2560板、電機(jī)驅(qū)動板和編碼電機(jī)組成。識別解碼層通過攝像頭采集二維碼數(shù)據(jù),然后把數(shù)據(jù)傳送到樹莓派上,經(jīng)過OpenCV分析處理,并信息發(fā)送到運(yùn)動控制層;運(yùn)動控制層的MEGA2560板接收到樹莓派發(fā)送來的信息,并把信號傳輸給電機(jī)驅(qū)動板來控制物流小車,若攝像頭沒有采集到預(yù)設(shè)的二維碼信息,那么電機(jī)就保持不動[2~3]。
二維碼識別物流小車設(shè)計主要分為硬件設(shè)計和軟件設(shè)計,硬件設(shè)計主要包括樹莓派3b+與USB攝像頭和MEGA2560板的連接設(shè)計、MEGA2560板與電機(jī)驅(qū)動板和編碼器的連接設(shè)計、電機(jī)驅(qū)動板和電機(jī)的連接設(shè)計等;軟件設(shè)計包括樹莓派鏡像的下載、OpenCV視覺庫的安裝和使用、Arduino控制程序等。其系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)框圖
物流小車的硬件主要包括樹莓派3b+、免驅(qū)USB攝像頭、MEGA2560控制板、降壓模塊、12V鋰電池、直流電機(jī)驅(qū)動板和編碼器電機(jī)等[4~6]。硬件模擬結(jié)構(gòu)設(shè)計圖如圖2所示。
圖2 小車硬件模型結(jié)構(gòu)設(shè)計圖
2.2.1 電機(jī)驅(qū)動模塊的設(shè)計
電機(jī)驅(qū)動采用兩塊L298N電機(jī)驅(qū)動板,可同時驅(qū)動四個直流電機(jī),單路有7A大功率,光耦隔離輸入信號,帶有欠壓保護(hù),穩(wěn)定可靠。驅(qū)動板上的+5V引腳可以接5V或者3.3V,為信號端提供電源,ENA1和ENA2為電機(jī)使能端,可接MEGA2560驅(qū)動板上的PWM來調(diào)節(jié)電機(jī)的轉(zhuǎn)速。連接電路圖如圖3和圖4所示。
圖3 電機(jī)驅(qū)動板與MEGA2560板和左側(cè)電機(jī)的連接電路圖
圖4 電機(jī)驅(qū)動板與MEGA2560板和右側(cè)電機(jī)的連接電路圖
其工作的原理:L298N電機(jī)驅(qū)動板接收到樹莓派傳輸來的指令后向電機(jī)驅(qū)動板發(fā)送信號,電機(jī)驅(qū)動板可通過MEGA2560板上的PWM端口單獨(dú)控制左右電機(jī)的速度。電機(jī)驅(qū)動板的IN1、IN2和ENA1控制左電機(jī)的正反轉(zhuǎn)和速度,IN3、IN4和ENA2控制右電機(jī)的正反轉(zhuǎn)和速度。
2.2.2 電源模塊的設(shè)計
要想物流小車正常穩(wěn)定地行駛,電源模塊是整個硬件系統(tǒng)中必不可缺的一部分。由于每個硬件系統(tǒng)的電壓需求不一樣,為了滿足各個硬件系統(tǒng)的用電要求,本文采用兩個規(guī)格為12.6V、1500mAh的大容量可充電電池。在使用時,給電池充滿電時電壓能達(dá)到12.6V。連接電路圖圖如圖5所示。
圖5 Arduino UNO與各模塊連接圖
2.2.3 底盤控制模塊的設(shè)計
底盤的控制平臺采用Arduino驅(qū)動板為核心,Ardunio是一種開源的電子工具,ArduinoIDE里開源的庫文件能直接被調(diào)用,容易上手且靈活性較好。MEGA2560兼容arduino開發(fā)核心處理器是Atmega2560,同時具有54路數(shù)字輸入/輸出口(其中15路可作為PWM輸出),16路模擬輸入,一個16MHz晶體振蕩器,一個USB口,一個電源插座,一個ICSP接口和一個復(fù)位按鍵。它板通過USB線與樹莓派連接,接收樹莓派傳來的指令,以此給予電機(jī)驅(qū)動板相連接的端口信號,帶動電機(jī)驅(qū)動。
軟件系統(tǒng)是官方的melodic18.04鏡像,需要按照OpenCV 3.4[7~8]。按照系統(tǒng)的功能要求,軟件整體設(shè)計流程圖如圖6所示。
圖6 軟件設(shè)計流程圖
二維碼采集由連接在樹莓派上的USB攝像頭和讀取攝像頭畫面的驅(qū)動程序兩部分組成,主要用來采集路線的二維碼并傳送到樹莓派上,再由計算機(jī)視覺庫OpenCV里的圖像處理算法分析處理。部分源程序如下所示:
運(yùn)動控制層由小車底盤、MEGA2560板、L298N電機(jī)驅(qū)動板和運(yùn)動層控制程序組成,主要負(fù)責(zé)接收樹莓傳送來的指令控制小車的行駛,利用左右輪的正反轉(zhuǎn)來實現(xiàn)轉(zhuǎn)彎。底盤控制程序是用Arduino寫的,通過MEGA2560和樹莓派的通訊來實現(xiàn)信息的傳遞,在編寫程序時需要先定義管腳,改變高低電平來改變電機(jī)的正反轉(zhuǎn)和停止,再通過讀取樹莓派發(fā)送的串口信息來判斷是否對電機(jī)的運(yùn)動狀態(tài)進(jìn)行改變部分源程序如下所示:
測試前先通過官網(wǎng)下載的鏡像燒錄到8GB以上的內(nèi)存卡上,再插入樹莓派上,進(jìn)行OpenCV,Arduino及所需的功能包下載和安裝(官方的鏡像一般只有Python),并進(jìn)行編程和通信。測試時,先將小車放在盒子架空,插上電源,然后通過電腦遠(yuǎn)程登錄樹莓派,在電腦上控制樹莓派運(yùn)行Python程序,觀察攝像頭是否正常,再把打印出來的二維碼放到攝像頭前進(jìn)行識別,識別成功后并發(fā)送時再給電機(jī)插上電源,觀察電機(jī)是否能夠根據(jù)二維碼內(nèi)容實現(xiàn)運(yùn)動,等它達(dá)到想要的效果之后,再把它放到一個較大的空間上實現(xiàn)最終的效果。測試圖如圖7所示。
圖7 測試環(huán)境圖
通過調(diào)試,小車能根據(jù)二維碼信息行駛,攝像頭能夠把采集的二維碼進(jìn)行識別解析并發(fā)送到MEGA2560板,再通過MEGA2560板和L298N驅(qū)動板控制小車運(yùn)動,把二維碼內(nèi)容解析打印如圖8所示。
圖8 攝像頭采集視圖
本文設(shè)計的物流小車以樹莓派為核心,利用MEGA2560板、USB攝像頭、L298N電機(jī)驅(qū)動模塊,可以實現(xiàn)小車通過攝像頭采集二維碼信息并利用樹莓派控制小車行走。