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 으로 해주시기 바랍니다)

댓글 8개:

  1. 2D 보정시 K-factor(bit/mm) 값을 필요로 하는데, K-factor가 뭔지 그리고 이 값을 모를경우 어떤식으로 K-factor값을 구할할 수 있는지 혹은 K-factor를 안쓰고 다른 방법으로 보정할 수 있는지에 대해서 알려주실 수 있나요?

    답글삭제
    답글
    1. RTC 3,4 의 경우 위치를 제어하는 단위가 비트(bits)입니다.
      또한 이 비트의 단위가 16비트 즉 2^16승으로 resolution 이 16비트로 보시면 됩니다.
      범위는 -65,... ~ + 65,... 가 되겠지요. 만약 65536 bit 위치로 스캐너를 보내면 갈수있는 최대의 위치로 이동됩니다. 이때 거리가 약 A mm 라고 하면 bits/mm = 65536 / A 가 되겠지요. 이를 k-factor 라고 통상 부릅니다. k-factor 를 구해야 사용자 단위계와 스캐너 제어 단위를 조작할수있으니 편합니다.

      삭제
  2. RTC5 or 6 에 대한 calibration 프로그램을 개발해보고자합니다
    도움을 좀 받고싶습니다만 위에 gmail 로 메일 문의드려도 괜찮을까요

    답글삭제
    답글
    1. 메일주소는 sepwind@gmail.com 혹은 010-둘767-삼팔구육 으로 문의주시길 바랍니다. 감사합니다.

      삭제
  3. 특정 구간의 보정도 가능합니다. 아니면 특정 구간을 제외한 영역에 오차값을 0 으로 입력해도 가능하며, 아예 구간을 제외하고 데이타를 넣지 않게되면 이 부분은 보정이 적용되지 않아 stitching 에러가 발생하게 되겠지요. 사용하지 않는 영역이라면 큰 문제는 없으리라 봅니다.

    답글삭제
  4. 40mm 를 3x3으로 하게 되면, 대략 -20,0,20 의 9 개의 보정점 위치가 있는데, 예를 들어 좌상단이 여러 이유로 측정이 곤란하다면, 오차값을 측정하지 않고 그냥 x=-20, y=20 으로 설정한체로 보정을 돌리면, 보정은 성공하게 됩니다. 물론 좌상단에서는 위치 오차가 발생하겠지만요. 참고하세요.

    답글삭제
  5. 안녕하세요 요즘 RTC4/5 관련 보정 프로그램을 제작 중에 있습니다 .
    CTB / CT5 내부 포멧이 궁금하여 그런데 내부 데이터 정보를 알려주실수 있을까요 ?

    답글삭제
    답글
    1. 해당 파일 포맷은 스캔랩에서 구조에 대한 정보를 제공하지 않습니다. 때문에 개발하시는 보정 프로그램내에서 이 유틸리티 프로그램들(CFMP.exe, CorreXion5, correXionPro)중 하나를 사용하도록 개발해야 합니다.통상 dat 파일에 측정 정보를 기록한후 이를 프로세스의 인자로 전달하는 방식입니다.

      삭제

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

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