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