時間:2007-12-26 10:44:00來源:lijuan
 圖1 坐標位移示意圖 [/align]
    ● 坐標旋轉 
   (1)將(X1,Y1)轉換成極坐標→ (X1,Y1) = (R1,θ1) 
    其中,R1 = √X12 + Y12 
    θ1 = arctan( Y1 / X1 ),即反正切函數 
    (2)θ2 = θ1 + θ,其中,θ= 表示旋轉角度 
    得出 X2 = Cos (θ2) * R1 
    = Cos (arctan(Y1/X1)+θ) * 
    √X12 + Y12 
    Y2 = Sin(θ2) * R1 
    = Sin(arctan(Y1/X1)+θ) * √X12 + Y12 
    
[align=center]
圖1 坐標位移示意圖 [/align]
    ● 坐標旋轉 
   (1)將(X1,Y1)轉換成極坐標→ (X1,Y1) = (R1,θ1) 
    其中,R1 = √X12 + Y12 
    θ1 = arctan( Y1 / X1 ),即反正切函數 
    (2)θ2 = θ1 + θ,其中,θ= 表示旋轉角度 
    得出 X2 = Cos (θ2) * R1 
    = Cos (arctan(Y1/X1)+θ) * 
    √X12 + Y12 
    Y2 = Sin(θ2) * R1 
    = Sin(arctan(Y1/X1)+θ) * √X12 + Y12 
    
[align=center] 圖2 坐標旋轉的示意圖 [/align]
    
    ● 坐標位移+旋轉 
    
    遇到同時發生坐標位移和旋轉時,先計算位移,再套用旋轉的公式,即可算出最后的結果。 
    下面介紹如何設計出結合“機械運動”與“計算機視覺”的自動化定位系統。 
    
    基本架構 
    
    ● GEME-3000主控制器:含HSL控制卡,安裝Windows XP操作系統 
    ● 3-Axis定位平臺:三菱伺服馬達+滾珠螺桿 
    ● 運動控制器:HSL-4XMO控制模塊 
    ● 計算機視覺組件:使用IEEE 1394 CCD采集影像,利用Euresys eVision的EasyMatch進行影像比對(Pattern Match),作定位偏移的補正計算。 
    
    完整的實際系統如圖3所示。 
    
[align=center]
   
圖2 坐標旋轉的示意圖 [/align]
    
    ● 坐標位移+旋轉 
    
    遇到同時發生坐標位移和旋轉時,先計算位移,再套用旋轉的公式,即可算出最后的結果。 
    下面介紹如何設計出結合“機械運動”與“計算機視覺”的自動化定位系統。 
    
    基本架構 
    
    ● GEME-3000主控制器:含HSL控制卡,安裝Windows XP操作系統 
    ● 3-Axis定位平臺:三菱伺服馬達+滾珠螺桿 
    ● 運動控制器:HSL-4XMO控制模塊 
    ● 計算機視覺組件:使用IEEE 1394 CCD采集影像,利用Euresys eVision的EasyMatch進行影像比對(Pattern Match),作定位偏移的補正計算。 
    
    完整的實際系統如圖3所示。 
    
[align=center] 圖3 系統架構實機圖 [/align]
    
    系統校正 
    
    ● Mitsubishi驅動器調校:10 000 pulse/roll,即運動控制卡送出10 000個脈波,馬達會轉一圈。 
    ● 滾珠螺桿的螺距vs. Pulse/Roll:如,螺距=10mm/roll,10 000 pulse/roll意味著1μm/pulse,即每發出一個脈沖,螺桿會前進1μm。
    ● F.O.V.(Field of View)的選定:F.O.V.要大于定位點的大小,太小則導致可接受的“初步定位”誤差變小;太大則導致因定位點影像太小,影像定位誤差大。 
    ● CCD工作距離的選定:工作距離要大于打孔頂針,以免對焦時打孔頂針撞到工件。當F.O.V.及工作距離確認后,即求出鏡頭和延伸環。 
    
    教導作業 
    
    ● 啟動系統3軸回到初始位置,待3軸回定位后,再由人工將工件置于3軸之定位平臺上并作“初步定位”; 
    ● 手動控制Z軸緩慢下降,使其接近定位平臺上方(約0.5~1.0mm); 
    ● 手動控制X/Y軸,使打孔頂針剛好在工件第一個孔位上方;再將Z軸緩慢下降,使其插入第一個孔位內。如定位不準,可以手動移動工件,使其定位更準確。 
    ● 精確定位后,將Z軸上升至CCD的實時影像可看到完整“定位點”后,執行圖4所示的流程圖。 
    
[align=center]
圖3 系統架構實機圖 [/align]
    
    系統校正 
    
    ● Mitsubishi驅動器調校:10 000 pulse/roll,即運動控制卡送出10 000個脈波,馬達會轉一圈。 
    ● 滾珠螺桿的螺距vs. Pulse/Roll:如,螺距=10mm/roll,10 000 pulse/roll意味著1μm/pulse,即每發出一個脈沖,螺桿會前進1μm。
    ● F.O.V.(Field of View)的選定:F.O.V.要大于定位點的大小,太小則導致可接受的“初步定位”誤差變小;太大則導致因定位點影像太小,影像定位誤差大。 
    ● CCD工作距離的選定:工作距離要大于打孔頂針,以免對焦時打孔頂針撞到工件。當F.O.V.及工作距離確認后,即求出鏡頭和延伸環。 
    
    教導作業 
    
    ● 啟動系統3軸回到初始位置,待3軸回定位后,再由人工將工件置于3軸之定位平臺上并作“初步定位”; 
    ● 手動控制Z軸緩慢下降,使其接近定位平臺上方(約0.5~1.0mm); 
    ● 手動控制X/Y軸,使打孔頂針剛好在工件第一個孔位上方;再將Z軸緩慢下降,使其插入第一個孔位內。如定位不準,可以手動移動工件,使其定位更準確。 
    ● 精確定位后,將Z軸上升至CCD的實時影像可看到完整“定位點”后,執行圖4所示的流程圖。 
    
[align=center] 圖4 圖像處理軟流程圖[/align] 
    
    自動定位 
    
    ● 由人工將工件置于3軸定位平臺上,作“初步定位”后并啟動本系統; 
    ● 系統會驅動3軸定位平臺將CCD移至定位點上方(2個不同位置),取像并利用已“教導”的標準影像做“影像比對”作業; 
    ● 計算出“初步定位”的偏移量(Shift X/Y)及旋轉角度 (Rotation Angle); 
    
    tx = GoldeXY[CCD_Find][1] - m_Find.GetCenterX(); 
    ty = GoldeXY[CCD_Find][0] - m_Find.GetCenterY(); 
    if (CCD_Find==0) { //第一次定位 
    shiftx = ZeroX - tx*Calibration; 
    shifty = CCD_Y - ty*Calibration; 
    } else { //第二次定位 
    dx = CCD_Locate[1][0] - tx*Calibration; 
    dy = CCD_Y - ty*Calibration; 
    angle = atan2( dy - shifty, shiftx-dx); 
    CalNewLocate(angle, shiftx, shifty); 
    } 
    
    ● 通過“極坐標轉換”,重新計算工件上所有孔位的新坐標(Point Table)。 
    
    void CalNewLocate(F64 angle, F64 shiftx, F64 shifty) 
    { 
    int i; 
    F64 P[TOTAL_POINT*2]; 
    F64 t; 
    
    for (i=0; i
圖4 圖像處理軟流程圖[/align] 
    
    自動定位 
    
    ● 由人工將工件置于3軸定位平臺上,作“初步定位”后并啟動本系統; 
    ● 系統會驅動3軸定位平臺將CCD移至定位點上方(2個不同位置),取像并利用已“教導”的標準影像做“影像比對”作業; 
    ● 計算出“初步定位”的偏移量(Shift X/Y)及旋轉角度 (Rotation Angle); 
    
    tx = GoldeXY[CCD_Find][1] - m_Find.GetCenterX(); 
    ty = GoldeXY[CCD_Find][0] - m_Find.GetCenterY(); 
    if (CCD_Find==0) { //第一次定位 
    shiftx = ZeroX - tx*Calibration; 
    shifty = CCD_Y - ty*Calibration; 
    } else { //第二次定位 
    dx = CCD_Locate[1][0] - tx*Calibration; 
    dy = CCD_Y - ty*Calibration; 
    angle = atan2( dy - shifty, shiftx-dx); 
    CalNewLocate(angle, shiftx, shifty); 
    } 
    
    ● 通過“極坐標轉換”,重新計算工件上所有孔位的新坐標(Point Table)。 
    
    void CalNewLocate(F64 angle, F64 shiftx, F64 shifty) 
    { 
    int i; 
    F64 P[TOTAL_POINT*2]; 
    F64 t; 
    
    for (i=0; i標簽:
                                 
                            
傳動網版權與免責聲明:凡本網注明[來源:傳動網]的所有文字、圖片、音視和視頻文件,版權均為傳動網(www.cdcst56.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-10-31
2025-10-22
2025-10-17
2025-10-11
2025-10-09
2025-09-23