陳家熙,劉建豪,張海博,范潔潤,李樂怡,李振華
(廣東海洋大學(xué),廣東 湛江 524088)
隨著科技水平的提高,科技代替人類完成許多工作。例如,當(dāng)下發(fā)展比較迅猛的無人運輸技術(shù)。在餐廳中,它們可以準(zhǔn)確將菜品運送到對應(yīng)客人的桌子上,減緩了餐廳服務(wù)員的工作量。在小區(qū)里,快遞站使用無人運輸小車派送快遞,可以有效分擔(dān)快遞員的工作壓力。無人運輸小車的出現(xiàn),可以有效地幫助減緩服務(wù)、運輸?shù)刃袠I(yè)的工作人員工作壓力,在夏天高溫時,能有效防止工作人員中暑。但現(xiàn)在市面上大部分的無人運輸小車外形都比較大,只適用于某些開闊的場地。針對這種現(xiàn)象,本文提出一種小型運輸車。此款運輸車體積較小,可以用于在一些相對狹小的地方運輸小型物品,如在樓道內(nèi)運輸藥品或零食等。該車具有識別門與自動避障功能,能實現(xiàn)精準(zhǔn)派發(fā)與自動避障等功能,實用性較強,且成本相對較低,開發(fā)周期較短。
該小型智能運輸車主要由單片機主控芯片、電源模塊、攝像頭識別模塊、電機驅(qū)動模塊、避障模塊5部分組成??紤]到小車的程序復(fù)雜程度和工作效率,該智能運輸車使用STM32F103ZET6作為主控芯片。該芯片擁有較多功能管腳以及5個串口,便于后續(xù)可以對小車的功能進行升級與擴展,電源模塊由12 V可充電電池、AMS1117芯片和LM2596S芯片組成;驅(qū)動模塊采用L298N以及普通步進電機組成;避障部分由超聲波測距模塊HC-SR04與紅外對管避障模塊共同組成,完成對障礙物的測距和避障工作。小車整體模型采用3D打印模型作為支撐。
本文的機器視覺模塊設(shè)計中重點為深度神經(jīng)網(wǎng)絡(luò)模型,還含有樹莓派、攝像頭。深度神經(jīng)網(wǎng)絡(luò)模型采用YOLOv5進行訓(xùn)練,使用OpenCV部署訓(xùn)練得到的模型,即可用攝像頭識別出門。
YOLOv5有4個子版本分別為s、m、l和x,本文選用YOLOv5s來訓(xùn)練數(shù)據(jù)集。YOLOv5s相較于其他的版本具有更快的速度和更小的網(wǎng)絡(luò),AP精度也最低的特點。在本文以門為檢測的目標(biāo),追求速度,所以本文深度神經(jīng)網(wǎng)絡(luò)采用YOLOv5s模型進行訓(xùn)練。模型參考2019年末提出的CutMix數(shù)據(jù)增強法的Mosaic數(shù)據(jù)增強對數(shù)據(jù)集合隨機縮放、裁剪和排布,以及自適應(yīng)圖像縮放、錨框計算等操作,不僅能豐富數(shù)據(jù)集,提高數(shù)據(jù)集的復(fù)雜度,減少GPU,還能大大提高模型的分類和訓(xùn)練效率能力。
與以往對圖片進行翻轉(zhuǎn)、放大、縮小進行的數(shù)據(jù)增強不同,Mosaic 數(shù)據(jù)增強是將多張圖片進行隨機縮放、裁剪、排布并拼接到一張圖片上,減少訓(xùn)練過程中出現(xiàn)非信息像素,以及混合后圖片不自然的情況,提高了模型的訓(xùn)練效率和分類能力[1],特別是對于隨機的所發(fā)性能的小目標(biāo),自適應(yīng)錨框計算和自適應(yīng)圖像縮放以豐富數(shù)據(jù)集,提高魯棒性和提升推理速度[2];自適應(yīng)錨框計算是將通過訓(xùn)練得到的輸出預(yù)測框和真實框進行對比,求差再反向更新,迭代網(wǎng)絡(luò)參數(shù)以得到最佳的錨框值。
算法模型的Backbone主要采用Focus和CSP結(jié)構(gòu)。Focus結(jié)構(gòu)是以32個卷積核的卷積操作進行關(guān)鍵的切片操作。本文的YOLOv5s模型即是由CSP1_X的結(jié)構(gòu)應(yīng)用于Backbone主干網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)模型獲取特征的能力獲得了極大的提高;而Neck則采用了FPN+PAN的結(jié)構(gòu),PAN是借鑒了圖像分割領(lǐng)域PANet的創(chuàng)新點。一般目標(biāo)檢測任務(wù)的損失函數(shù)分為Classificition Loss(分類損失函數(shù))和Bounding Box Regeression Loss(回歸損失函數(shù))兩部分。損失計算采用GIoULoss進行計算,GIoULoss的計算公式為:
(1)
(2)
利用GIoULoss可以解決單純IOULoss計算時無法反映兩個框不相交的情況。
YOLO處理流程:(1)將圖像test到 800×600作為神經(jīng)網(wǎng)絡(luò)的輸入;(2)將圖像過YOLOv5模型;(3)進行利用NMS,篩選Boxes。
本小車主控芯片選取了STM32F103ZET6,該芯片在STM32F103 系列里配置相對較高,能很好實現(xiàn)本小車的基本功能,同時豐富的接口以及外設(shè)可以用于對小車現(xiàn)有功能進行升級完善以及后續(xù)功能增加,而且成本較低。它擁有的資源包括:64 KB SRAM、512 KB FLASH、2個基本定時器(TIM6、TIM7)、4個通用定時器(TIM2-TIM5)、2個高級定時器(TIM1、TIM8)、2個DMA控制器(共十二個通道)、3個 SPI串行外圍設(shè)備接口、5個串口、1個 USB、1個 CAN、3個12位Analog-to-Digital Converter模數(shù)轉(zhuǎn)換器、1個12位數(shù)字/模擬轉(zhuǎn)換模塊、1個 SDIO 接口、1個 FSMC 接口以及112個通用 GPIO接口。
本小車驅(qū)動采用了普通步進電機,驅(qū)動步進電機采用L298N模塊,2個L298N模塊分別驅(qū)動前端和后端的電機,L298N模塊內(nèi)部為雙H橋電路,含有4通道邏輯驅(qū)動電路,可使用1個模塊就非常方便的驅(qū)動2個電機。1個H橋電路主要由4個MOS管組成,MOS管的導(dǎo)通狀態(tài)決定了電機的轉(zhuǎn)動方向。電機通過單片機輸出PWM波,再通過L298N的PWM輸出通道來進行調(diào)速。一個電機由兩個引腳來操控其工作狀態(tài)。單片機通過操作IO口的輸出,即可讓小車實現(xiàn)前進、后退、轉(zhuǎn)向、停車、剎車等功能。
因為小車各模塊所需的額定電壓都不相同,所以主控電路板上需要有電壓轉(zhuǎn)換芯片以及電壓轉(zhuǎn)換電路。小車的驅(qū)動模塊采用12 V可充電鋰電池供電,12 V可以為L298N提供正常工作電壓,但對于其他電子模塊12 V電壓過大,針對此問題主控電路板上有12 V轉(zhuǎn)5 V與5 V轉(zhuǎn)3.3 V的降壓電路,分別通過LM2596S-5.0與AMS1117-3.3V芯片完成降壓,降壓完成后即可對單片機、超聲波模塊等電子元器件進行正常供電。
3.4.1 超聲波避障模塊
HC-SR04測距模塊可以進行2~400 cm范圍內(nèi)非接觸式距離測量,測量距離誤差在3 mm左右。此模塊由3部分組成,分別是超聲波發(fā)射器、接收器與控制電路。該模塊基本工作原理是首先讓超聲波發(fā)射器向一個特定的方向發(fā)射超聲波。在超聲波發(fā)射出去同一時刻開始計時,超聲波通過空氣傳播;當(dāng)超聲波在傳輸途中碰到障礙物就馬上反射回來;當(dāng)超聲波接收器接收到反射回來的超聲波就馬上停止計時。本次測試的測試距離可以由以下公式得出:測試距離=(計時時間×聲速)/2。對于本模塊的時序分為以下幾點:首先,模塊采用TRIG管腳來觸發(fā)測距功能,最少需要給模塊傳輸10 μs的高電平來作為觸發(fā)信號。其次,模塊會自動發(fā)送8個40 kHz的方波,并開始自動檢測是否有接收到反射信號。若模塊檢測到了反射信號,會控制ECHO管腳輸出一個高電平,而這個高電平持續(xù)的時間就是超聲波從發(fā)射到接收到反射波時間。最后,測試距離通過公式:測試距離=(高電平時間×聲速)/2計算可得[3]。
3.4.2 紅外對管避障模塊
本小車采用的紅外避障模塊為TCRT5000模塊,采用這個模塊的原因是該傳感器模塊對環(huán)境光線適應(yīng)能力比較強。此模塊具有紅外線發(fā)射與紅外線接收管,紅外線發(fā)射管可以對外發(fā)射出紅外線。當(dāng)紅外線傳播的方向遇到阻礙物(或者稱為反射面)時,紅外線會被反射回來然后被紅外線接收管接收,經(jīng)過模塊內(nèi)部的比較器電路處理過后,模塊上的綠色指示燈會被點亮,同時信號輸出接回輸出數(shù)字信號(一個低電平信號)。本模塊可以通過扭動電位器旋鈕來調(diào)節(jié)對障礙物的測量距離大小,可調(diào)節(jié)的有效距離為2~30 cm,工作電壓為3.3~5 V。當(dāng)發(fā)射出的紅外線沒有被反射面反射回來或被反射回來但反射波強度不夠大時,紅外接收管會一直處于關(guān)斷狀態(tài)。此時,模塊的OUT管腳輸出為高電平,模塊上的綠色指示燈不會被點亮。當(dāng)障礙物(反射面)出現(xiàn)在模塊的檢測范圍內(nèi)時,且紅外線被反射回來且強度足夠大,紅外接收管飽和,此時模塊的管腳輸出為低電平,模塊上的綠色指示燈會被點亮。
本小車的主程序主功能分為避障和識別兩部分。當(dāng)程序開始運行時,單片機對所用到的模塊以及外設(shè)進行初始化,初始化完畢后開始運行小車的驅(qū)動程序,驅(qū)動小車開始工作,同時小車進行對門識別與避障檢測兩個功能。小車的識別程序?qū)崿F(xiàn)是通過攝像頭與單片機的通信。單片機通過串口與樹莓派進行通信。當(dāng)識別到門的出現(xiàn)時,樹莓派會傳遞一個信號給單片機,單片機接收信號后,執(zhí)行一個停車函數(shù)讓小車停在門前,小車可通過喇叭播放提示語音提醒門外居民出門領(lǐng)取物品。避障程序則是在小車運行的過程中,當(dāng)小車的紅外避障模塊檢測到有障礙物時,超聲波模塊可以檢測出小車距離障礙物的距離,然后根據(jù)距離結(jié)合小車的大小,控制小車通過左轉(zhuǎn)或右轉(zhuǎn)或后退進行避障[4]。
在設(shè)計本小車時,筆者同時設(shè)計了一個對小車功能進行擴展的小程序。該小程序可以通過二維碼與小車運輸?shù)奈锲愤M行綁定,通過綁定物品信息,用戶可以在手機端查看關(guān)于物品的信息以及狀態(tài),方便對小車上的物品信息進行遠(yuǎn)程觀測。主程序流程如圖1所示。
圖1 主程序流程
本項設(shè)計基于STM32,結(jié)合人工智能識別、軟件編程、硬件設(shè)計、模型設(shè)計,最終實現(xiàn)小型智能運輸小車。該小車不僅可以滿足一般的小型運輸需求,還可以實現(xiàn)精準(zhǔn)派發(fā),自動避障等功能。該小車成本相對較低,易于組裝,編程難度相對較小,可以為以后智能運輸車的研發(fā)提供一定的參考。