張 萍
(廣東工貿(mào)職業(yè)技術(shù)學(xué)院 計算機與信息工程系物聯(lián)網(wǎng)應(yīng)用專業(yè),廣東 廣州 510510)
隨著科學(xué)技術(shù)的發(fā)展,人口出生率的下降,人力成本的上升,越來越多的企業(yè)開始打造智能倉庫,以降低成本、提高生產(chǎn)效率。倉庫工作離不開貨物運輸,傳統(tǒng)倉庫貨物運輸是由司機駕駛叉車完成,隨著技術(shù)發(fā)展出現(xiàn)了使用磁導(dǎo)航、RFID、激光雷達(dá)等技術(shù)的自動引導(dǎo)運輸車AGV[1]。當(dāng)前,計算機視覺技術(shù)在自動駕駛領(lǐng)域得到了應(yīng)用,但真實場景中仍面臨著檢測對象多樣、系統(tǒng)處于高速運動狀態(tài)、周邊場景復(fù)雜多變等極大挑戰(zhàn),因此通常是作為輔助決策系統(tǒng)。倉庫環(huán)境背景相對固定、單一,車程較短,車速相對緩慢,使用計算機視覺技術(shù)[2]實現(xiàn)自動行駛能取得較好效果。本文模擬倉庫環(huán)境,設(shè)計簡單場景中基于計算機視覺的自動行駛智能小車,對保持行進路線、識別交通信號標(biāo)志、控制小車狀態(tài)等關(guān)鍵技術(shù)進行研究驗證。
圖1 中模擬了倉庫內(nèi)貨架和車輛的相對位置、行駛路線、交通標(biāo)志。在真實的倉庫地面可以貼上有顏色的膠布作為圖中紅色的行駛路線,在路線有變化的位置貼上相應(yīng)的交通標(biāo)志作為行駛變向的提示。智能小車通過攝像頭采集圖像進行分析,然后決策小車運行狀態(tài),實現(xiàn)自動行駛。
圖1 倉庫模擬圖
智能小車硬件包括兩大模塊:計算機視覺處理模塊和主控,如圖2 所示。計算機視覺處理模塊采用英偉達(dá)JETSON NANO[3]產(chǎn)品,JETSON NANO 4G 采用4 核Cortex-A57架構(gòu)CPU,主頻為1.43 GHz,GPU 型號為128CUDA core Maxwel,AI 算力達(dá)到473 GFLOPS,支持H.264 和H.265協(xié)議硬解碼,體積小,功耗低,有多種外部接口,提供JetPackTM SDK 開發(fā)包。主控采用STM32F103VET6 芯片,STM32F103VET6 是一個32 位高密性能微控制器單元,它融合了高性能的Cortex-M3 32 位RISC 內(nèi)核,運行頻率為72 MHz,有3 個12 位模數(shù)轉(zhuǎn)換器、4 個通用16 位計時器、2 個PWM 計時器,多種外部通信接口。主控的主要外部模塊GPIO 資源分配說明見表1 所列。
表1 主控的主要外部模塊GPIO 資源分配說明
圖2 智能小車硬件框圖
計算機視覺模塊通過攝像頭采集圖像,通過圖像處理、深度學(xué)習(xí)等方法判斷小車當(dāng)前運行路線,通過USB 接口發(fā)送相應(yīng)指令(直行、左移、右移、左轉(zhuǎn)、右轉(zhuǎn)等)給主控,主控通過電機調(diào)整小車當(dāng)前運行狀態(tài),通過編碼器反饋數(shù)據(jù)判斷當(dāng)前狀態(tài)是否調(diào)整成功并不斷修正狀態(tài)。
倉庫環(huán)境中,車輛行駛狀態(tài)可分為兩種:保持行進路線、通過識別交通標(biāo)志轉(zhuǎn)向。用圖像處理的方法實現(xiàn)行進路線保持,用深度學(xué)習(xí)的方法檢測交通標(biāo)志。
(1)保持行進路線
模擬真實場景,在地面貼上有顏色的膠布作為行駛路線,如圖3 所示。
圖3 直行路線示例
從圖3 中可以看出,車道線與背景色有明顯差異,圖像有二值性特點。地面有污跡,圖片拍攝時底部有陰影,這些屬于噪音,會干擾判斷,應(yīng)盡量去除。攝像頭視野較廣,拍攝到的圖片需要進一步選取感興趣區(qū)域(ROI)[4],離攝像頭較近的區(qū)域應(yīng)重點關(guān)注,選取圖片中間三分之一處作為ROI,如圖3(b)所示。
利用OpenCV[5]開發(fā)庫對圖片進行處理,首先進行二值化處理[5],如圖4(a)所示;然后進行雙邊濾波[5],如圖4(b)所示;最后提取骨線[6],如圖4(c)所示。比較圖4(a)、圖4(b)可以發(fā)現(xiàn),雙邊濾波去除了部分噪音,但仍有噪音殘留。圖4(c)的骨線近似呈一條直線,取這條直線上的坐標(biāo)平均值,作為小車運行的下一個目的地坐標(biāo)。如圖5 所示,水平方向x坐標(biāo)反映小車偏移情況,比較小車當(dāng)前坐標(biāo)(x1,y1)與下一個目的地坐標(biāo)(x2,y2),當(dāng)x2
圖4 圖像處理過程
圖5 小車偏移示意圖
(2)交通標(biāo)志識別
交通標(biāo)志識別系統(tǒng)主要由圖像(視頻)輸入、交通標(biāo)志檢測、交通標(biāo)志識別、識別結(jié)果輸出、原始圖像(視頻)數(shù)據(jù)庫和訓(xùn)練樣本數(shù)據(jù)庫等組成。通過攝像頭采集圖像(視頻),英偉達(dá)JETSON NANO 計算機視覺處理模塊實現(xiàn)數(shù)據(jù)訓(xùn)練以及交通標(biāo)志檢測、識別、結(jié)果輸出;然后將識別結(jié)果傳給主控,由主控調(diào)整小車運行狀態(tài)。
國家交管部門規(guī)定,交通標(biāo)志分為警告標(biāo)志、禁令標(biāo)志、指示標(biāo)志、指路標(biāo)志、旅游標(biāo)志和其他標(biāo)志多種類型。倉庫場景較為簡單,只需對用到的部分交通標(biāo)志,比如左轉(zhuǎn)、右轉(zhuǎn)、直行、禁止等進行訓(xùn)練,在子集中識別結(jié)果。
國內(nèi)有兩大常用交通標(biāo)志數(shù)據(jù)集,長沙研究團隊的 CCTSDB[7](CSUST Chinese Traffic Sign Detection Benchmark)和清華與騰訊合作開發(fā)的TT100k[7](Tsinghua-Tencent 100k),但是它們采集的是高速行駛時復(fù)雜場景數(shù)據(jù),倉庫場景背景固定、單一,其數(shù)據(jù)不適用于訓(xùn)練。理想情況是采集部署這套系統(tǒng)的倉庫實景圖片數(shù)據(jù)進行訓(xùn)練,文中模擬時用的是在網(wǎng)上找到的trsd 數(shù)據(jù)集進行訓(xùn)練,該數(shù)據(jù)集采集的圖像交通標(biāo)識在整個圖像中占比較大,達(dá)到40%~60%,背景較為單一,比較符合智能小車在倉庫低速行駛時采集到的圖像特征。
訓(xùn)練采用YOLOv3-tiny[8]神經(jīng)網(wǎng)絡(luò),在YOLOv3-tiny中共有24 層網(wǎng)絡(luò),其中包含5 種不同的網(wǎng)絡(luò)層:卷積層convolutional(13 個)、池化層maxpool(6 個)、路由層route(2 個)、上采樣層upsample(1 個)、輸出層yolo(2 個)。YOLOv3-tiny 中,除了yolo 層之前的卷積層,每個卷積層之后都有BN 層,且每個卷積層之后都有激活函數(shù)LEAKY;共有兩個輸出層(yolo 層),分別為13×13 和26×26,每個網(wǎng)格可以預(yù)測3 個bounding box,共有80 個分類數(shù)。
訓(xùn)練時需對關(guān)鍵參數(shù)做調(diào)整,以訓(xùn)練左轉(zhuǎn)、右轉(zhuǎn)、直行3 種交通標(biāo)志為例,YOLOv3-tiny.cfg 中的batch 設(shè)為64,subdivisions 設(shè)為32,GPU 顯存大,該值可以為8。最大訓(xùn)練次數(shù)max_batches 設(shè)置為類別數(shù)乘以2 000,即3*2 000;steps改為max_batches的80%~90%;[yolo]層中的classes 修改為當(dāng)前訓(xùn)練的類別數(shù)3。2 個[yolo]結(jié)構(gòu)前面的[convolutional]層的通道數(shù)需要修改,計算公式為filters=3×(classes+5),若classes=3,則filters=24。從trsd 數(shù)據(jù)集中篩選出左轉(zhuǎn)、右轉(zhuǎn)、直行3種交通標(biāo)志的圖片形成新數(shù)據(jù)集,對新數(shù)據(jù)集進行聚類,使錨框尺寸更符合數(shù)據(jù)集特征,并用得到的錨框尺寸更新yolov3-tiny.cfg中的anchors參數(shù)。對新數(shù)據(jù)集中樣本進行9 ∶1 比例的劃分,形成訓(xùn)練集和測試集。為減少訓(xùn)練時間,使用預(yù)訓(xùn)練權(quán)重文件darknet53.conv.74 作為初始權(quán)重,訓(xùn)練結(jié)束得到新的權(quán)重文件yolov3-tiny_final.weights 用于交通標(biāo)志識別。交通標(biāo)志識別情況如圖6 所示。
圖6 交通標(biāo)志識別情況
識別的準(zhǔn)確率和精確率受多種因素影響,如用于訓(xùn)練的數(shù)據(jù)集和真實數(shù)據(jù)的匹配程度、樣本的多少、神經(jīng)網(wǎng)絡(luò)模型的選取、參數(shù)的調(diào)優(yōu)等。
(3)小車運行狀態(tài)控制
計算機視覺模塊發(fā)出小車運行指令(直行、左移、右移、左轉(zhuǎn)、右轉(zhuǎn)等)給主控,主控通過電機調(diào)整小車狀態(tài)。小車狀態(tài)控制算法與小車所采用的車輪類型有關(guān)系,本文以麥克納姆輪[9]為例,麥克納姆輪有多種安裝方式,選擇其中一種安裝方式進行運動矢量分析,如圖7 所示。
圖7 麥克納姆輪小車運動矢量分析
麥克納姆輪輥子軸線與輪轂軸線呈一定角度(一般為45°),速度被分解為X方向、Y方向,如圖7 灰色箭頭所示。小車四個輪子以相同速度向前或向后運動,會導(dǎo)致某方向的速度被抵消,如圖7(a)所示,X方向速度被抵消,剩下Y方向向前速度,達(dá)到直行效果;圖7(b)Y方向速度被抵消,剩下X方向向右速度,達(dá)到右移效果;圖7(c)兩個后輪不動,兩個前輪Y方向速度被抵消,剩下X方向向右速度,達(dá)到右轉(zhuǎn)效果,因此控制四個輪子的運動速度和方向,可實現(xiàn)小車的全方位移動。
小車運動速度v可分解為水平方向速度vx和垂直方向速度vy以及旋轉(zhuǎn)速度ω。按逆運動學(xué)分析[10]上述速度轉(zhuǎn)換為四個輪子的運行速度,公式如下:
式中:a為小車輪距的一半;b為小車軸距的一半;vA、vB、vC、vD分別代表四個輪子的速度。主控將vA、vB、vC、vD作為電機目標(biāo)速度,單位為m/s。編碼器采集到的是脈沖個數(shù),需轉(zhuǎn)換為電機實際速度ve,單位為m/s,公式如下:
式中:pu代表編碼器所接定時器脈沖個數(shù);f代表定時器中斷頻率;pe代表車輪周長;ec代表電機輪子轉(zhuǎn)一圈對應(yīng)的編碼器脈沖個數(shù),且有:
式中:pf代表編碼器倍頻數(shù);lp代表編碼器精度(線數(shù));js代表電機減速比。得到電機目標(biāo)速度和實際速度后,采用簡化的PID 算法[8]對小車進行運動控制,公式如下:
式中:pwm 即為電機所接定時器CCR 值,控制輸出PWM波形,進而控制電機轉(zhuǎn)速;Kp代表比例控制,Ki代表消除靜態(tài)誤差的積分控制,Kp、Ki是經(jīng)驗參數(shù),需要根據(jù)實際情況調(diào)整;e(k)表示當(dāng)前目標(biāo)速度與實際速度的差值;e(k-1)表示前一次目標(biāo)速度與實際速度的差值。小車運動控制PID 算法如圖8 所示。
圖8 小車運動控制PID 算法
本文設(shè)計的智能小車使用計算機視覺技術(shù),不需要安裝輔助定位模塊,部署方便。但是圖像處理、深度學(xué)習(xí)計算量大,算力要求高,系統(tǒng)實時性需要優(yōu)化、提升。交通標(biāo)志識別的準(zhǔn)確率不理想,需要根據(jù)實際環(huán)境制作數(shù)據(jù)集進行訓(xùn)練,并嘗試更多的模型、參數(shù)調(diào)優(yōu),尋找最優(yōu)的方案。