王建沖,高軍偉
(1.青島大學(xué)自動(dòng)化學(xué)院,山東青島 266071;2.山東省工業(yè)控制技術(shù)重點(diǎn)實(shí)驗(yàn)室,山東青島 266071)
SOP芯片作為電子元器件之一,具有產(chǎn)量大、種類(lèi)多、尺寸微小等特點(diǎn)。在SOP芯片生產(chǎn)過(guò)程中,常需要對(duì)引腳進(jìn)行缺陷檢測(cè),判斷芯片是否符合生產(chǎn)標(biāo)準(zhǔn),包括引腳斷裂、傾斜、數(shù)目缺失等,這些質(zhì)量問(wèn)題會(huì)直接影響電路產(chǎn)品的質(zhì)量。傳統(tǒng)工業(yè)多采用人工檢測(cè)方法,這種方法效率低、實(shí)時(shí)性差,無(wú)法滿(mǎn)足大批量、高精度的檢測(cè)要求。隨著機(jī)器視覺(jué)和圖像處理技術(shù)的發(fā)展,利用機(jī)器視覺(jué)技術(shù)對(duì)SOP芯片引腳進(jìn)行缺陷檢測(cè),不僅檢測(cè)精度高、速度快,還能避免在實(shí)際檢測(cè)中與芯片接觸,保證了芯片的質(zhì)量[1-3]。為了滿(mǎn)足工業(yè)自動(dòng)化的需求,必須對(duì)檢測(cè)后的芯片進(jìn)行分揀,傳統(tǒng)機(jī)械臂多采取固定點(diǎn)抓取,當(dāng)被測(cè)目標(biāo)位置發(fā)生變化時(shí),可能會(huì)導(dǎo)致抓取失敗,而機(jī)器視覺(jué)作為機(jī)械臂重要的感知技術(shù)之一,可以幫助機(jī)械臂獲取到工作范圍內(nèi)任意目標(biāo)的位置[4]。文中基于MATLAB和Arduino軟件平臺(tái),搭配三自由度機(jī)械臂完成SOP芯片的引腳缺陷檢測(cè)與分揀。實(shí)驗(yàn)數(shù)據(jù)表明,該系統(tǒng)具有良好的檢測(cè)和抓取精度。
系統(tǒng)主要由計(jì)算機(jī)、相機(jī)、光源、機(jī)械臂和傳動(dòng)帶組成,完成芯片的引腳缺陷檢測(cè)和抓取工作。首先MATLAB對(duì)1號(hào)相機(jī)采集到的圖像進(jìn)行預(yù)處理,然后采用Blob分析與螢火蟲(chóng)神經(jīng)網(wǎng)絡(luò)相結(jié)合完成芯片引腳的缺陷檢測(cè),檢測(cè)完成后傳送帶將芯片傳送到2號(hào)相機(jī)視野內(nèi),求取芯片形心坐標(biāo)并轉(zhuǎn)換化為機(jī)械臂可以識(shí)別的坐標(biāo),再通過(guò)運(yùn)動(dòng)學(xué)逆解計(jì)算出步進(jìn)電機(jī)的轉(zhuǎn)動(dòng)角度,轉(zhuǎn)化成步進(jìn)值后通過(guò)串口發(fā)送給Arduino,由Arduino控制機(jī)械臂運(yùn)動(dòng),完成芯片的分揀工作。系統(tǒng)總體流程如圖1所示。
圖1 系統(tǒng)總體流程框圖
由于芯片每次放置的角度都不一樣,為了不影響后續(xù)的檢測(cè),在圖像經(jīng)過(guò)灰度化、增強(qiáng)處理后采用Radon變換[5]校正傾斜圖像。Radon變換公式如式(1)所示,圖像校正前后對(duì)比如圖2所示。
(a)校正前
(b)校正后圖2 圖像傾斜校正對(duì)比
(1)
式中:g(θ,s)為變換后得到的一維函數(shù);θ為旋轉(zhuǎn)角度;s為旋轉(zhuǎn)后的直線距離;z(x,y)為校正前圖像某一點(diǎn)(x,y)的灰度值;δ為函數(shù),在xcosθ+ysinθ=s處值為無(wú)限大,其他位置為0。
SOP芯片的引腳存在“海鷗”型特征,即引腳存在傾斜度,當(dāng)LED光源前向照明時(shí),引腳彎折處會(huì)與背景混淆,如圖3直線指向所示。此時(shí)采用傳統(tǒng)Canny檢測(cè)會(huì)導(dǎo)致分割出來(lái)的邊緣不連續(xù),如圖4所示。
圖3 彎折處陰影
圖4 傳統(tǒng)Canny分割
為了解決上述問(wèn)題,在Canny邊緣檢測(cè)中采用雙邊濾波代替?zhèn)鹘y(tǒng)的高斯濾波、采用OTSU算法代替?zhèn)鹘y(tǒng)的人為設(shè)定閾值,通過(guò)增強(qiáng)算法的自適應(yīng)性來(lái)提高邊緣檢測(cè)的效果;最后采用Hough變換連接引腳邊緣。
雙邊濾波相比于高斯濾波會(huì)考慮到某點(diǎn)像素值鄰近關(guān)系和亮度上的相似性,從而在去除噪聲的同時(shí)使邊緣信息更加完整[6]。雙邊濾波公式如式(2)所示。
(2)
式中:f(k,l)為輸入圖像一點(diǎn);g(i,j)為輸出圖像一點(diǎn);S(i,j)為以(i,j)為中心的范圍;w(i,j,k,l)為加權(quán)值,包含定義域核d和值域核r,如式(3)、式(4)所示。
(3)
(4)
式中:i、j為中心點(diǎn)像素位置;k、l為鄰域點(diǎn)像素位置;f(i,j)為中心點(diǎn)灰度值;f(k,l)為鄰域點(diǎn)灰度值;σd為定義域標(biāo)準(zhǔn)差;σr為值域標(biāo)準(zhǔn)差。
OTSU算法是按灰度特性將圖像分成背景和前景兩部分,對(duì)一幅含有L個(gè)灰度級(jí)的圖像M×N,將在0~(L-1)范圍內(nèi)計(jì)算最大方差,從而把背景和前景區(qū)分開(kāi)[7]。在一幅圖像中,每個(gè)灰度值對(duì)應(yīng)的像素值為ni,某點(diǎn)像素i出現(xiàn)的概率為Pi,如式(5)所示。
(5)
假定閾值x(x∈[0,L-1])將圖像分成了前景w0(w0∈[0,x])和背景w1(w1∈[x+1,L-1],那么某一點(diǎn)在w0、w1上的概率如式(6)、式(7)所示。
(6)
(7)
整幅圖像和前景w0、背景w1的平均灰度值如式(8)~式(10)所示。
(8)
(9)
(10)
則由上式就可以求出最大類(lèi)間方差δ2,如式(11)所示。
δ2=Pw0(x)[h0(x)-h(x)]2+Pw1(x)[h1(x)-h(x)]2
(11)
Hough變換[8]可利用圖像的全局特性將目標(biāo)的邊緣像素連接起來(lái)變成一個(gè)封閉區(qū)域。Hough邊緣連接簡(jiǎn)化后的步驟如下:
(1)Hough變換將ρθ參數(shù)空間劃分為累加單元,使用ρ軸和θ軸的單位細(xì)分將每個(gè)點(diǎn)映射到ρθ平面上。
(2)對(duì)像素高度集中的區(qū)域檢驗(yàn)其累加單元的數(shù)量。
(3)分析選中單元中各個(gè)像素之間的聯(lián)系,將不連續(xù)像素之間的距離作為基礎(chǔ),如果縫隙的長(zhǎng)度比設(shè)定閾值小,與給定單元相關(guān)聯(lián)的一條直線中的縫隙就會(huì)被連接起來(lái)。
通過(guò)上述步驟后,對(duì)分割出來(lái)的圖像進(jìn)行填充、濾波后便可以得到完整的引腳二值圖像。傳統(tǒng)算法和改進(jìn)后算法分割圖像如圖5所示。
(a)傳統(tǒng)算法
(b)改進(jìn)后算法圖5 引腳分割對(duì)比
Blob分析是指對(duì)二值圖像中具有相同的像素而且位置相鄰的像素點(diǎn)組成的封閉區(qū)域進(jìn)行分析,從而進(jìn)一步獲取這些區(qū)域的數(shù)目、位置等[9]。對(duì)預(yù)處理得到的引腳二值圖像進(jìn)行Blob分析后得到引腳的數(shù)目,從而檢測(cè)芯片引腳是否缺失。
3.2.1 設(shè)計(jì)理念
設(shè)計(jì)神經(jīng)網(wǎng)絡(luò)的目的是將訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)對(duì)引腳的二值圖像進(jìn)行識(shí)別和分類(lèi)。由于芯片引腳缺失由Blob分析進(jìn)行檢測(cè),所以將引腳的特征分為3類(lèi):合格、傾斜、斷裂。將芯片的每個(gè)引腳進(jìn)行歸一化處理制作成24×14型標(biāo)準(zhǔn)模板,自建部分模板庫(kù)如圖6所示(依次為合格、傾斜、斷裂)。將模板圖片進(jìn)行數(shù)字化,白色區(qū)域數(shù)字化成1,黑色區(qū)域數(shù)字化0。將每一個(gè)引腳圖片數(shù)字化后的0、1數(shù)據(jù)保存在固定矩陣中,作為神經(jīng)網(wǎng)絡(luò)訓(xùn)練的輸入。所以核心思想是利用訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)來(lái)對(duì)引腳二值圖像數(shù)字化后的0、1數(shù)據(jù)進(jìn)行分類(lèi),從而檢測(cè)芯片引腳是否傾斜和斷裂。
圖6 自建部分引腳模板庫(kù)
3.2.2 螢火蟲(chóng)優(yōu)化設(shè)計(jì)
BP神經(jīng)網(wǎng)絡(luò)可以將輸入和輸出產(chǎn)生映射關(guān)系,從而達(dá)到分類(lèi)的效果,但是BP神經(jīng)網(wǎng)絡(luò)有時(shí)易陷入局部最小值而且分類(lèi)精度達(dá)不到系統(tǒng)的要求[10],所以該文利用螢火蟲(chóng)算法(FA)來(lái)對(duì)BP神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化。
螢火蟲(chóng)優(yōu)化原理是把空間中的各點(diǎn)看成螢火蟲(chóng),利用發(fā)光弱的螢火蟲(chóng)會(huì)被發(fā)光強(qiáng)的螢火蟲(chóng)所吸引這一特點(diǎn),在弱光螢火蟲(chóng)向強(qiáng)光螢火蟲(chóng)移動(dòng)的過(guò)程中完成位置的迭代,從而找到最優(yōu)位置[11],具體優(yōu)化步驟如下:
(1)初始化參數(shù)。設(shè)置螢火蟲(chóng)數(shù)目大小M,最大迭代次數(shù)ε及其他參數(shù)值。
(2)螢火蟲(chóng)位置初始化。一個(gè)螢火蟲(chóng)個(gè)體包含BP神經(jīng)網(wǎng)絡(luò)的一種權(quán)值與閾值,螢火蟲(chóng)個(gè)體的維度如式(12)所示。
k=k1k2+k2+k2k3+k3
(12)
式中:k1、k2、k3分別為BP神經(jīng)網(wǎng)絡(luò)的輸入層、隱含層、輸出層節(jié)點(diǎn)數(shù)。
由BP神經(jīng)網(wǎng)絡(luò)的誤差來(lái)計(jì)算螢火蟲(chóng)的目標(biāo)函數(shù)值作為個(gè)體最大熒光亮度I0,由I0得到螢火蟲(chóng)的相對(duì)亮度I,如式(13)所示。再按照亮度對(duì)I0進(jìn)行排序得到螢火蟲(chóng)相對(duì)吸引度βij,如式(14)所示。
I=I0e-γrij
(13)
(14)
式中:β0為最大吸引度;γ為光吸收系數(shù);rij為螢火蟲(chóng)i與j之間的距離,如式(15)所示。
(15)
式中:xik,xjk為i,j2個(gè)螢火蟲(chóng)的k維度權(quán)值與閾值;D為數(shù)據(jù)維度。
(3)根據(jù)相對(duì)亮度I判斷螢火蟲(chóng)位置是否發(fā)生變化,并更新其位置xi(t+1),如式(16)所示。
xi(t+1)=xi(t)+βij[xj(t)-xi(t)]+α(rand-1/2)
(16)
式中:xi(t),xj(t)為螢火蟲(chóng)i和j位于空間中的位置;α為步長(zhǎng)因子,介于[0,1]之間;rand為隨機(jī)因子,介于[0,1]之間。
(4)根據(jù)式(13)~式(14)計(jì)算新的I和βij,并將絕對(duì)發(fā)光強(qiáng)度最小的個(gè)體當(dāng)作新一輪移動(dòng)前絕對(duì)發(fā)光強(qiáng)度最大的個(gè)體,再根據(jù)式(15)、式(16)開(kāi)始新一輪迭代,這樣使所有螢火蟲(chóng)個(gè)體都聚集在亮度最高的位置上,從而實(shí)現(xiàn)最優(yōu)。
(5)到達(dá)最大迭代次數(shù)ε后,停止迭代,取絕對(duì)亮度最大的螢火蟲(chóng)個(gè)體的權(quán)值與閾值代入BP神經(jīng)網(wǎng)絡(luò)中進(jìn)行訓(xùn)練,以生成最佳的FA-BP神經(jīng)網(wǎng)絡(luò)模型。
系統(tǒng)完成芯片的引腳缺陷檢測(cè)后,傳送帶開(kāi)始向左傳動(dòng),當(dāng)芯片進(jìn)入2號(hào)相機(jī)視野時(shí),傳送帶停止傳動(dòng),完成芯片形心坐標(biāo)的提取。
在一幅M×N二值圖像中,假如白色區(qū)域?yàn)槟繕?biāo)區(qū)域,黑色區(qū)域表示非目標(biāo)區(qū)域,則目標(biāo)區(qū)域的形心坐標(biāo)計(jì)算公式如式(17)所示。
(17)
對(duì)芯片圖像進(jìn)行處理后,得到芯片封裝處的二值圖像,根據(jù)公式便可以計(jì)算出二值圖像中芯片的像素形心坐標(biāo),測(cè)試2次不同位置的芯片像素形心標(biāo)記如圖7所示。
(a)芯片A
(b)芯片B圖7 芯片形心標(biāo)記圖
由形心公式求出來(lái)的坐標(biāo)為芯片的像素坐標(biāo),并不能作為最終抓取坐標(biāo),還需要將像素坐標(biāo)轉(zhuǎn)化為機(jī)械臂可以識(shí)別的坐標(biāo)。這一過(guò)程涉及到4個(gè)坐標(biāo)系,分別是像素坐標(biāo)系O0-uv、圖像坐標(biāo)系O-xy、相機(jī)坐標(biāo)系Oc-XcYcZc和世界坐標(biāo)系Ow-XwYwZw,如圖8所示。
圖8 坐標(biāo)系示意圖
若要機(jī)械臂末端到達(dá)芯片的正上方,還需要將相機(jī)與機(jī)械臂運(yùn)動(dòng)產(chǎn)生聯(lián)系,關(guān)鍵步驟是手眼標(biāo)定,基于系統(tǒng)的搭建情況采用眼在手外的標(biāo)定方式[12]。
機(jī)械臂手眼標(biāo)定目的是求得3個(gè)參數(shù):機(jī)械臂基坐標(biāo)系到末端的位姿矩陣A、像素到相機(jī)的內(nèi)參矩陣B、相機(jī)到機(jī)械臂末端的手眼矩陣X。位姿矩陣A通過(guò)運(yùn)動(dòng)學(xué)正解求出,相機(jī)內(nèi)參矩陣B通過(guò)相機(jī)標(biāo)定求出,X矩陣可通過(guò)AX=XB模型求解出,該模型求解主要有Navy算法和Tsai兩步法,由于Tsai兩步法求解更快,因此采用此方法來(lái)求解X矩陣[13]。通過(guò)4個(gè)坐標(biāo)系的轉(zhuǎn)換關(guān)系和手眼標(biāo)定得到的轉(zhuǎn)換矩陣便可以將像素坐標(biāo)(u,v)轉(zhuǎn)化為機(jī)械臂可以識(shí)別的坐標(biāo)(Px,Py,Pz),如式(18)所示。
(18)
式中:Sc為相機(jī)深度值;R3×3、T3×1分別為手眼矩陣X中的旋轉(zhuǎn)矩陣和平移矩陣;K3×3為相機(jī)內(nèi)參矩陣。
4.3.1 機(jī)械臂運(yùn)動(dòng)學(xué)分析
該系統(tǒng)采用三自由度機(jī)械臂完成分揀工作,如圖9所示。腰部的3個(gè)步進(jìn)電機(jī)分別控制機(jī)械臂底座水平運(yùn)動(dòng)、大臂前后運(yùn)動(dòng)、小臂上下運(yùn)動(dòng),機(jī)械臂末端安裝了吸盤(pán),通過(guò)氣泵和電磁閥控制實(shí)現(xiàn)吸盤(pán)對(duì)芯片的抓取和放置。系統(tǒng)搭建圖如圖10所示。
圖9 三自由度機(jī)械臂結(jié)構(gòu)圖
圖10 系統(tǒng)搭建圖
若要機(jī)械臂成功抓取芯片,需對(duì)該機(jī)械臂進(jìn)行正逆運(yùn)動(dòng)學(xué)分析,于是對(duì)該系統(tǒng)三自由度機(jī)械臂建立了連桿坐標(biāo)系,如圖11所示。
圖11 機(jī)械臂連桿坐標(biāo)系
然后根據(jù)表1中的機(jī)械臂連桿參數(shù)采用標(biāo)準(zhǔn)D-H參數(shù)法建立機(jī)械臂運(yùn)動(dòng)學(xué)模型[14]。
表1 機(jī)械臂連桿參數(shù)表
(19)
(20)
(21)
式中:aij、bij為常數(shù)項(xiàng),i=1,2,3。
令等式(21)兩邊矩陣元素對(duì)應(yīng)相等,結(jié)果如式(22)所示。
(22)
式(22)求解結(jié)果如式(23)所示。
(23)
因此,已知機(jī)械臂需要抓取的芯片位置(Px,Py,Pz),便可以通過(guò)式(23)求解出機(jī)械臂到達(dá)芯片正上方每一個(gè)連桿需要轉(zhuǎn)動(dòng)的角度。
4.3.2 機(jī)械臂運(yùn)動(dòng)控制
機(jī)械臂運(yùn)動(dòng)部分采用核心控制器Arduino和MATLAB之間的相互通信來(lái)完成。Arduino程序控制部分采用C語(yǔ)言編寫(xiě),使用易于操作,具有過(guò)電流保護(hù)的A4988模塊驅(qū)動(dòng)步進(jìn)電機(jī),有全步、1/2、1/4、1/8、1/16多種步進(jìn)模式選擇[15]。為了保證機(jī)械臂的運(yùn)動(dòng)精度,該系統(tǒng)采用1/16步進(jìn)模式,并搭配步進(jìn)電機(jī)自身10∶1的減速比,在這種模式下步進(jìn)電機(jī)轉(zhuǎn)動(dòng)一圈則需要32 000個(gè)脈沖,即每個(gè)脈沖會(huì)驅(qū)動(dòng)步進(jìn)電機(jī)運(yùn)動(dòng)0.011 25°。MATLAB對(duì)缺陷檢測(cè)后的芯片進(jìn)行目標(biāo)定位,并通過(guò)式(23)計(jì)算出每個(gè)連桿需要轉(zhuǎn)動(dòng)的角度,再根據(jù)公式stepi=θi/0.011 25°轉(zhuǎn)化為每個(gè)步進(jìn)電機(jī)的步進(jìn)值,通過(guò)串口通信發(fā)送到Arduino,控制機(jī)械臂完成抓取。
實(shí)驗(yàn)選取了合格、傾斜、斷裂引腳模板圖片各50張作為一個(gè)數(shù)據(jù)集,將這些圖片進(jìn)行歸一化后作為神經(jīng)網(wǎng)絡(luò)的輸入P,定義螢火蟲(chóng)數(shù)目為M=50,最大迭代次數(shù)ε=50,最大吸引度β0=0.2,光吸收系數(shù)γ=1,步長(zhǎng)因子α=0.25,將螢火蟲(chóng)優(yōu)化后得到的最優(yōu)權(quán)值和閾值代入神經(jīng)網(wǎng)絡(luò),設(shè)置雙隱含層節(jié)點(diǎn)為[10,3],學(xué)習(xí)速率為0.1、訓(xùn)練目標(biāo)為0.005進(jìn)行訓(xùn)練,數(shù)據(jù)集期望輸出如表2所示。將BP神經(jīng)網(wǎng)絡(luò)與FA-BP神經(jīng)網(wǎng)絡(luò)進(jìn)行對(duì)比訓(xùn)練,數(shù)據(jù)集訓(xùn)練曲線如圖12、圖13所示。
表2 數(shù)據(jù)集期望輸出
圖12 BP網(wǎng)絡(luò)訓(xùn)練誤差曲線圖
圖13 FA-BP網(wǎng)絡(luò)訓(xùn)練誤差曲線圖
由圖12、圖13可以看出,BP神經(jīng)網(wǎng)絡(luò)精度為1.666 7,在迭代4次后停止迭代,出現(xiàn)了局部最優(yōu);FA-BP神經(jīng)網(wǎng)絡(luò)精度為0.774 9×10-4,迭代5次后便達(dá)到了最優(yōu)值。由此可知,螢火蟲(chóng)優(yōu)化神經(jīng)網(wǎng)絡(luò)是有效的,FA-BP神經(jīng)網(wǎng)絡(luò)可以進(jìn)一步尋找最優(yōu)解,訓(xùn)練效率更好,可有效解決BP神經(jīng)網(wǎng)絡(luò)陷入局部最優(yōu)等問(wèn)題。
將優(yōu)化好的神經(jīng)網(wǎng)絡(luò)保存,結(jié)合Blob分析對(duì)引腳進(jìn)行缺陷檢測(cè),檢測(cè)流程如圖14所示,對(duì)芯片引腳斷裂(圖15(d)中7號(hào)和16號(hào)引腳)檢測(cè)的數(shù)據(jù)進(jìn)行優(yōu)化,優(yōu)化前后數(shù)據(jù)對(duì)比如表3所示。
圖14 引腳缺陷檢測(cè)流程圖
表3 優(yōu)化前后分類(lèi)數(shù)據(jù)對(duì)比
通過(guò)Blob分析與螢火蟲(chóng)神經(jīng)網(wǎng)絡(luò)相結(jié)合對(duì)200個(gè)芯片進(jìn)行缺陷檢測(cè)測(cè)試,取具有代表性的引腳二值圖像,如圖15所示。
(a)合格
(b)缺失
(c)傾斜
(d)斷裂圖15 引腳二值圖像
最后對(duì)機(jī)械臂抓取進(jìn)行測(cè)試,其中10個(gè)目標(biāo)芯片的實(shí)驗(yàn)測(cè)試數(shù)據(jù)如表4所示,圖16為末端執(zhí)行器抓取一個(gè)芯片從傳送帶到放置區(qū)域的過(guò)程。
圖16 單個(gè)芯片分揀過(guò)程
表4 機(jī)械臂控制實(shí)驗(yàn)數(shù)據(jù)
從表3數(shù)據(jù)可以看出,經(jīng)過(guò)螢火蟲(chóng)優(yōu)化后,神經(jīng)網(wǎng)絡(luò)對(duì)引腳缺陷類(lèi)型的分類(lèi)精度有所提升,解決了BP神經(jīng)網(wǎng)絡(luò)的分類(lèi)精度達(dá)不到系統(tǒng)要求的問(wèn)題,提高了SOP芯片引腳缺陷檢測(cè)的成功率;從圖16和表4可以看出,設(shè)計(jì)搭建的芯片分揀系統(tǒng)對(duì)任意放置的芯片都能夠很好的實(shí)現(xiàn)定位和分揀功能。
文中提出了一種SOP芯片引腳缺陷檢測(cè)與分揀的方法,由實(shí)驗(yàn)數(shù)據(jù)可知系統(tǒng)易于操作,自動(dòng)化程度高,達(dá)到了高精度、實(shí)時(shí)性的要求,提高了工業(yè)中SOP芯片缺陷檢測(cè)和分揀的效率,具有一定的參考意義。