朱 花, 陳 璐, 陽 明, 劉正超
(江西理工大學(xué)機電工程學(xué)院,江西贛州 341000)
機器人領(lǐng)域隨著科學(xué)技術(shù)的不斷發(fā)展,其中的識別和抓取技術(shù)逐漸成為了現(xiàn)代工業(yè)生產(chǎn)的一項重要技術(shù)。在新科技、產(chǎn)業(yè)革命的背景下,高校學(xué)生對于“新工科”的硬件基礎(chǔ)即實踐教學(xué)儀器與課程、應(yīng)用環(huán)境協(xié)調(diào)性不足[1-2]。
自Shirai和Inoue首先提出將機械手臂控制技術(shù)與視覺技術(shù)相融合后,王朋強等[3]就已經(jīng)根據(jù)人類雙目視覺的基本原理,完成了對機器人手臂的定位與抓取工作。張弛等[4]則設(shè)計了一個基于單目視覺的智能抓取機器人。對于機械臂的控制,上述大多采用嵌入式、DSP 等方式,對于教學(xué)實驗和較小、較輕的工件類抓取,成本較高。近年來,目標檢測算法更新?lián)Q代,大致分為兩大類:一階段算法(One-Stage)和兩階段算法(Two-Stage)。其中One-Stage 包含了YOLO(You only look once)系列和SSD系列。整體而言,雙階段算法在精度上要高一些,在速度上,雙階段算法比單階段要差一些。對于SSD 算法,它的基礎(chǔ)網(wǎng)絡(luò)模型為VGG16,其結(jié)構(gòu)為標準卷積層、池化層和全連接層3 部分的輪替。基于VGG16 的SSD算法在識別圖片時,遍歷整張圖片使得其權(quán)重數(shù)目擴大,雖然擬合的能力加強了,但是訓(xùn)練的時間也大幅度增加[5-7]。
本文提出基于Arduino 單片機的分揀機械臂,在實際應(yīng)用中更加輕巧便利。針對YOLO算法檢測速度慢且目標工件種類少等特征,將算法的網(wǎng)絡(luò)結(jié)構(gòu)由Darknet 53 輕量化改為Moblie Net-v3 的結(jié)構(gòu),刪去其中部分標準化卷積,變更為深度可分離卷積,使得模型的計算量和尺寸都大大降低。在此基礎(chǔ)上,自制了工件類數(shù)據(jù)集訓(xùn)練,并且進行各維度的數(shù)據(jù)增強,對于識別準確度也有較為理想的結(jié)果。
抓取技術(shù)是智能機器人常用的技術(shù)手段。本文的研究對象為開源的三自由度機械臂如圖1 所示,可模擬工業(yè)生產(chǎn)人員在工作中實現(xiàn)對各類標準工件的分類和抓取。機械臂實物如圖2 所示。
圖1 三自由度機械臂模型
圖2 三自由度機械臂實拍
該系統(tǒng)由Arduino Mega2560 控制板、電動機驅(qū)動模塊、42 步進電動機、攝像頭以及機械臂組成。計算機控制機械臂前端的攝像頭采集放置區(qū)的工件圖像,利用OpenCV函數(shù)庫捕獲圖像當前幀,通過運行目標檢測算法得到目標工件的分類和位置,計算成功后將信息傳輸給Arduino 主控開發(fā)板,由主控板按照程序驅(qū)動42 步進電動機轉(zhuǎn)動進而控制機械臂抓取指定工件并配送到相應(yīng)的位置??傮w系統(tǒng)框圖如圖3 所示。
圖3 總體系統(tǒng)框圖
(1)控制系統(tǒng)。系統(tǒng)采用Arduino Mega2560 單片機為主控板。該主控芯片具有54 路數(shù)字輸出、輸入口,足夠用來驅(qū)動系統(tǒng)的4 個電動機[8-11]。
(2)電源模塊。電源采用不同的供給方式,單片機的工作電壓為5 V,但是在實際應(yīng)用中,當外接電源為輸入5 V時,工作極不穩(wěn)定,Arduino Mega2560 采用的是220 V交流電通過AC/DC ADAPTER轉(zhuǎn)變得來的12 V 4 A供電,電動機驅(qū)動模塊的電壓為12 V,由12 V的18650 電池供電。
(3)驅(qū)動模塊。3 個42 步進電動機和相應(yīng)的DRV8825驅(qū)動器控制機械臂的各個角度,其中1 個控制橫向旋轉(zhuǎn),2 個控制縱向擺動。28BYJ48 電動機和ULN2003 驅(qū)動板控制機械臂夾手的抓取動作。在實際操作中,選擇將RAMPS 1.4 插在mega 板上,作為mega2560 的拓展版使用。RAMPS1.4 有x、y、z三軸電動機接口和擠出機1、2 電動機接口。將DRV8825 的x軸電動機接口的STEP 引腳與Arduino 的PF0 引腳相連接,DIR 引腳與Arduino 的PF1 引腳相連接,ENABLE引腳與Arduino 的PD7 引腳相連接,其余主控板與驅(qū)動器、電動機間的連線如圖4 所示。
圖4 部分硬件連接圖
整個系統(tǒng)由Arduino Mega 2560 主控板控制,當視覺相機在物料間采集到圖片時,傳輸給計算機進行目標檢測,經(jīng)過圖像預(yù)處理,包括模糊增強、去除噪聲等操作進行逐步數(shù)據(jù)增強,最終返回目標工件的分類信息和位置信息,得到機械臂各關(guān)節(jié)需要轉(zhuǎn)動的角度,將角度值轉(zhuǎn)換成步進電動機的電流信號,驅(qū)動電動機轉(zhuǎn)動,繼而驅(qū)動機械臂完成抓取操作,至此完成一類工件的分揀,繼續(xù)下一輪的識別定位。工作流程如圖5所示。
圖5 系統(tǒng)工作流程
圖6 先驗框與預(yù)測框圖
相機采集到的圖片利用YOLO_v3 算法進行目標檢測。YOLO算法通過單獨的CNN模型來實現(xiàn),將輸入圖片調(diào)整為608 ×608 的大小,進入Mobile Net-v3 網(wǎng)絡(luò)后得到3 個分支,再經(jīng)過卷積、上采樣、合并等多次反復(fù)操作后最終得到3 個不同尺寸的預(yù)測結(jié)果。不同尺寸的結(jié)果用于對大、中、小對象的預(yù)測。每一個尺寸的預(yù)測框有25 個參數(shù),分別是由4 個位置坐標信息、1個類別置信度、20 個類別預(yù)測值組成。這些參數(shù)最終就可預(yù)測到原圖中是否有目標工件并且可以預(yù)測出工件的位置信息。
網(wǎng)格中藍色小框為圖像預(yù)測框,黑色虛線框為先驗框,bx、by、bw、bh分別為藍色框的中心和寬高,pw、ph分別為黑色框的寬高,cx、cy為當前網(wǎng)格左上角到圖像左上角的距離。令一個網(wǎng)格的寬和長為1,即大小歸一化。
σ為Sigmoid函數(shù),可得:
輸入目標位置的坐標,經(jīng)由運動學(xué)逆解轉(zhuǎn)換為角度值,將角度值轉(zhuǎn)換成步進電動機的電流信號,以驅(qū)使電動機轉(zhuǎn)動,讓機械臂末端執(zhí)行器完成從起始點到目標點的移動。
機械臂運動學(xué)逆解包含多種解法。在這些方法中,幾何分析法和D-H法應(yīng)用較為廣泛。D-H 法將坐標系建立在機械臂的每個連桿上,并在兩個連桿上通過齊次坐標變換實現(xiàn)坐標變換,在多連桿系統(tǒng)中建立起首、末坐標系的變換關(guān)系[12]。幾何分析則需要將空間幾何參數(shù)與平面幾何參數(shù)一一對應(yīng),用幾何解法解出運動學(xué),較D-H法更為直觀。本機械臂利用幾何分析法求得的運動學(xué)逆解進行抓取實驗的研究。
目標檢測后輸出的數(shù)據(jù)可得到tx,ty,tz,經(jīng)過與比例值k之間的換算可以得到xd,yd,zd即3 個軸上目標物體距離鏡頭A的偏移量,如圖7 所示。
圖7 機械臂不同視角簡圖
通過
得3 邊之長,依據(jù)余弦定理得到
根據(jù)反三角函數(shù)得到,
式中:h2和h3分別為實際大臂、小臂的臂長;h′2和h′3分別為俯視視角下大臂、小臂的臂長;rd為目標物與鏡頭間的直線距離。
通過以上各式得到大臂與豎直方向的夾角θ1=90° -α-β,小臂與大小臂關(guān)節(jié)處垂直線的夾角θ2=θ1+α +γ以及底盤轉(zhuǎn)過的θ3夾角,即可換算成步進電動機的所要旋轉(zhuǎn)的角度值。
YOLO全稱為You Only Look Once,是計算機視覺領(lǐng)域中著名的模型之一,其通過一系列的卷積操作來實現(xiàn)端到端的目標檢測。
YOLOv1 的性能是基于損失函數(shù)而展現(xiàn)的,損失函數(shù)沒有考慮窗口的大小,在v1 的訓(xùn)練中檢測的準確度是不夠的。YOLOv2 利用召回率衡量檢測到真值對象的概率,對于速度、準確性均高于v1 版本。Redmon和Farhadi利用Darknet—53 作為主干網(wǎng)絡(luò),增加了邏輯回歸用于預(yù)測每個邊界框的得分,在同等精度的標準上提升了檢測速度[13-15]。
(1)數(shù)據(jù)集的準備。選取500 張不同標準工件圖像數(shù)據(jù)作為模型測試,進行隨機裁剪、水平翻轉(zhuǎn)、顏色晃動、圖像模糊、灰度化和隨機噪聲等數(shù)據(jù)增強,擴充到1 000 張數(shù)據(jù)集合庫,共計不同工件總數(shù)約5 000個,部分樣本數(shù)據(jù)集如圖8 所示。對于庫中的圖像利用Labelme圖像標注工具進行標注,標注名稱見表1,標注結(jié)果如圖9 所示,標注完成后將標注的信息寫入xml文件,再將其轉(zhuǎn)成符合YOLO 算法的VOC2012 格式數(shù)據(jù)。
表1 Labelme標注信息
圖8 部分數(shù)據(jù)集樣本
圖9 labelme標注圖
實驗選擇的待檢測目標包括自攻和機械螺釘、墊片、普通螺母和六角扳手等。經(jīng)過對數(shù)據(jù)集圖片標注,得出每張圖片中待檢測目標的位置及類別信息即先驗信息,均為編碼75 維的向量形式。將網(wǎng)絡(luò)預(yù)測結(jié)果與真實先驗信息比較,得到兩者間的差距,不斷反向傳播求梯度以降低差距。先判斷真實框在圖片中的具體位置,進而判斷出用哪個網(wǎng)格點進行檢測,當真實框和先驗框重合度達到一定范圍時,被認為是正樣本。兩者間的差距由預(yù)測邊界框中心坐標損失、寬高損失、置信度和類別損失組成。其中對于置信度的損失在正樣本中與1 對比,在負樣本中與0 對比。
3 個不同維度的loss函數(shù)
式中:lbox為中心坐標和寬高損失;lcls 為類別損失;lobj為置信度損失;s為網(wǎng)格的尺寸;BCE 為二值交叉熵損失函數(shù);ci為預(yù)測框內(nèi)含有目標物體的概率得分;pi為預(yù)測框?qū)儆谀愁悇e的概率得分;均為真實值。若(i,j)處的網(wǎng)格有目標,的值為1的值為0;若(i,j)處的網(wǎng)格無待測目標的值為0j的值為1。
當loss的值足夠小的時候,就可認為該模型訓(xùn)練效果較好,具有一定的可行性,可用于后階段對于某類物品的目標檢測[16-18]。
(2)實驗環(huán)境。YOLO_v3 算法的網(wǎng)絡(luò)框架為Mobile Net-v3。該算法的硬件實驗條件為:顯卡MX450,CPU 為Inter Corn i5-1135G7,操作系統(tǒng)為Windows 11,軟件插件包含Cuda、Pycharm、Visual studio2015 等,Pycharm 庫包含tensorflow-gpu2.1.0、keras2.2.4、Pillow5.1.0、matplotlib2.2.2、ffmpeg1.4、opencv-contrib-python。
(3)模型訓(xùn)練。按照9∶1的比例分配訓(xùn)練集和測試集,即訓(xùn)練集為4 500 張圖片,測試集為500 張圖片。其中驗證集占訓(xùn)練集的10%,為450 張圖片。所有的輸入圖片像素均為608 ×608。在配置訓(xùn)練參數(shù)中,通道數(shù)(channel)設(shè)置為3,錨框(anchor)設(shè)置為[45,52]、[61,49]、[102,37]、[47,101]、[99,66]、[67,99]、[132,131]、[343,80]和[81,341],共9 種,學(xué)習(xí)率設(shè)置為0.000 1 ~0.005 間,epoch 設(shè)置為100。所有參數(shù)均在cfg文件中修改并保存。
圖10 為學(xué)習(xí)率(learning rate)=0.000 25,衰減(gamma)=0.004 時的損失曲線圖,由圖可得總損失逐漸收斂至1.94 以下,類別損失則收斂效果不好,在10 ~0.194 內(nèi)持續(xù)震蕩。圖11 為learning rate =0.001,gamma =0.004 時的損失曲線,在epoch 為0 ~79 范圍內(nèi),學(xué)習(xí)率由0 逐漸上升至0.001,在epoch 為79 ~100 范圍內(nèi),學(xué)習(xí)率逐漸下降至0。在epoch為79時,訓(xùn)練得到最優(yōu)模型,由圖11 可見,總損失收斂至0.694 1 以下,類別損失收斂大約至0.001 749。兩次圖像相比較,可以看出后者損失函數(shù)逐漸收斂并且趨于一個比較小的數(shù)值。
圖10 lr為0.000 25時的損失圖
圖11 lr為0.001時的損失圖
(1)目標識別結(jié)果。實驗過程中,采用基于Mobile Net-v3 的YOLO 算法完成對待檢測目標的識別,檢測效果如圖12 所示,在學(xué)習(xí)率為0.000 25 時,模型預(yù)測精度mAP只達到71.10%,未檢測到的工件包含大、小尺寸工件,且大尺寸工件占據(jù)一定比例,檢測效率不佳,而當學(xué)習(xí)率調(diào)為0.001 時,模型預(yù)測精度mAP提升了15.66%,達到86.76%,大尺寸工件均可被檢測到,只有部分小尺寸工件由于邊緣模糊等原因容易漏檢誤檢。
圖12 不同學(xué)習(xí)率的實驗效果
(2)抓取實驗結(jié)果。實驗性能指標分為預(yù)測準確度和抓取準確度兩類。準確度指標通常用準確率來評價。
該工業(yè)標準件抓取實驗的實驗場景為散亂、不堆疊,分布在工作平臺。每次將8 個以上不同類別的工業(yè)標準件無規(guī)則置放在平面工作區(qū),視覺相機拍下工作區(qū)的圖像傳輸至計算機,經(jīng)目標檢測算法,得出標準件的類別和位置信息,經(jīng)逆運動學(xué)幾何運算計算出機械臂各關(guān)節(jié)變化的取值,由單片機控制各電動機轉(zhuǎn)動到指定的角度,使機械臂識別到的工件抓取到相對應(yīng)的物料框,再返回工作區(qū)抓取下一個工件。重復(fù)上述步驟,將機械臂抓取結(jié)果做多次實驗并記錄(見表2)。自攻螺釘、機械螺釘類較大尺寸工件的類別預(yù)測效果較好,達到92%和94%的預(yù)測準確率,而墊片這類輕薄的工件在抓取過程中受到其擺放姿態(tài)的影響,只達到64%的抓取準確率。分析各類工件的預(yù)測和抓取結(jié)果,發(fā)現(xiàn)小尺寸工件類別預(yù)測準確率較低,考慮是由于圖片拍攝角度、訓(xùn)練樣本容量不夠充足的原因?qū)е隆?/p>
表2 機械臂抓取實驗結(jié)果
研究結(jié)果表明,利用輕量化YOLO_v3 算法能保證機械臂對標準工件的可靠抓取。在不同學(xué)習(xí)率下,能訓(xùn)練出不同精度的模型,當學(xué)習(xí)率為0.001,衰減為0.004,且訓(xùn)練epoch 達到79 時,損失函數(shù)值趨于平穩(wěn),其類別預(yù)測準確率達到86.76%,能夠準確抓取大尺寸工件,具有一定的應(yīng)用價值。市面上的工業(yè)機械臂多采用PLC、嵌入式等控制系統(tǒng),這類儀器都存在體積大,不易操作等缺點,本機械臂的主控芯片為單片機,具備易于操作,成本不高等優(yōu)點,可提供教學(xué)儀器的一種新嘗試,能更好地為實驗學(xué)習(xí)研究而用。
后續(xù)研究可對工件抓取姿態(tài)算法進行進一步的完善,逐步提高對于機械臂準確抓取并識別工件的性能,以滿足實際應(yīng)用要求。