蔣靈龍,鄒禮斌,胡 薦
(重慶交通大學(xué)機(jī)電與車輛工程學(xué)院,重慶400074)
隨著電商的飛速發(fā)展,對(duì)物流的需求也隨之?dāng)U大,分揀作為物流中重要的一環(huán),人工分揀的成本、速度、及準(zhǔn)確率的不足已很明顯。根據(jù)2020年中國(guó)的智能分揀行業(yè)研究報(bào)告,智能化的分揀設(shè)備能有效應(yīng)對(duì)人工分揀所面臨的挑戰(zhàn),成為快遞企業(yè)提升競(jìng)爭(zhēng)力的剛性需求。自動(dòng)分揀設(shè)備能在快遞分揀環(huán)節(jié)有效節(jié)省人力成本,提升分揀速度。
本設(shè)計(jì)是一款以STM32和磁性編碼器的自動(dòng)分揀小車原型,可運(yùn)用到快遞分揀、產(chǎn)品歸類等多種場(chǎng)景,還可運(yùn)用到工廠端,自主到達(dá)倉(cāng)庫(kù)獲取所需的零部件并運(yùn)送到指定位置,實(shí)現(xiàn)由“人到物”到“物到人”的轉(zhuǎn)變。
本系統(tǒng)選用STM32作為主控芯片,L298N作為動(dòng)力驅(qū)動(dòng)芯片,霍爾碼盤為磁性編碼器、陀螺儀模塊、攝像頭、電源模塊等組成。系統(tǒng)的總體結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)結(jié)構(gòu)圖
電源經(jīng)過(guò)不同等級(jí)調(diào)壓為整個(gè)系統(tǒng)供電,在用戶輸入分揀物品或分揀順序后,控制器通過(guò)獲取陀螺儀和霍爾碼盤的數(shù)據(jù)利用驅(qū)動(dòng)模塊驅(qū)動(dòng)電機(jī)帶動(dòng)機(jī)器人經(jīng)過(guò)程序指定的路徑到達(dá)分揀目的地,再利用超聲波測(cè)距獲得精確的位置信息,結(jié)合光電開(kāi)關(guān),讓機(jī)器人精確定位,然后控制機(jī)械臂動(dòng)作,讓其上面搭載OPENMV攝像頭模塊對(duì)物品進(jìn)行識(shí)別,并把其放入機(jī)器小車自帶臨時(shí)倉(cāng)庫(kù)內(nèi),然后移動(dòng)到下一位置,進(jìn)行下一物品的分揀。完成分揀后自行到達(dá)指定倉(cāng)庫(kù)位置將臨時(shí)倉(cāng)庫(kù)內(nèi)的貨物放入其中。
本設(shè)計(jì)使用STM32系列的F103RCT6作為主控,它是一款以CORTEX-M3為內(nèi)核的32位微處理器,具有高性能、低成本、低功耗的優(yōu)點(diǎn)。豐富的接口以及標(biāo)準(zhǔn)的庫(kù)函數(shù)使得開(kāi)發(fā)過(guò)程方便快捷。
OPENMV是一個(gè)可編程的攝像頭,搭載STM32芯片,使用MicroPython語(yǔ)言進(jìn)行編程,對(duì)圖進(jìn)行分析。有良好的開(kāi)源環(huán)境,能較為方便地調(diào)用并用于簡(jiǎn)單的圖像分析。本設(shè)計(jì)讓其通過(guò)串口與主控芯片進(jìn)行通信,在接收到主控芯片的開(kāi)始識(shí)別信號(hào)后進(jìn)行識(shí)別,再將識(shí)別到的信息通過(guò)串口返回到主控芯片中。
本設(shè)計(jì)采用主流的L298N電機(jī)驅(qū)動(dòng)設(shè)計(jì)模塊,該模塊有兩個(gè)使能輸入端,兩組邏輯輸入端,兩個(gè)輸出口,將輸出口與小車兩側(cè)的電機(jī)相連。給使能端施加PWM波可以控制輸出電壓的大小,可以實(shí)現(xiàn)電機(jī)的調(diào)速;兩組邏輯控制端輸入不同的邏輯組合就可以控制輸出電壓的方向,實(shí)現(xiàn)電機(jī)的正反轉(zhuǎn)。
霍爾碼盤是一種旋轉(zhuǎn)盤式磁性編碼器,其原理同光電編碼器類似,使用磁性碼盤替代帶槽光電碼盤,磁性碼盤上帶有間隔排列的磁極,兩個(gè)霍爾元件位于碼盤兩側(cè),相較于光電編碼器,磁性編碼器有著在灰塵較多的環(huán)境能穩(wěn)定工作的優(yōu)點(diǎn)。多磁極碼盤安裝在電機(jī)的軸上,隨著電機(jī)軸轉(zhuǎn)動(dòng),在旋轉(zhuǎn)時(shí)霍爾元件可以獲得A,B兩路正交脈沖,相位相差90°,通過(guò)放大電路讓STM32單片機(jī)的定時(shí)器通道捕獲,其波形如圖2所示。
圖2 碼盤產(chǎn)生的正交脈波
表1 周期內(nèi)時(shí)序
根據(jù)圖2的波形圖可以得到不同旋轉(zhuǎn)方向時(shí)的時(shí)序(見(jiàn)表1所列),STM32高速捕捉A,B相脈沖信號(hào),每次捕獲到A,B相的脈沖后,將其電平與上一次捕獲得到的電平進(jìn)行比較,將其與對(duì)應(yīng)旋轉(zhuǎn)方向的時(shí)序?qū)Ρ群缶涂傻玫酱藭r(shí)電機(jī)的旋轉(zhuǎn)方向。
本設(shè)計(jì)中使用HWT101姿態(tài)陀螺儀來(lái)獲得機(jī)器人姿態(tài)信息,內(nèi)置核心算法與卡爾曼濾波技術(shù),靜態(tài)精度0.05°、動(dòng)態(tài)精度0.1°。模塊內(nèi)部集成了姿態(tài)解算器,配合動(dòng)態(tài)卡爾曼濾波算法,能夠在動(dòng)態(tài)環(huán)境下準(zhǔn)確輸出模塊的當(dāng)前姿態(tài),姿態(tài)測(cè)量精度靜態(tài)0.05°,動(dòng)態(tài)0.1°,穩(wěn)定性較好。陀螺儀通過(guò)串口的方式將姿態(tài)信息傳送給主控芯片,主控芯片對(duì)姿態(tài)信息進(jìn)行分析,并做出相應(yīng)的調(diào)整,實(shí)現(xiàn)對(duì)小車姿態(tài)的閉環(huán)控制。
為保證小車能運(yùn)動(dòng)得穩(wěn)定且快速,底盤采用四輪橡膠鋁合金支架結(jié)構(gòu),兩側(cè)搭載大扭矩減速直流電機(jī)。4個(gè)舵機(jī)作為機(jī)械臂的關(guān)節(jié),中間通過(guò)連桿連接,機(jī)械臂前端帶有爪子,由一個(gè)舵機(jī)控制開(kāi)合,底部安裝在小車底盤上,可以360°旋轉(zhuǎn)。將近距離光電開(kāi)關(guān)安裝在爪子的前端,以便抓取更加準(zhǔn)確,將OPENMV安裝在爪子的后方,并與爪子在一條中垂線上。兩個(gè)超聲波傳感器分別安裝在小車底盤的前端和后端。帶分隔的倉(cāng)庫(kù)固定在底盤支架上方。經(jīng)試驗(yàn)小車在小于20°的坡度上行駛穩(wěn)定。
小車在出發(fā)前對(duì)分揀目標(biāo)進(jìn)行設(shè)置,設(shè)置完成后就自主沿著設(shè)計(jì)好的路徑向倉(cāng)庫(kù)出發(fā),如果路徑上有障礙物能夠自主停止。在到達(dá)倉(cāng)庫(kù)位后對(duì)工件進(jìn)行識(shí)別,為目標(biāo)工件就抓取到小車的倉(cāng)庫(kù)中,不是目標(biāo)工件就移動(dòng)到下一工件為進(jìn)行下一次識(shí)別,直到所有工件都識(shí)別完,然后小車移動(dòng)到存放目標(biāo)倉(cāng)庫(kù)的位置將車內(nèi)目標(biāo)工件放入其中,最后回到起點(diǎn),本次分揀完成,等待下一個(gè)分揀任務(wù)。
STM32通過(guò)兩路PWM控制兩側(cè)輪子的轉(zhuǎn)速,小車在運(yùn)動(dòng)過(guò)程中,由于每個(gè)輪子摩擦不相同,即使對(duì)兩側(cè)輪子上的電機(jī)相同的電壓,也會(huì)導(dǎo)致小車不能沿直線前進(jìn)。STM32通過(guò)讀取陀螺儀的的姿態(tài)角度值,將小車當(dāng)前姿態(tài)角度與設(shè)定角度的差作為誤差,兩路PWM輸出作為被調(diào)整量,引入增量式PID算法,實(shí)現(xiàn)閉環(huán)控制。將PID的參數(shù)調(diào)整好后,小車運(yùn)動(dòng)過(guò)程中不斷讀取角度值,并實(shí)時(shí)調(diào)整PWM輸出,在行進(jìn)方向偏移后能夠快速恢復(fù)。小車在行進(jìn)過(guò)程中通過(guò)超聲波模塊實(shí)時(shí)監(jiān)測(cè)小車與前后的物體的距離,當(dāng)檢測(cè)到行進(jìn)方向的物體與其超出安全距離后進(jìn)行制動(dòng),實(shí)現(xiàn)避障功能。
自主定位主要借助于陀螺儀獲得方向信息,磁性編碼器獲取距離信息?;魻柎a盤產(chǎn)生的兩相正交波通過(guò)單片機(jī)的輸入捕獲通道進(jìn)行判斷。定義一數(shù)據(jù)用于計(jì)數(shù),開(kāi)始時(shí)計(jì)數(shù)值為0,判斷為正向旋轉(zhuǎn)脈沖計(jì)數(shù)值加一,反向脈沖則減一,用圓周角π除以碼盤旋轉(zhuǎn)一周的脈沖數(shù)n即可得每個(gè)脈沖所對(duì)應(yīng)電機(jī)旋轉(zhuǎn)的角度α,用α乘以車輪的外徑R即可得到每個(gè)脈沖對(duì)應(yīng)的理論前進(jìn)距離。如果當(dāng)前計(jì)數(shù)值為N,利用式(1)即可計(jì)算出小車當(dāng)前前進(jìn)的距離,從而實(shí)現(xiàn)無(wú)標(biāo)識(shí)定位。另外在一個(gè)較短的時(shí)間內(nèi)用這段時(shí)間的L之差除以這段時(shí)間可得到當(dāng)前的速度。
對(duì)目標(biāo)形狀判斷可以根據(jù)形狀的邊、角、以及與外圓等各種特征進(jìn)行判斷,調(diào)用OPENMV內(nèi)置的算法函數(shù)進(jìn)行組合就可以完成識(shí)別功能,例如要尋找畫面內(nèi)的圓形圖形可以調(diào)用find_circles函數(shù)找到畫面內(nèi)的圓形;要對(duì)正方形進(jìn)行判斷則可調(diào)用色塊占所在矩形的占空比函數(shù)density來(lái)判斷,經(jīng)實(shí)驗(yàn)正方形的占比都大于0.8;對(duì)于三角形同樣可用占比的方法進(jìn)行判斷。要對(duì)顏色和形狀同時(shí)識(shí)別則需要進(jìn)行一個(gè)簡(jiǎn)單的邏輯嵌套。對(duì)于其他非單一色彩的平面和立體則使用基于模板匹配的NCC算法:將目標(biāo)的灰度圖保存在OPENMV內(nèi),使用算法在攝像頭畫面內(nèi)尋找與其相似度較高的部分。
二維碼的讀取是將獲取到的圖像再二值化處理后,經(jīng)過(guò)一系列算法得到一個(gè)二進(jìn)制的序列,將序列糾錯(cuò)后轉(zhuǎn)化得到數(shù)據(jù)信息,關(guān)于其識(shí)別的相關(guān)研究已較為成熟,這里就不再贅述。
OPENMV在接收到STM32傳來(lái)的識(shí)別指令后,對(duì)畫面內(nèi)物體進(jìn)行識(shí)別,若畫面內(nèi)沒(méi)有目標(biāo)則給STM32返回一個(gè)代表無(wú)的指令,若有則實(shí)時(shí)返回目標(biāo)的中心坐標(biāo)。STM32在收到目標(biāo)的坐標(biāo)后,控制機(jī)械臂以讓爪子正對(duì)目標(biāo),然后接近到,收到光電接近開(kāi)關(guān)信號(hào)后抓取。
經(jīng)試驗(yàn),本設(shè)計(jì)以STM32為核心的各個(gè)模塊工作正常,能運(yùn)用自身傳感器自主定位,準(zhǔn)確快速地到達(dá)預(yù)先設(shè)定的位置,OPENMV對(duì)不同形狀和顏色工件進(jìn)行識(shí)別正確率高,對(duì)二維碼掃描的有效率高,機(jī)械臂抓取靈活,完成多個(gè)工件分揀后并將目標(biāo)工件運(yùn)送到指定位置,完成任務(wù)后能自動(dòng)回到出發(fā)位置。受限于OPENMV像素和運(yùn)算能力的限制,小車識(shí)別物體的種類和準(zhǔn)確度有待提高。小車的行進(jìn)路徑固定在程序中,在自動(dòng)規(guī)劃和快速更改路徑方面還有待研究。