2017년 10월 13일

RTC6 소개


최근 새롭게 출시된 스캔랩(Scanlab)사의 RTC6를 소개해 드리겠습니다. 관련 메뉴얼을 파악해 본바에 따르면 다음과 같은 기술들이 변경되었네요,




1. 외형을 보면 알수있듯이 PCI express 방식과 함께 Ethernet 통신 타입이 발매됨 (더이상 PCI 슬롯 모델은 지원않함)
2. 윈도우 7,8,10 지원. x64 지원 포함 (비스타, XP는 미지원)
3. RTC6 카드를 최대 255개까지 지원
4. excelliSCAN 지원 (해당 기능은 옵션으로 구매)
5. 리스트 버퍼가 RTC5에 비해 8배 증가함. 즉 2^23(8,388,608)개 명령 버퍼 지원
6. Raster operation 사용시 pixel 출력이 최대 800KHz 지원 (옵션사항으로 UFPM(Ultra Fast Pixel Mode) 사용시 3.2MHz 까지 가능 (RTC5는 308KHz)
7. 최대 4개의 채널을 등록하여 데이타 측정 가능 (measurement) 하고 데이타는 최대 2,097,152개 까지 저장됨
8. 최대 4개의 3D 보정(correction) 파일 저장및 사용가능
9. 3D 스캐너 사용시 Z 축 정밀도가 20 bits 로 16배 향상됨(RTC5는 16bits) 또한 Z 축의 tracking-error 를 설정가능함
10. 레이저 delay 파라메터 값들의 정밀도가 32배 즉 1/64usec 로 향상됨 (RTC5는 1/2usec 임)

또한 다양한 함수들이 추가되고 사용법이 향상되었으니 자세한 사항은 메뉴얼을 참고 바랍니다.

2019.1. 추가됨) 
가상영역(virtual image field) 크기가 RTC5에 비해 무려 32배나 증가하였습니다. 즉 RTC5의 virtual image field 영역이 24bits인 반면, RTC6는 29bits 로 대폭 상향되어 MOTF 어플리케이션 적용시 영역제한이 상당히 완화되었습니다.






2017년 9월 5일

excelliSCAN 과 RTC6



작년말경 스캔랩(SCANLAB)에서 고성능의 스캐너와 제어기를 개발발표한바 있습니다. 제품명은 excelliSCAN 으로 주요한 기능으로는 트래킹 에러(Tracking error)가 0 이라는 시간값에 근접한다는 강력한 성능을 가지고 있습니다.
트래킹 에러(tracking error)라는 것은 시간에 대한 오차값으로 갈바노메터(galvanometer)에 명령된 위치와 실제 이동된 위치간의 지연값(latency delay)을 의미합니다. 위의 이미지처럼 제어기(RTC) 에서는 매 10usec 마다 위치 명령이 전송되지만 갈바노메터및 미러장치는 질량이 있고 이에 따른 관성(inertia)도 가지고 있기 때문에 가감속이 진행되고 결국 tracking error 시간만큼의 지연이 발생됩니다.
결국 가감속 부분의 균일하지 못한 위치 차이도 있는데다가, 만약 가공대상 물체가 이동중이라면 가공 위치 오차 (= tracking error * 이동중인 물체의 속도) 만큼의 가공편차가 발생합니다.

이 때문에 RTC 제어기와 스캐너의 조합으로 2차원 on the fly 를 개발하게 되면 치명적으로 위치 오차가 발생됩니다. RTC의 경우 이 오차에 대한 보상으로 tracking error 값을 지정하여 완화시킬수는 있지만 이 또한 등속 구간에서 유효한 값이라 하겠습니다.

이같은 문제를 해결하기 위해 나온것이 바로 tracking error 0 이라는 스펙을 가지는 excelliSCAN 제품이고, 이를 효과적으로 제어하기 위해서는 반드시 RTC6 라는 최신 제어기를 사용해야 합니다.




이 핵심 기술을 "scan-ahead" 라고 부르고 있는데 마치 모션 제어기들이 제공하는 "look-ahead" 라 유사한 명칭입니다. 말그대로 스캐너의 예상 운동경로를 사전에 분석/예측하여 이동 명령을 사전 계산하여 내보내는 것이라 할수있겠습니다.
위 도표와 같이 전통적인 방식의 스캐너의 운동과 달리 명령된 것과 거의 동일한 운동이 발생하는것을 알 수 있습니다. 이를 위해서 Tp (Preview time) 이라는 지연 시간이 발생하는데 이는 결국 사전 계산에 드는 비용으로 볼 수 있습니다.

scan-ahead를 사용하면 해당 시간만큼 명령이 지연되는 손실이 발생하나  (대략 1ms 로 예상됩니다) 스캐너의 실제 운동이 매우 정확해 지고 이에 따른 다양한 동기적 처리 (IO 및 레이저 출사등) 가 가능해 집니다. 결국 좀더 고성능의 2D on the fly 와 같은 제어가 가능해 지는 것입니다.

이 제품을 사용해 on the fly 테스트를 진행한 평가 문서를 보면, 최대 41%의 성능향상이 있으며 위치 정밀도 평균 3.4um, 표준편차 2.9um 로 정밀한 제어가 가능하다고 합니다.




광학 환경은,
- excelliSCAN14
- 100 mm telecentric 렌즈
- 필드 크기 : 54x54 mm
- 최대 마킹 속도 : 2. 5m/s
- 최대 점프 속도 : 20 m/s
- 최대 가속도 : 28*10^3 m/s^2

XY 스테이지의 테스트 환경은,
- 스테이지 크기 : 300x300mm
- 반복정밀도 : 0.1um
- 정밀도 : +- 2um
- 엔코더 분해능 : +- 0.5um
- 최대 속도 : 1 m/s
- 최대 가속도 : 10 m/s^2

모션 제어기 환경은,
- ACS 모션 (NPM 이더켓 드라이버)
- 스캐너 서보 업데이트 :  100KHz
- 스테이지 서보 업데이트 : 20KHz

레이저 환경은,
- JDSU PicoBlade (pico second 레이저)

2017년 8월 23일

레이저 가공 소프트웨어 소개


업무용으로 개발하였던 소프트웨어를 동영상을 통해 간단히 소개해 드리겠습니다. 다음과 같은 기능을 제공하고 있습니다.

1. 다양한 가공 객체 (원, 호, 직선, 나선, 사각형, 로고, 1/2차원 바코드, 전용폰트, 트루타입 폰트) 및 3D 모델용으로 STL, OBJ 포맷을 지원
2. OpenGL 렌더링 엔진을 사용한 하드웨어 가속 (2D/3D 뷰 모드 지원)
3. 다양한 편집 및 되돌리기 지원 (undo/redo)
4. 캐드(DXF) 불러오기및 레이어/ 블럭 등의 캐드 엔티티 처리 지원
5. 레이저 가공 파라메터 정보 변경/ 반복 가공 기능 마법사 지원
6. 가공시 RTC 3,4,5 컨트롤러 지원
7. 다양한 가공 방식 지정 가능 : Step(모션정지후 가공), Route(레이저 고정 출사 + 모션이동으로 가공), Fly(모션+스캐너 동시 이동 가공)





2017년 4월 11일

SCANLAB's RTC 를 이용한 가공 소프트웨어 개발 플랫폼

이번시간에는 스캔랩사의 RTC를 이용한 스캐너 제어 예제 프로그램을 소개해 드리겠습니다. 이 데모 프로그램은 사용자가 해당 제어기 버전(3,4,5)을 선택하여 사용이 가능하도록 Rtc 란 인터페이스를 제공합니다.



추상화된 Rtc 인터페이스를 사용하여, 각 버전간 복잡한 초기화 처리 문제, Import 라이브러리 문제를 내부적으로 처리하여 줍니다. 또한 각 입력 단위(주파수, 지연값, 속도)를 표준화하여 하위 컨트롤러와 무관하도록 동작합니다. Rtc3의 경우 원호보간이 되지 못하는 부분을 자체적으로 직선보간으로 처리하도록 설계되어 있습니다.  스캐너 제어 프로그램 개발에 관심이 있으신 분들은 참고해 보시면 도움이 될것 같습니다.


샘플 프로그램은 깃허브에 오픈소스로 공개하였습니다.



3가지(RTC3, 4, 5) 컨트롤러마다 그 특징이 다른데 비교해 보면 아래와 같습니다.
  1. RTC3
    1. 직선 보간 만 가능
    2. 원호 보간 미지원 
    3. 8000 개의 명령 버퍼
    4. 16비트 제어 분해능
  2. RTC4
    1. 직선및 원호보간 지원
    2. 8000 개의 명령버퍼
    3. 16비트 제어 분해능
  3. RTC5
    1. 직선및 원호보간 지원, Sky writing 지원으로 가감속 영역의 품질 해소, 레이저 출력 신호 동기화를 통해 jitter 해소
    2. marking on the fly 의 가상 영역 제공, 모션 영역 보정 기능 제공
    3. 수백만개의 명령버퍼
    4. 20비트 제어 분해능
    5. XY2-100 에서 SL2-100 으로 디지털 인터페이스 지원
  4. RTC6 
    1. RTC5 와 대부분 유사하고, 내부 메모리가 증가함

스캐너 제어 프로그램을 구현해야 하시는 분들에게 많은 도움이 되었으면 합니다. 행렬 사용기법이나, 대량의 데이타 처리 기법에 대한 궁금증은 문의주시기 바랍니다. 

2017년 3월 31일

레이저+스캐너+스테이지 동기화를 이용한 on the fly 가공 제어 기법

이번시간에는 레이저 + 스캐너 + X,Y 스테이지를 이용한 on the fly 가공 방식에 대해 소개해 드리려 합니다. 
일반적으로 스캐너를 이용한 레이저 가공은 광학시스템이 지원가능한 최대 영역에 대해서만 가공이 가능하고 이보다 큰 영역은 가공 데이타를 쪼개서(stitching) 분할 가공하는것이 일반적입니다.


그러나 레이저 출사를 끊지 않고 모션을 이동시켜 가공을 하게 되면 좀더 큰 대면적을 짧은 시간내에 처리가 가능합니다. 모션 구동측에 있는 서보모터의 이동량 (엔코더 출력을 이용)을 Feedback 받아 스캐너 제어측에 실시간으로 전달하여 처리하는 방식으로 대면적 가공이 가능해 집니다

1. 델타타우의 Power PMAC 을 이용한 on the fly 
2. 에어로텍 (AeroTech) 의 NMark 모션제어기를 이용한 on the fly
3. ESI (Electro Scientific Industries)사의 레이저 on the fly 가공 장비들
4. 스캔랩(Scanlab) 사의 RTC 컨트롤러를 이용한 on the fly 
등이 널리 알려진 방식입니다.

작년에 Power PMAC 제품을 사용해 개발 테스트 해 보았는데, 확실히 기존 방식에 대비하여 40~50% 이상 고속 가공이 가능한것으로 보입니다. 아래 테스트 가공 좌표와 모션 구동 영상을 참고해 보시면 장점을 쉽게 파악하실 수 있습니다.

테스트 하였던 가공 좌표 데이타

구동 동영상

확실히 빨라진것이 보이시나요? 렌즈의 유효 영역이 50*50mm 이고 위와 같이 가공해야 하는 좌표가 500*200mm 이라고 한다면 on the fly 가공방식이 매우 효율적임을 아실것입니다.

델타타우사의 Power PMAC 컨트롤러는 스테이지 X,Y 모터와 스캐너 X,Y 모터를 서로 개별적인 컨트롤러를 사용하지 않고, 하나의 중앙 컨트롤러가 모두 제어하는 방식인데, 이때 스캐너라는 두개의 미러를 사용하여 발생하는 역학 연산에 대해서는 역기구학(inverse kinematics) 을 개발자에게 제공하고 있습니다.

이 수식을 모션 프로그램에 삽입하여 사용자는 단순히 2차원의 가공 위치를 입력하면, 실제 스캐너측의 두 모터의 이동량을 구하여 처리됩니다.
또한 저속의 X,Y 스테이지와 고속의 X,Y 스캐너에 운동량을 분배(load balance ?)할 수 있도록, 로우패스 필터(LPF)를 제공해 주는 방식입니다. 나머지 좌표데이타의 연산, 전달, 순서 등의 상위 어플리케이션의 몫이 되겠습니다.

* 독일 SCANLAB 사에서는 RTC6와 ACS 모션 컨트롤러를 조합하여 on the fly 솔류션을 개발중이고, 하반기 시장에 출시하려는 예정이라고 하네요.

2017년 2월 8일

MSCOMM32.ocx 를 이용한 시리얼 통신 방법

C++ 기반의 프로그램 개발중 시리얼통신(RS-232 등) 이 필요한 경우 다양한 컴포넌트를 사용하기도 하지만, 이번에는 MS 에서 오래전에 개발하여 제공하는 OCX(COM 컴포넌트) 를 사용하는 방법에 대해 알아보겠습니다.

1. 우선 MSCOMM32.ocx 를 인터넷 검색등을 통해 구해야 합니다.

다음과 같이 OCX를 레지스트리에 등록합니다.

c:\ ... > copy mscomm32.ocx c:\windows\system32\mscomm32.ocx
c:\ ... > regsvr32 /s c:\windows\system32\mscomm32.ocx




해당 ocx 를 사용하려면 활성화( MS 사의 프로그램 개발툴이 미설치되어 있으면 사용이 불가하다고 합니다?)를 시켜주어야 하는데, 인터넷을 검색하여 보니 특정한 레지스트리 키를 만들어 생성시키면 가능하다고 합니다.

REGEDIT4
[HKEY_CLASSES_ROOT\Licenses\4250E830-6AC2-11cf-8ADB-00AA00C00905]
@ = "kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"


위 내용을 a.reg 라는 파일로 만들고

c:\...> regedit /s a.reg

콘솔 명령을 통해 활성화가 가능합니다.


2. ocx 에서 type library 를 추출한다.

C++ 빌더 개발환경에서 typelib 등을 추출합니다. (implib.exe 유틸을 사용해도 가능)
그렇게 하면, MSCommLib_OCX.cpp / MSCommLib_TLB.cpp 등의 파일이 추출됩니다.


3. 마지막으로는 통신이 필요한 곳에서 다음과 같이 COM 오브젝트를 생성하여 사용합니다.

TMSComm* pSerial = NULL;
pSerial = new TMSComm(this);

pSerial->CommPort = 1;
pSerial->Settings = "9600,N,8,1";
pSerial->OnComm = this->OnCommEvent;
pSerial->PortOpen = true;
pSerial->Output = "YourSendMessage\r";

위에서 OnCommEvent 이벤트 핸들러는 데이타 수신시 Notify 되는 콜백함수이므로 미리 구현해 놓고 pSerial->Input 으로 수신데이타를 처리합니다.




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...