2017년 1월 31일

2D/3D 스캐너 보정방법

SCANLAB 사의 RTC 제품들을 사용해 정밀한 레이저 가공을 위해서는 필히 스캐너의 왜곡을 보정해서 사용해야 합니다. 왜곡이 발생되는 이유는

- X, Y 라는 두개의 반사거울의 각도를 돌리면 서로간의 거리가 각도에 따라 변하고,
- 빛을 초점에 모아 에너지를 집중하는 광학적인 렌즈를 사용하기 때문입니다.

그럼 아래의 예에서 3가지 방법을 살펴보겠습니다.

1. RTC4 기반의 2D 보정

아래와 같이 텍스트 기반의 파일을 만들어 CFMP.exe 의 인자로 지정하면 됩니다.

CFMP 는 위와 같은 형식의 텍스트 파일을 분석해 그 결과로 새로운 보정 파일(ctb)을 생성하게 됩니다.


this line for comments
c:\test\Cor_1to1.ctb   inputfile (*.ctb)
c:\test\result.ctb   outputfile (*.ctb)
580   calibration [bit/mm]
25   number of points [9,25,49,81,121,169,225,289]
25   grid spacing[mm]
-50  50
-25  50
0  50
25  50
50  50
-50  25
-25  25
0  25
25  25
50  25
-50  0
-25  0
0  0
25  0
50  0
-50  -25
-25  -25
0  -25
25  -25
50  -25
-50  -50
-25  -50
0  -50
25  -50
50  -50







2. RTC5 기반의 2D 보정



RTC5는 좀더 많은 개수의 격자(Grid)를 지원합니다.
RTC4의 경우는 17*17 이 최대치이지만 RTC5는 더욱 많은 보정포인트를 지정 할 수 있습니다. 그러나 보정 격자의 개수가 많다고 좋은것은 아닌데, 예를 들어 100mm 의 FOV(Field Of View)를 가지는 경우 11*11 개수의 격자를 이용해 보정할 경우 1.5um 미만의 표준편차를 가진다고 하니 많은 수의 격자를 측정할 필요는 없겠지요?
아래와 같은 텍스트 파일을 생성하여 CorreXion5.exe 와 같은 프로그램에 인자로 실행하게 되면 그 결과로 대상 보정파일(ct5)및 로그 파일(.log)이 생성됩니다. 보정파일이 생성되지 않는 다면 로그 파일을 통해 문제점등을 파악할수 있습니다.


[INPUT]  = c:\test\Cor_1to1; input table file
[OUTPUT] = c:\test\result; output table file
[CALIBRATION] = 10000; bit/mm
[RTC4]  = 0
[FITORDER] = 0
[SMOOTHING] = -1
[AUTO_FIT] = 0
[TOLERANCE] = 0.1
[APPLY_OFFSET] = 0
[Limit(Bits)] = 524288
[Limit(mm)] = 52.4288
[OffsetX] = 0
[OffsetY] = 0
[Deviation] = 0

[GRIDNUMBERS] = 2 2

[GRIDVALUES_X] = -50
[GRIDVALUES_X] = -25
[GRIDVALUES_X] = 0
[GRIDVALUES_X] = 25
[GRIDVALUES_X] = 50

[GRIDVALUES_Y] = 50
[GRIDVALUES_Y] = 25
[GRIDVALUES_Y] = 0
[GRIDVALUES_Y] = -25
[GRIDVALUES_Y] = -50

 Xn Yn X mm Y mm

 -2 2 -50 50
 -1 2 -25 50
 0 2 0 50
 1 2 25 50
 2 2 50 50
 -2 1 -50 25
 -1 1 -25 25
 0 1 0 25
 1 1 25 25
 2 1 50 25
 -2 0 -50 0
 -1 0 -25 0
 0 0 0 0
 1 0 25 0
 2 0 50 0
 -2 -1 -50 -25
 -1 -1 -25 -25
 0 -1 0 -25
 1 -1 25 -25
 2 -1 50 -25
 -2 -2 -50 -50
 -1 -2 -25 -50
 0 -2 0 -50
 1 -2 25 -50
 2 -2 50 -50


로그 파일의 예



Tue Jan 31 13:23:04 2017

Current working path: c:\test
Current data file: 20170131-13-23.dat
[INPUT] = Cor_1to1
[OUTPUT] = result
InFile Calibration: 0 ignored
[RTC4] = 0
[CALIBRATION] = 10000
[GRIDNUMBERS]  = 2  2; grid X, grid Y; points: 5 per line, 5 per column, total 25
Piecewise linear interpolation used for calculation, 
[OUTPUT]: result written successfully
[CALIBRATION] = 10000 ;final
[APPLY_OFFSET] = 0
[Limit(Bits)] = 524288 +/- [Bits]
[Limit(mm)]   = 52.4288 +/- [mm]

[OffsetX] = 0 [Bits]
[OffsetY] = 0 [Bits]
[TOLERANCE] = 0.1
[Deviation] = 0
correXion5.exe terminated







3. RTC5 기반의 3D 보정


앞서 2D 영역 (Z=0)에서의 보정을 보여드렸다면, 3차원 영역을 보정하는 방법도 소개해 드리겠습니다.


그러기 위해서는 3D 스캐너를 장착(VarioScan 등)하고, 사용자가 원하는 공간 (Z - , Z +) 에 대해 측정이 필요합니다. 즉 Z=0 에 대한 보정을 우선 실시하고, Z - , Z + 두 영역에 대해 실측하여 아래 텍스트 파일을 생성해야 합니다.


[INPUT]   = c:\test\D3_1351.ct5; input table filename
[OUTPUT]  = c:\test\result.ct5; output table filename

[GRIDNUMBERS] = 2 2; grid x(col), y(row)

[GRIDVALUES_X] =-50
[GRIDVALUES_X] =-25
[GRIDVALUES_X] =0
[GRIDVALUES_X] =25
[GRIDVALUES_X] =50

[GRIDVALUES_Y] =50
[GRIDVALUES_Y] =25
[GRIDVALUES_Y] =0
[GRIDVALUES_Y] =-25
[GRIDVALUES_Y] =-50

[Z_VALUE] =20; z1(mm)

 iX iY X[mm] Y[mm]

 -2 -2 -50 -50
 -1 -2 -25 -50
 0 -2 0 -50
 1 -2 25 -50
 2 -2 50 -50
 -2 -1 -50 -25
 -1 -1 -25 -25
 0 -1 0 -25
 1 -1 25 -25
 2 -1 50 -25
 -2 0 -50 0
 -1 0 -25 0
 0 0 0 0
 1 0 25 0
 2 0 50 0
 -2 1 -50 25
 -1 1 -25 25
 0 1 0 25
 1 1 25 25
 2 1 50 25
 -2 2 -50 50
 -1 2 -25 50
 0 2 0 50
 1 2 25 50
 2 2 50 50

[Z_VALUE] =-20; z2(mm)

 iX iY X[mm] Y[mm]

 -2 -2 -50 -50
 -1 -2 -25 -50
 0 -2 0 -50
 1 -2 25 -50
 2 -2 50 -50
 -2 -1 -50 -25
 -1 -1 -25 -25
 0 -1 0 -25
 1 -1 25 -25
 2 -1 50 -25
 -2 0 -50 0
 -1 0 -25 0
 0 0 0 0
 1 0 25 0
 2 0 50 0
 -2 1 -50 25
 -1 1 -25 25
 0 1 0 25
 1 1 25 25
 2 1 50 25
 -2 2 -50 50
 -1 2 -25 50
 0 2 0 50
 1 2 25 50
 2 2 50 50



이후 StretchCorreXion5.exe 와 같은 전용 프로그램을 이용해 해당 텍스트 파일을 인자로 주게 되면,
그 결과를 로그 파일(.log)로 알려주는 방식입니다.



Tue Jan 31 13:28:07 2017

Current data file: 20170131-13-28.dat

[INPUT]  = c:\test\D3_1351.ct5; input table filename
[OUTPUT] = c:\test\result.ct5; output table filename

[GRIDNUMBERS]  = 2  2; grid X (columns), grid Y (rows)

[GRIDVALUES_X] =      -50.000000     -25.000000       0.000000      25.000000
[GRIDVALUES_X] =       50.000000

[GRIDVALUES_Y] =      -50.000000     -25.000000       0.000000      25.000000
[GRIDVALUES_Y] =       50.000000

DataPoints: total points = 25

[Z_VALUE] =      20.000000;  Z1[mm]

    iX     iY     X[mm]          Y[mm]

    -2     -2       -50.000000     -50.000000
    -1     -2       -25.000000     -50.000000
     0     -2         0.000000     -50.000000
     1     -2        25.000000     -50.000000
     2     -2        50.000000     -50.000000
    -2     -1       -50.000000     -25.000000
    -1     -1       -25.000000     -25.000000
     0     -1         0.000000     -25.000000
     1     -1        25.000000     -25.000000
     2     -1        50.000000     -25.000000
    -2      0       -50.000000       0.000000
    -1      0       -25.000000       0.000000
     0      0         0.000000       0.000000
     1      0        25.000000       0.000000
     2      0        50.000000       0.000000
    -2      1       -50.000000      25.000000
    -1      1       -25.000000      25.000000
     0      1         0.000000      25.000000
     1      1        25.000000      25.000000
     2      1        50.000000      25.000000
    -2      2       -50.000000      50.000000
    -1      2       -25.000000      50.000000
     0      2         0.000000      50.000000
     1      2        25.000000      50.000000
     2      2        50.000000      50.000000

[Z_VALUE] =     -20.000000;  Z2[mm]

    iX     iY     X[mm]          Y[mm]

    -2     -2       -50.000000     -50.000000
    -1     -2       -25.000000     -50.000000
     0     -2         0.000000     -50.000000
     1     -2        25.000000     -50.000000
     2     -2        50.000000     -50.000000
    -2     -1       -50.000000     -25.000000
    -1     -1       -25.000000     -25.000000
     0     -1         0.000000     -25.000000
     1     -1        25.000000     -25.000000
     2     -1        50.000000     -25.000000
    -2      0       -50.000000       0.000000
    -1      0       -25.000000       0.000000
     0      0         0.000000       0.000000
     1      0        25.000000       0.000000
     2      0        50.000000       0.000000
    -2      1       -50.000000      25.000000
    -1      1       -25.000000      25.000000
     0      1         0.000000      25.000000
     1      1        25.000000      25.000000
     2      1        50.000000      25.000000
    -2      2       -50.000000      50.000000
    -1      2       -25.000000      50.000000
     0      2         0.000000      50.000000
     1      2        25.000000      50.000000
     2      2        50.000000      50.000000


[Stretch_X] =   0.0038050720
[Stretch_Y] =   0.0031820973

c:\test\result.ct5 written successfully


로그 파일의 마지막 줄에는 3D 보정에서 사실상 가장 중요한 두가지 값이 추출된것을 확인하실수 있습니다.
Stretch X, Stretch Y 로 결국 3D 보정을 하게 되면 이 두 개의 상수를 구하게 되는 것입니다.
해당 수치는 보정파일의 헤더 영역에 기록되게 됩니다.



4. 유틸리티

RTC , 2D , 3D 모드등을 선택하여 사용자가 손쉽게 보정을 실시할수있도록 위의 기능들을 모아 아래 유틸리티를 만들어 보았습니다.


2D 보정의 예


3D 보정의 예 


3D 보정에 의해 Stretch X, Y 가 변경된 모습


다운로드 링크 : 다운로드 (평가판으로 7일간 모든 기능을 지원합니다. 상용버전 문의는 labspiral@gmail.com 으로 해주시기 바랍니다)

시리우스 라이브러리 홈페이지 오픈

현재 시리우스(Sirius) 라이브러리라는 제품을 개발하고 이를 소개하는 홈페이지를 오픈 하였습니다. 관심있는 분들의 많은 방문 요청드립니다. 앞으로 업데이트 소식및 변경사항은 스파이럴랩 홈페이지를 통해 진행할 예정입니다. 스파이럴랩 홈페이지 :  h...