[7호]2010 캡스톤 우수상 – 전자 오카리나
2010 디바이스마트
캡스톤 디자인 공모전 우수작
전자 오카리나
팀명 : Soul Music
참가자 : 백제동
악기 소리의 특징 및 설계방향
악기 소리와 기계적인 비프음의 차이는 크게 두 가지가 있습니다. 첫번째로 악기는 음계의 정확한 주파수에 맞는 소리파형을 만들어 낸다는 것입니다. 두번째로 악기는 하모닉스 또는 배음이라고 하는 음계 주파수 이외의 높은 주파수를 포함하고 있습니다.
음계 주파수는 440Hz를 기본 ‘라’ 음으로 하고, 한 옥타브가 높을 경우 주파수가 2배가 되고 한 옥타브가 낮을 경우 반으로 줄어들게 됩니다. 한 옥타브에 포함되는 음계의 수는 반음을 포함하여 12개가 있는데 한 음이 올라갈 때마다 이전 음계 주파수에 2112를 곱하면 됩니다.
그림1-오카리나 소리의 주파수 스펙트럼은 녹음된 오카리나의 주파수 스펙트럼인데 기본음계 주파수의 크기가 가장크고 2배음~6배음까지는 작은 것이 보일겁니다. 실제 오카리나와 최대한 비슷하게 구현하여야 하겠지만, 현실적으로 배음을 똑같이 합성하기 위해서는 굉장히 많은 연산을 수행하여야 합니다.
그래서 필자는 이와 비슷하게 배음 성분을 가지고 있으면서 파형을 합성할 때 연산량이 획기적으로 적은 톱니파를 사용하기로 하였습니다. 톱니파의 모양과 주파수 스펙트럼은 다음 그림과 같습니다. 톱니파의 합성의 경우 단순히 바이너리 카운트 값을 DAC로 입력하여 주기만 하기 때문에 간단하면서도 그럭저럭 괜찮은 소리를 합성하는 효과적인 방법이고 할 수 있습니다.
터치센서
최근 터치센서 IC가 많이 출시되어 스위치 대용으로 사용되고 있습니다. 디바이스트에서 판매중인 ADM801 터치센서의 경우 가격, 반응속도, 사용상의 편의성 등이 상대적으로 우수합니다. 또한, 예전에는 정전방식의 터치센서를 사용하기 위해서는 IC 주위에 특정 용량의 저항과 캐패시터를 필요로 하고, 손이 닫는 메탈 플레이트 부분도 따로 제작하거나 구입하여야 했는데 ADM801은 VCC, GND, Vout 만 연결하면 되기 때문에 사용하기에 간편합니다.
아직은 터치 센서가 버튼 보다 비싸긴 하지만 여러모로 장점이 있습니다. 터치 센서는 버튼과 비교하여 과도한 힘이 들어가지 않으며 눌렀을 때 기계적인 ON/OFF 소음이 없고, ON/OFF 순간의 노이즈가 적습니다.
전체 회로 설명
전자 오카리나는 크게 FPGA 부분과 마이크로컨트롤러(AVR) 부분으로 나누어집니다. FPGA에서는 터치센서에서 입력되는 값을 오카리나의 운지법에 맞게 음계 바이너리 값으로 변환하는 역할과 바람세기의 값에 따라 톱날파의 진폭을 조절하며 디지털 파형을 출력하는 역할을 합니다. 마이크로 컨트롤러에서는 내장된 ADC를 사용하여 기압센서에서 입력되는 바람세기 값을 FPGA로 보내주는 역할과 FPGA에서 보내주는 음계 값을 LED로 표시하는 역할을 합니다.
FPGA에서 생성된 디지털 파형은 DAC를 통하여 아날로그 전압의 형태로 변환된 후 에코회로를 통과 후 앰프로 증폭된 후 스피커를 통하여 소리로 변환됩니다.
FPGA 회로구성
FPGA는 M2CV에서 제작한 모듈을 사용하였고, 모듈의 핀에 연결된 회로는 <표 1>과 <표 2>에 표시되어 있습니다.
FPGA J1 커넥터 연결 부품 | FPGA J2 커넥터 연결 부품 |
AVR 회로구성
AVR 모듈은 MAT128-10을 사용하였고, 핀 할당은 그림 7에 나타나 있습니다. 음계 표시 LED는 2색 LED를 사용하여 AVR에서 두 개의 포트를 사용합니다. PORTE는 UART 통신을 위하여 비워두고 나머지 포트를 사용했습니다.
DAC 회로구성
FPGA 내부에서 생성한 디지털 파형을 현실 세계의 아날로그 파형으로 변환하기 위하여 DAC 칩을 사용하였습니다. DAC 부품을 선택할 때 가장 중요하게 보았던 부분은 DIP 타입의 패키지로 납땜이 쉬우면서도 디지털 파형 입력을 쉽게 할 수 있는지 여부입니다. 이러한 면에서 DAC0800은 제일 적합하였지만 -5V를 필요로 하는 방식이기에 많이 망설였습니다. 제어하기 쉬운 장점도 있었고 비동기 방식으로 디지털 파형을 입력하므로 높은 주파수의 파형을 출력 할 때에는 노이즈 성분도 많이 발생하였습니다.
FPGA HDL 코딩
<그림 9>는 FPGA 내부의 소리를 합성하는 부분의 블록도입니다.
음계 인코더 부분은 오카리나의 운지에 따라 도는 1, 레는 2,… 이런식으로 변환을 하여 줍니다. 음계 주파수 카운터 롬은 각각의 음계의 정확한 주파수를 출력하기 위하여 출력 파형의 한 샘플을 FPGA의 기본클럭(80Mhz)으로 카운트 하면서 유지하여야 하는지에 대한 값입니다. 카운터는 8비트 카운터로 음계 주파수 카운터 롬에서 입력되는 값만큼 카운터를 하면 출력 카운터를 1 증가시키는 역할을 합니다. 예를 들어 음계 주파수 카운터 롬에서 10 이라는 숫자가 카운터 블록에 입력되면 톱날파 한 주기를 출력하는데는 10 × 256 = 2560 의 클럭이 소요된 것이고, 이를 실제 시간으로 변환할 경우 12.5[ns] × 2560 = 32[us]가 되고, 최종적으로 톱니파의 주파수는 1/0.000032 = 31.250[KHz] 가 됩니다.
AVR 펌웨어 개발
AVR 펌웨어를 컴파일 하기 위하여 필자는 코드비전 2.x 를 사용하였습니다. 코드비전은 프로젝트를 생성할 때 GUI 형태로 옵션을 설정하면 기본적인 코드가 생성되어 AVR을 잘 모르는 초보가 사용하기에 편합니다. 필자 역시 AVR은 초보이기에 코드비전 밖에는 사용할 줄 모르지만 코디비전으로 바람센서에서 사용했던 ADC기능을 간단하게나마 알려드리겠습니다.
ADC를 가장 쉽고 안전하게(?) 사용하는 방법은 ADC 동작 클럭을 최대한 낮추는 것입니다. 프로젝트 생성 시에 Chip 옵션중에 Crystal Oscillator Divider Enabled 라는 옵션이 있는데, 이것은 기본 클럭을 분주해서 사용하겠다는 의미 입니다. 필자의 경우 기본클럭을 64로 나누라고 설정하였습니다. 이렇게 클럭 분주 옵션을 설정하게 되면 ADC 탭의 동장 주파수 부분도 맞춰서 낮아지게 됩니다.
그림 10. 코드비전의 프로젝트 생성 중 Chip 설정 | 그림 11. 코드비전의 프로젝트 생성 중 ADC 설정 |
소스코드 부분은 ADC와 관련된 부분만 추려서 기재하였습니다. PF0에 연결된 바람센서의 전압값을 읽어오기 위해서는 read_adc(0); 을 호출하고 리턴값을 사용하면 됩니다.
<소스코드 1>은 AVR의 핀을 사용하고 실제 회로를 납땜하는 문제 때문에 PORTF에 바람센서의 ADC 입력과 바람의 크기의 디지털 출력이 할당하게 되어 두 기능이 충돌되지 않도록 동작하는 코드입니다.
<소스코드 > AVR 펌웨어의 주요 소스코드
// 기압센서의 바람세기를 FPGA로 출력
while (1) {
adc_tmp = read_adc(0); // ADC값을 읽어옴
adc_tmp = (adc_tmp >> 1) & 0b01111110; //출력핀에 맞게 조정
adc_tmp = PORTF | adc_tmp; //PORTF의 다른핀의 값과 합침
PORTF = adc_tmp; //핀으로 출력
//바람세기 LED 출력
(생략)..
//음계 LED 출력
(생략)…
};
에코 이펙트 회로
음향관련 분야에서 보았을 때 이펙트는 소리를 보다 듣기 좋게 꾸며주는 역할을 합니다. 마치 사진을 찍고 난 후 포토샵을 통해서 보기 좋게 수정하는 것과 같다고 보시면 됩니다. 노래방 마이크에는 에코 이펙트가 추가되어있어서 노래방에서 부르면 더 잘 부르는것처럼 들려지게 들립니다. 에코는 노래 뿐만 아니라 악기 연주 시에도 많이 사용되며 특히 오카리나와 같은 관악기에는 거의 필수적으로 사용됩니다.
에코 이펙트는 소리를 메아리처럼 울리는 역할을 합니다. 에코 이펙트 회로를 분석하기 위해 디바이스마트에서 판매중인 MX044(3채널 가라오케 마이크 믹서) 키트를 사용하여 에코 IC의 성능도 확인하였고, 어떤 IC를 사용하는지도 확인하였습니다.
회로 완성
그림12. 전자 오카리나 사진 | 그림13. 전자 오카리나의 윗면 회로 | 그림14. 전자 오카리나의 아랫면 회로 |
회로가 복잡하여 실제 연주가 가능한 형태로 제작하기 위해 2개의 기판을 사용하게 되었습니다. 윗면에는 FPGA, 터치센서, DAC, 에코 이펙터 회로가 있고, 아랫면에는 AVR, 바람센서, LED, 앰프회로가 있습니다. 바람센서(MPX5010DP) 부분에 취구는 멜로디언의 취구를 사용하였는데 조잡하기도 하고 위생적으로도 문제가 있어 많은 개선이 필요합니다.
공모전 후기
혼자서 캡스톤 공모전 프로젝트를 진행하였는데 생각보다 규모가 방대해서 많이 힘들었습니다. 다른 팀원이 있었더라면 부품구입, 데이터쉬트 분석, 납땜, 문서작업 등의 잡다한 일들을 나누어서 할 수 있었을 테지만 혼자서 모든 일을 하느라 정신도 없고 실수도 많이 한 것 같습니다. 부족한 작품을 공개하기가 많이 부끄럽지만 그래도 누군가에게는(?) 도움이 될 것이라고 믿습니다. 끝으로 캡스톤 공모전을 통해 다양한 부품을 돈 걱정 없이 사용할 수 있도록 경제적인 지원을 해주신 디바이스마트 관계자 분들께 감사하다는 말을 드리고 싶습니다.
[7호]CANTUS 개발 및 실습 무료 세미나 기술자료
CANTUS 개발 및 실습
무료 세미나 기술자료
자료제공 | (주)에이디칩스 기술 연구소
■ 2011년 4월 30일에 진행된 무료 세미나의 기술자료를 참석하지 못한 디바이스마트 매거진 구독자들을 위해 간단히 소개하고자 합니다.
1부 High Performance & Low Cost 32bit Microcontroller – CANTUS
1. 소개
(주)에이디칩스에서 개발한 CANTUS는 시스템의 다양화와 고성능화에 맞춰 8bit를 대체할 저가의 고성능 32bit 마이크로컨트롤러이다.
CANTUS는 고성능 32bit MCU로써 8bit MCU에 비해 최대 96MIPS의 빠른 속도와 고성능의 다양한 기능을 내장하면서 저렴한 가격으로 출시되어 개발자들에게는 8bit MCU의 한계를 넘어 다양하고 고성능화 되고 있는 시스템의 구현을 가능하게 하였다. 특징으로는 8채널의 넉넉한 UART와 Full-Speed USB2.0, SPI, TWI등의 다양한 통신 수단을 제공하므로 다른 주변 기기와의 통신에 강점을 지닌 동시에 음성이나 사운드(ADPCM 녹음/재생, MP3 재생) 지원이 가능한 제품이다.
또한, 내장 메모리를 128KBytes, 512KBytes 선택적으로 사용할 수 있어 사용자가 원하는 사양에 따라 시스템을 구성할 수 있으며 SRAM은 80Kbytes를 내장하여 큰 용량의 어플리케이션을 전혀 문제없이 동작시킬 수 있다. 또한 대용량의 메모리가 필요한 경우 외부에 노어플래시나 낸드플래시, SD카드등의 다양한 메모리를 지원하여 다양한 응용이 가능하다.
LCD가 필요로 하는 시스템에서는 2인치대(128×160해상도)의 TFT-LCD에 하나의 이미지파일을 디스플레이하는 시간에 30ms 이하의 속도를 낼 수 있어 Character LCD 또는 7-sement를 사용하던 시스템도 소형 TFT-LCD 적용이 가능하여 고급화, 차별화가 가능하다.(최대 220×176) 이 외에 CANTUS에는 8채널 32bit Timer / PWM / Capture가 내장되어 모터 구동, 배터리 체크, 적외선 리모콘 신호 입력 등의 용도로 사용할 수 있고 14bit Voice Codec은 음성 또는 사운드를 내보낼 수 있는 1채널 DAC와 센서 또는 아날로그 신호들의 입력을 위한 4채널 ADC로 구성되어 있으며 1채널 DMA는 빠른 메모리 액세스로 인해 데이터를 효율적으로 출력할 수 있다.
이러한 CANTUS는 하이패스단말기, GPS단말기, MP3 어학학습기, LED 컨트롤러, 경보시스템, 완구 로봇, 출입통제시스템, 디지털 가전, 로봇 청소기, 의료기기, 속도감지기, 산업용 컨트롤러 등 다양한 응용 제품에 적용할 수 있다.
이미 다양한 시스템에 적용되어 필드에서 검증되어 사용되어 지고 있으며 ㈜에이디칩스에서는 제품의 성능 뿐만 아니라 적극적인 기술지원과 안정적인 제품 공급 또한 강점으로 내세우고 있다.
2. 기능
· 32bit General Micro-Controller
- 96MHz, Internal Flash Memory & SRAM
· USB, UART, SDCard, Voice Codec, MP3 decoder(s/w)
· Operating Temp : -40oC to +85oC Industrial
· Power : 3.0V ~ 3.6V
· Package : 100pin TQFP
2부 CANTUS 개발 환경 소개
1. Development Flow Chart
CANTUS 개발환경은 다음과 같이 EISC Studio 3, E-CON, Target(EVM, Trip)으로 구성되어 있다. EISC Studio 3에서 Compile한 Binary는 E-CON을 통해 Target에 Download 되며, Target에 Download 된 Binary는 E-CON을 통해 EISC Studio 3에서 Debugging할 수 있다.
2. Download Page
EISC Studio 3와 같은 SW 자료 및 회로도와 메뉴얼은 (주)에이디칩스 홈페이지(www.adc.co.kr)의 자료실에서 다운받을 수 있다.
3. IDE : EISC Studio 3
EISC Studio 3는 통합개발환경(IDE)으로, Compiler, Editor, Debugger의 기능을 갖고 있다. 부가적으로 JTAG인 E-CON을 통해 손쉽게 Target에 Download가 가능하다.
현재 배포되는 Version은 3.2.2이다. Windows XP이상, 7 32bit, 7 64bit까지 사용 할 수 있다.
4. E-CON (JTAG I/F)
E-CON은 JTAG인터페이스로, Downloader와 Debugger의 기능을 갖고 있다. E-CON은 Console Program EConMan을 사용하여 제어된다. E-CON의 Driver와 Console Program인 EConMan은 EISC Studio 3를 설치 하면 기본 옵션을 통해 EISC Studio가 설치된 경로에 설치 된다.* (* 경로 : C:\Program Files\ADChips\EISC Studio 3\econ)
5. EVM
CANTUS EVM은 시스템 개발에 있어 검증을 위한 여러 Device로 구성 되어있다. Memory 관련하여 NAND Flash, SRAM, SPI Flash, TWI EEPROM, SD CARD로 구성되어 있으며, I2S Interface를 통해 외부 Audio Board로 재생, 녹음이 가능하다. 또한 Internal Voice Codec을 통한 재생, 녹음을 위한 회로가 구성되어 있다. 그리고 TFT LCD 및 USB, RS-232C와 확장 Pin이 있어 개발을 하려는 시스템에 근접하도록 구성 할 수 있다.
6. SDK
CANTUS SDK는 CANTUS EVM의 여러 Device를 제어할 수 있는 예제 Project와 CANTUS의 주변장치를 사용할 수 있는 Library로 구성되어 있다. SDK의 예제를 사용하여 EVM의 Device를 원하는 대로 수정하여 개발 시간을 단축할 수 있다.
3부 개발환경 구축
CANTUS의 개발환경은 다음과 같이 구축할 수 있다.
1. 관련 자료 다운로드
개발환경의 구축에 있어 첫 번째로 관련 자료를 다운 받는다. 관련 자료는 (주)에이디칩스 홈페이지 www.adc.co.kr의 Support → 자료실 → 글 번호 10에서 다운로드할 수 있다. 필수적인 IDE(EISC Studio 3)와 SDK를 다운로드한다.
2. IDE / JTAG 설치
다운 받은 EISC Studio 3 설치 파일을 실행하여 EISC Studio 3를 설치 한다.
설치 과정에서 ‘구성 요소 선택’ 과정에서 사용할 Compiler를 선택 한다. CANTUS의 경우 AE32000 Compiler를 사용하며 기본적으로, E-CON Driver와 함께 선택되어 있다.
Windows 7 64bit에서 설치할 경우에는 ‘설치 위치 선택’ 에서 ‘설치 폴더’ 를 ‘C:\Program Files’ 로 지정 하여야 한다.
설치 진행 과정의 마무리쯤 E-CON의 Driver가 설치 된다. Driver 설치는 E-CON이 PC와 연결되지 않은 채 진행한다. EISC Studio 3의 설치가 완료 된 후에 E-CON과 PC를 연결하면 Driver 설치가 마무리 되며, 제어판의 장치 관리자에서 E-CON이 정상 적으로 인식된 것을 확인할 수 있다.
3. Build & Download
CANTUS SDK는 CANTUS Library Project와 Example Project로 구성 되어 있다. Example Project는 Library Project의 Output File인 ‘libCantus.a’를 참조 한다. 따라서 Example Project를 Build하기 위해서는 Library Project가 먼저 Build 되어야 한다. 또한 Library Project의 Code를 변경하면, Library Project가 Build된 후에 Example Project를 Build 하여야 한다.
3. 1. Library Project Build
1. /Cantuslib/Cantus.epx를 실행하여 EISC Studio 3로 Project를 Open한다.
2. 메뉴에서 Build → Build Project를 눌러 Project를 Build한다.
3. Build가 완료 되면 /lib/libCantus.a가 생성된다. Library가 Build 되어 /lib/libCantus.a가 생성되면, Example을 Build 할 수 있다.
3. 2. Boot Loader를 사용하는 시스템의 경우
CANTUS는 Reset 후 Internal NOR Flash 0 Sector의 Program을 실행 한다. E-CON을 사용하면 Flash의 모든 Sector에 Write가 가능 하지만, E-CON이 없다면 BootLoader를 사용함으로써 USB를 통해 1 Sector(CANTUS 512)에 Download 할 수 있다. 단, 0 Sector에 BootLoader를 Download하는 것은 E-CON만 가능하다.
BootLoader는 CANTUS 512의 경우 1 Sector의 Program을 실행하고, 0 Sector를 제외한 나머지 Sector에 USB Download가 가능하다. 추가적으로 USB Mass Storage기능이 있어 Flash Memory나 SD-CARD를 PC에서 이동식 디스크로 사용할 수 있다.** (**BootLoader_tiny는 USB Mass Storage기능이 없음.)
3.2.1 Example Project Build : BootLoader
1. /Example/BootLoader/BootLoader.epx를 실행하여 EISC Studio 3로 Project를 Open한다.
2. Project Explorer에서 Linker Script에 cantus.ld를 Open한다. 16번 행에서 0×00000000으로 지정 된 부분은 Program이 실행되는 Sector의 Start Address로 0 Sector에 Download하여야 실행 되는 Program임을 뜻 한다.
3. 메뉴에서 Build → Build Project를 눌러 Project를 Build한다.
4. Build가 완료 되면 /Example/BootLoader/output/BootLoader.elf.bin이 생성된다.
/Example/BootLoader/output/BootLoader.elf.bin이 생성 되면, E-CON을 통해 Target에 Download할 수 있다.
3.2.2 Example Project Build : BootLoader
EISC Studio 3가 처음 설치 되면 E-CON으로 Download하기 위한 Option이 설정되어 있지 않으므로, Download Option을 설정해 주어야 한다.
1. 메뉴에서 Build → Download Option
2. Download Manager 창이 나타나면, 다음과 같이 설정 한다.
Set Command : C:\Program Files\ADChips\EISC Studio
3\econ\EConMan.exe
Set Argument : -target cantus -systeminit -jtagspeed 10
-flash_filewrite 0×0 $(TargetPath).bin
Set Argument중 -flash_filewrite 0×0은 Download할
Sector의 Start Address를 뜻한다. 위 cantus.ld에서
0×00000000으로 설정하였기에 0 Sector에 Download한다.
3. E-CON과 Target을 연결하고, PC에서 E-CON이 인식된 것을 확인 한다. CANTUS를 JTAG Mode로 설정한다. EVM의 경우 SW1을 아래쪽을 향하게 한 상태에서 Reset 한다.
4. 메뉴에서 Build → Download To Target EConMan의 실행창이 나타나고, Download가 진행 된다.***
(*** Set Argument에서 Option의 끝에 ‘-exit’를 추가하면 정상 Download된 후 창이 닫힌다.‘-jtagspeed 10’은 JTAG Clock을 30MHz / (10)+1 = 2.727MHz 로 설정을 뜻하며,‘-jtagspeed 1’으로 최대 15MHz까지 동작한다. JTAG Clock은 사용 환경에 따라 달라질 수 있다.
3.2.3 Example Project Build : Uart
1. /Example/Uart/Uart.epx를 실행하여 EISC Studio 3로 Project를 Open한다.
2. Project Explorer에서 Linker Script에 cantus.ld****를 Open한다. 11번 행에서 0×00010000으로 지정 된 부분은 Program이 실행되는 Sector의 Start Address로 1 Sector(CANTUS 512의 경우)에서 실행 되는 Program임을 뜻 한다. (**** BootLoader와 BootLoader_tiny는 Project 폴더내에 cantus.ld를 갖고 있지만, 이를 제외한 Project는‘/startup/cantus.ld를 참조한다.)
3. 메뉴에서 Build → Build Project를 눌러 Project를 Build한다.
4. Build가 완료되면 /Example/Uart/output/Uart.elf.bin이 생성된다. /Example/Uart/output/Uart.elf.bin이 생성되면, E-CON을 통해 Target에 Download할 수 있다.
3.2.4 Example Project Download : Uart
Download Option을 2)Example Project Download : BootLodaer에서 0×0으로 설정하였기 때문에 3)Example Project Build : Uart.에서 설정한 0×00010000으로 Uart를 Download하기 위해 설정을 변경해 주어야 한다.
1. 메뉴에서 Build → Download Option
2. Download Manager 창이 나타나면, 다음과 같이 설정 한다.
Set Command : C:\Program Files\ADChips
\EISC Studio 3\econ\EConMan.exe
Set Argument : -target cantus -systeminit -jtagspeed 10
-flash_filewrite 0×10000 $(TargetPath).bin
Set Argument중 -flash_filewrite 0×10000은 Download할
Sector의 Start Address를 뜻 한다. 위cantus.ld에서
0×00010000으로 설정하였기에 1 Sector에 Download한다.
3. E-CON과 Target을 연결하고, PC에서 E-CON이 인식된 것을 확인 한다. CANTUS를 JTAG Mode로 설정한다. EVM의 경우 SW1을 아래쪽을 향하게 한 상태에서 Reset한다.
4. 메뉴에서 Build → Download To Target
EConMan의 실행창이 나타나고, Download가 진행된다.
3.2.5 Execution
CANTUS에 Download한 Program은 CANTUS가 NORMAL MODE일 때 실행된다. EVM의 경우 SW1을 위쪽으로 향하게 한 상태에서 Reset한다.
EVM의 RS-232C를 PC와 연결하면, PC에서 Terminal을 통해 출력하는 Message를 확인할 수 있다. 이때 Terminal은 119200 bps, Data 8 bit, 1 Stop bit, Parity none으로 설정한다. 0 Sector에 Download한 BootLoader가 실행되고, 1 Sector에 Download한 Uart Example까지 실행한 Terminal의 화면이다.
3. Boot Loader를 사용하지 않는 시스템의 경우
CANTUS는 Reset후 Internal NOR Flash 0 Sector의 Program을 실행 한다. E-CON을 사용하면 Flash의 모든 Sector에 Write가 가능 하므로 E-CON을 사용할 수 있거나, 개발 시스템에서 Program Update와 같은 기능이 필요치 않은 경우에는 0 Sector에 BootLodaer가 아닌 Program을 Write하여 사용할 수 있다.
다음은 Example/Uart를 Download하여 실행하는 경우이다.
3.3.1 Example Project Build : Uart
1. /Example/Uart/Uart.epx를 실행하여 EISC Studio 3로 Project를 Open한다.
2. Project Explorer에서 Linker Script에 cantus.ld를 Open한다. 11번 행에서 0×00010000으로 지정된 부분을 0×00000000으로 수정하여 Program이 실행되는 Sector의 Start Address가 0 Sector가 되도록 변경한다.
3. 메뉴에서 Build → Build Project를 눌러 Project를 Build한다.
4. Build가 완료 되면 /Example/Uart/output/Uart.elf.bin이 생성된다.
/Example/Uart/output/Uart.elf.bin이 생성되면, E-CON을 통해 Target에 Download할 수 있다.
3.3.2 Example Project Download : Uart
Download Option을 4) Example Project Download : Uart (P.38)에서 0×10000으로 설정하였기 때문에 1) Example Project Build : Uart(P.39)에서 설정한 0×00000000으로 Uart를 Download하기 위해 설정을 변경해 주어야 한다.
1. 메뉴에서 Build → Download Option
2. Download Manager 창이 나타나면, 다음과 같이 설정한다.
Set Command : C:\Program Files\ADChips \EISC Studio 3\econ\EConMan.exe
Set Argument : -target cantus -systeminit -jtagspeed 10 -flash_filewrite 0×0 $(TargetPath).bin
Set Argument중 -flash_filewrite 0×0은 Download할 Sector 의 Start Address를 뜻 한다. 위 cantus.ld에서 0×00000000
으로 설정하였기에 0 Sector에 Download한다.
3. E-CON과 Target을 연결하고, PC에서 E-CON이 인식된 것을 확인 한다. CANTUS를 JTAG Mode로 설정한다. EVM의 경우 SW1을 아래쪽을 향하게 한 상태에서 Reset한다.
4. 메뉴에서 Build → Download To Target
EConMan의 실행창이 나타나고, Download가 진행 된다.
3) Execution
CANTUS에 Download한 Program은 CANTUS가 NORMAL MODE일 때 실행한다. EVM의 경우 SW1을 위쪽으로 향하게 한 상태에서 Reset한다.
EVM의 RS-232C를 PC와 연결하면, PC에서 Terminal을 통해 출력하는 Message를 확인할 수 있다. 이때 Terminal은 119200 bps, Data 8 bit, 1 Stop bit, Parity none으로 설정한다.
0 Sector에 Download한 Uart Example을 실행 한 Terminal의 화면이다.
4. Debugging
CANTUS는 EISC Studio 3에서 E-CON을 통해 Debugging 할 수 있다. GDB를 사용하며 V3.2.2의 경우 Insight 환경도 사용할 수 있다. 다운 받은 SDK에 관련 매뉴얼이 있다.
4부. SDK의 Example
SDK의 Example은 크게 BootLoader와 Application 두 가지로 나누어 진다.
1. BootLoader
BootLoader는 USB Download, USB Mass Storage, Application 호출의 기능을 갖고 있다. 0 Sector에서 CANTUS Reset후 실행되며, USB Download나 USB Mass Storage의 명령이 없으면 특정 Sector의 Application을 호출 하게 된다.
USB Download는 PC로부터 CANTUS DevTool을 통해 0 Sector가 아닌 특정 Sector에 Program을 Write한다. BootLoader 영역은 지울 수 없기 때문에 제품에서 Program Update용도로 사용할 수 있다.
USB Mass Storage를 사용하면 EVM의 NAND Flash Memory 또는 SD Card를 PC에서 이동식 디스크로 사용할 수 있으며, FAT를 사용하여 Application에서 Drive로 접근하여 Read/Write가 가능하다. USB Mass Storage기능이 불필요하다면, BootLoader_tiny를 사용할 수 있다.
Application 호출은 CANTUS 128A/512에 따라 달라진다.
CANTUS 128A(4 Kbyte x 32 Sector)
BootLoader : 8 Sector(0×00008000)를 호출
BootLoader_tiny : 4 Sector(0×00004000)를 호출
CANTUS 512(64 Kbyte x 8 Sector)
BootLoader : 1 Sector(0×00010000)를 호출
BootLoader_tiny : 1 Sector(0×00010000)를 호출
2. Application
Application은 다음과 같이 구성 되어 있다. BootLoader가 필요하지 않다면, 0 Sector에 Download함으로써 BootLoader없이 CANTUS Reset후 실행할 수 있다. 단, 이때 Application의 Build는 Linker Script ‘cantus.ld’ 의 11번 Line이 0×00000000으로 설정된 상태에서 수행되어야 한다.
Build 및 Download는 앞서 살펴 보았던 Uart와 동일하다.
홈페이지 : www.adc.co.kr
개발자커뮤니티공간 : http://cafe.naver.com/adchips
E-mail : sales1@adc.co.kr
Tel : 02-2107-5870
[7호]국제 스마트그리드 전시회/ 국제 전기설비 전시회
국제 스마트그리드 전시회 /
국제 전기설비 전시회
글 | 김장원 기자 jwkim0@ntrex.co.kr
봄의 끝자락에 접어든 2011년 5월 18일부터 20일까지 3일간 서울코엑스 1층에서는 “국제 스마트그리드 및 전기설비전”이 열렸다. 이번 전시회는 서울에서 개최되는 첨단 전기, 전력, 플랜트 에너지 분야 최고의 전시회이다.
한국전력기술인협회와 KOTRA 공동주최하고 태양광 발전설비 기술세미나, 전기안전과리 기술교육 과정, 프로젝트 수주 및 수출상담회등 부대행사를 선보였으며, 24개국 271개의 업체가 참가하고 3만명 이상이 참관하여 현장의 분위기를 달구었다.
스마트 그리드란 전력망에 IT를 접목하여 전력 공급자와 소비자가 양방향으로 실시간 정보를 교환할 수 있는 지능형 전력망이다. 이 기술의 좋은점은 불규칙한 신재생 전원의 보급을 확대할 수 있으며 에너지를 효율적으로 사용할수 있다는 점이다.
이번행사는 Global Electric Power Tech라는 이름과 국제스마트그리드 전시회, 국제 전기설비전 전시회란 이름으로 개최 되었다.
HIGEN모터의 전기자동차모터 |
스마트그리드 소개되는 내용으로는 신재생에너지설비, 전기차 충전시스템, 배전자동화시스템(DAS), 스마트 프라이싱 시스템등이 있었고 전기설비 내용으로는 발전 프랜트 설비, DC전원, 연료전지, 방송통신 정보설비등이 소개되었다.
이번 스마트그리드에서는 전기자동차 산업이 가장 큰 이슈였다. 효성을 비롯한 많은 업체들이 전기차 관련 기술들을 쉴틈없이 설명하느라 바빠보였다.
입구에 들어서자 가장 먼저 보인 효성부스. 주력인 전기차관련 기술들을 내세워 급속 충전기, 완속 충전기의 시물레이션과 지난 전기차 시연회에서 선보였던 국산 전기차 블루온에 탑재되었던 모터가 소개 되고 있었다.
광덕엔지니어에서 소개된 분전반 시스템 e-SMART는 전사적 에너지 관리 시스템을 갖춰 부하별 에너지 관리에 의한 패러다임 변화에 대응한다. 또한 고효율설비 에너지 효율성을 진단, 관리를 통해 비용을 절감 시키는 기능을 갖고 있다.
광덕엔지니어링의 e-SMART | 쏠라에너비즈의 추적식 태양광 발전기 |
쏠라 에너비즈의 양축 추적식 태양광 발전기는 고정식 대비 최대 64% 효율증대를 보이며 태풍, 지진등에 의한 자연재해 안전장치가 있으며 표면 자동세척과 냉각 장치가 내장되어 있다는 점에서 눈길을 끌었다.
생각보다 많은 볼거리를 제공해 주지 못한 이번 스마트그리드 전시회였지만 매회 발전하는 모습을 보여주듯이 내년에도 더 좋은 전시회로 찾아오길 기대해본다.
[7호]위드로봇 무료강좌 기술자료 – 3차
3차 릴레이 무료강좌 기술자료
스테레오 영상 및 3D Vision 기술
글 | 위드로봇(주) 김도윤대표
위드로봇 연구실 확장 이전 기념 릴레이 무료 강좌 3차 교육이 2010년 12월 18일 토요일에 성수동 위드로봇 본사에서 진행 되었습니다. 영상 처리 시스템에 대한 주제로 진행된 이번 강좌의 강의 내용을 참석하지 못한 디바이스마트 매거진 구독자들을 위해 간단히 소개하고자 합니다.
사람 눈이 2개인 이유
지난 달(2011년 3월호)에는 “영상 처리 시스템 소개”라는 제목으로 영상 처리 시스템에 대한 개요를 설명했다. 이 때 우리가 얻는 영상이란 “3차원 공간 상에 존재하는 물체들이 광원의 빛 입자를 반사하는 파장을 렌즈로 모아 2D 평면에 투영(projection)한 것” 이라 정의했다. 이 때 3차원 정보를 2차원 평면에 투영하기 때문에 거리(또는 깊이)에 대한 정보는 사라지게 된다. 즉, 2D 이미지 한 장 만으로는 어떤 물체가 원래 작아서 작게 보이는 것인지, 아니면 멀리 있는 물체를 찍어서 작게 보이는 것인지 알 수 없다는 것이다.
그림 1. 2D 평면으로 투영되면 같은 ray상에 있는 물체는 같은 크기로 보인다. |
따라서 생명체들은 최소 두 개의 영상을 이용해 한 개의 눈으로 얻을 때 사라지는 거리의 정보를 다시 복원해 낸다. 이 때 재미있는 점은 두 눈이 바라보는 영역이 서로 많이 겹칠수록 거리를 정밀하게 알 수 있는 반면 한 번에 볼 수 있는 영역은 줄어들고, 반대로 서로 겹치지 않도록 하면 한 번에 많은 영역을 볼 수 있지만 거리 계산은 정확하지가 않다는 점이다. 이와 같은 특징은 동물의 진화에도 적용되었다. 육식 동물들은 눈이 앞쪽으로 달려있어 가능한 먹잇감과 나와의 거리를 정확하게 계산할 수 있도록 진화되었고, 초식 동물은 머리의 양 옆으로 붙어 거리 계산보다는 사방 팔방 중에 어디에 포식자가 있는지 방향을 판단하여 반대 방향으로 도망가기 쉽도록 진화되었다는 점은 재미있는 부분이다. 이와 같은 차이도 3D 비전 기술을 이해하면 쉽게 설명된다.
그림 2. 초식 동물과 육식동물의 눈의 방향 비교 |
본고에서는 3차원 정보를 영상 정보를 통해 추출하기 위한 방법을 소개한다. 지난 달 원고에서도 밝혔듯이 이 부분은 꽤나 복잡한 수학과 개념의 이해를 필요로 한다. 특히 우리가 이 때까지 배워왔던 기하학은 유클리드 기하학인데, 카메라 이미지에서 발생하는 기하학 문제는 프로젝티브 스페이스(projective space) 상에서 발생하는 기하학 문제이다. 따라서 직관적으로 이해하기 어려우며 수학의 벡터 스페이스 개념을 빌어야 온전히 이해가 가능하다. 대학원에서는 통상적으로 두 학기간의 과목을 통해 해당 개념을 학습하는 분량이기에 잡지의 한정된 분량에서 3D 기술을 모두 소개한다는 것은 무리이다. 따라서 최대한 개념과 그림을 위주로 3D 영상 처리 분야를 소개해 보려고 한다.
3D 정보를 얻기 위한 방법
두 대의 카메라로부터 3D 정보를 얻기 위한 연구는 미국 CMU, MIT 및 영국 Cambridge University를 필두로 유수 대학 및 연구소에서 50년 넘게 연구가 진행되고 있다. 가장 일반적인 방법, 즉 교과서에 나오는 방법은 1987년도 MIT의 O.Fangers의 연구로 현재 전형적인 3D 스테레오 비전 기술에 해당한다. 이전에는 계산량의 문제로 실시간 처리가 어려워 실제 사용이 불가했으나 최근 프로세서 성능의 개선으로 2000년대 들어 실시간 동작이 가능해 지고 있다. 이로 인해 보안 시스템, 무인 자동차, 군사용 로봇 등에서 많은 연구가 진행되고 있다.
그림 3. 전형적인 3D 스테레오 비전의 3D 좌표값을 계산하기 위한 수식 |
3D 스테레오 비전 기술은 두 개의 카메라를 이용하여 각 영상의 차이(disparity)를 이용하여 2D 영상에서 사라진 거리 정보를 복원해 내는 기술이다. 즉, 두 카메라로부터 멀리 떨어진 물체는 각각의 카메라에 입력된 위치의 차이가 그다지 나지 않게 된다. 반면 두 카메라로부터 가까운 물체는 각각의 카메라에 입력된 위치의 차이가 크다. 이러한 차이를 디스패리티(disparity)라고 하며 디스패리티를 구하면 거리 정보를 복원할 수 있게된다.
그런데 여기서 문제점이 왼쪽 영상의 한 점이 오른쪽 영상의 어디에 대응되는가를 알아야 디스패리티를 구할 수 있다. 이렇게 왼쪽, 오른쪽 영상의 일치점을 찾는 과정을 매칭(matching)이라고 한다. 통상적으로 한 점만으로는 서로 비교가 어렵기 때문에 대응점 주변의 정보를 하나의 블록으로 이용하여 찾는 것이 일반적이며, 이를 블록 매칭이라 부른다.
매칭을 위해 한 블록을 다른 쪽 영상에서 처음부터 끝까지 모두 뒤지는 것은 불합리해 보이니 카메라간의 기하학적인 구조 정보를 이용하여 최소한 어느 근방에 있을 것 같다라는 정보를 이용하여 탐색 위치를 줄여주는 과정을 영상 교정(image rectification)이라고 한다.
영상 교정이라는 표현보다는 이미지 렉티피케이션이라는 표현이 더 일반적으로 많이 쓰인다. Rectification을 위해서는 두 대의 카메라 사이의 배치 형태를 정확하게 알고 있어야만 한다. 이를 카메라 외부 파라미터(camera extrinsic parameter)라고 한다.
마지막으로 앞서 디스패리티를 구하면 거리 정보를 알 수 있다고 했는데 이는 상대적인 정보까지만 알아낸 것이다. 영상 처리 분야에서는 이를 up to scale까지 찾아냈다고 표현하는데, 우리가 사용하는 단위, 즉 metrical information을 알고 싶다면, 좀 더 쉽게 설명하면 몇 cm 떨어져 있는지 알고 싶다면 카메라 내부 파라미터(camera intrinsic parameter)를 찾아내야 한다.
이처럼 카메라 내부, 외부 파라미터를 찾아내는 과정을 카메라 캘리브레이션(camera calibration)이라고 한다. 꽤나 복잡하게 많이 파고 내려갔는데, 다시 한 번 정리해보자.
한 장의 영상만으로는 3D 정보를 얻을 수가 없으며 서로 다른 위치에서 촬영한 최소 두 장의 영상이 필요하다. 이 두 장의 영상에서 disparity를 계산하면 위치를 파악할 수 있는데, disparity를 구하려면 image matching을 풀어야 한다. 그냥 image matching을 하면 너무나 많은 시간이 걸리기에 image rectification을 수행하는데, 이를 위해서는 camera calibration이 필요하다. 따라서 3D 영상 처리의 순서는 역순으로 (1) 카메라 캘리브레이션을 수행한 뒤, (2) image rectification을 수행하고, (3) image matching을 통해 disparity를 구한 뒤, (4) camera intrinsic parameter값을 이용하여 유클리디안 공간 상의 3차원 좌표를 계산하는 순서로 이뤄진다.
그림 5. image rectification 과정 |
그림 5에서 왼쪽과 오른쪽의 매칭이 되는 부분은 2D 공간에서 1D 직선으로 일치시키는 과정으로 매칭 시간을 줄여준다.
이 위 한 문단이 영상 처리 대학원에서 약 반학기 동안 이뤄지는 내용이다. 3D 영상 처리를 하겠다면 필수적으로 알고 있어야 한다. 다행스러운 부분은 필자가 공부하던 1990년대까지만해도 위 모든 문제를 각자가 알아서 다 해결해야만 했다. 따라서 어느 한 부분에서 막혀서 진도가 나가지 않으면 고급 알고리즘의 구현은 고사하고, 3D 좌표값도 한 번 계산하지 못하고 시간만 버리는 경우도 많았다. 2000년대 접어들어 MATLAB에서 다양한 이미지 관련 Toolbox가 나오고, OpenCV라는 걸출한 오픈 소스 영상 처리 알고리즘이 공개되면서 위 내용을 모두 알지 못해도 3D 좌표값을 구할 수 있게 되었다. 하지만 그 근본 원리를 알고 라이브러리를 쓰는 개발자와 뭔지도 모르고, 그 결과값만을 받아 쓰기에 급급한 개발자 사이에는 새로운 문제를 접할 때 개발 속도에 차이가 나기 마련이다. 3D 영상 처리에 관심 있는 독자들은 별도의 책들을 통해 앞에서 소개한 각각의 기술들을 숙지하면 연구에 많은 도움을 받을 수 있을 것이다.
3D 스테레오 비전을 연구하는 사람들이 흔히 사용하는 시스템은 캐나다 Point Grey사의 Bumblebee 스테레오 카메라이다. CCD 센서 두 개를 내장하고 있으며, 320×240 크기의 영상을 동기화 맞춰 1394 Firewire 인터페이스로 출력하는 시스템으로 2000년대 초반에는 이 시스템이 3D 스테레오 영상을 얻는 방법으로 유일했었다.
그림 6. Point Grey사의 Bumblebee(좌)와 이 카메라에서 출력되는 3D 이미지(우) |
그림6에서 2D이미지로 표시할 때 깊이 정보는 밝기값으로 표기가 된다. 위 이미지에서는 밝을수록 가까운 물체에 해당한다.
Bumblebee 시스템의 경우 영상을 PC로 전달하며, 스테레오 비전 알고리즘은 PC에서 동작하기에 다양한 알고리즘을 시도해 볼 수 있어 국내의 많은 연구진들이 이를 구매하여 연구를 진행했었다. 최근에는 Tyzx사에서 Deepsea라는 고속 스테레오 카메라가 출시되었는데 이전의 복잡한 매칭 계산을 상대적으로 간단한 census transform을 사용하여 초당 200 프레임까지 계산이 가능하다. 실제로 census transform은 이전의 방식 보다는 결과가 더 좋지 않지만 빠른 연산으로 우선 매칭을 해결한 다음 post processing으로 계산 결과를 다시 한 번 정리하여 보다 짧은 시간에 이전의 복잡한 방식보다 더 나은 결과를 내고 있다.
그림 7. Tyzx사의 Deepsea(좌)와 이 카메라에서 출력되는 3D 이미지(우) |
이와 비슷하게 위드로봇에서도 3D 좌표를 계산하는 카메라를 만들어 보유 중이다. CMOS 카메라 두 개를 이용하며 BumbleBee와 동일하게 싱크를 맞춘 영상을 USB 2.0 인터페이스를 통해 PC로 최대 640×480 크기로 전달하며, 3D 계산 알고리즘은 라이브러리로 제공되어 PC 상에서 30fps 속도로 320×240 크기에서 실시간 동작시킬 수 있다.
그림 8. myVision-Stereo 프로토타입 |
그림8은 최대 640×480 컬러 스테레오 이미지를 USB 2.0 HS 인터페이스를 통해 30프레임을 전달하는 장치이다.
위 제품은 외형을 좀 더 손질하여 myVision-Stereo 라는 제품으로 9월 전에 출시할 예정이므로 3D 영상을 연구하는 분들이 외산 장비에 비해 보다 저렴하고 손쉽게 시작할 수 있는 계기를 마련할 것으로 보인다.
게임 분야에서 3D
앞서 소개한 스테레오 영상 장치들은 연구용이라 외산 제품의 경우 한 대의 가격이 최소 300만원에서 최대 1천만에 육박하는 고가 시스템이다. 따라서 이러한 제품에서 동작하는 알고리즘을 작성해 봤자 컨슈머 시장으로 진입하기에는 많은 어려움이 있어 시중에서는 3D 정보를 활용하는 장치를 보기가 어려웠었다.
2000년 후반에 들어 3D 모션 인식 분야에서 패러다임 쉬프트가 발생하는데 바로 게임 분야의 적용 및 시장에서의 성공이다. 전통적인 스테레오 영상 처리 기술로는 가격도 비싸고, 성능도 원하는 만큼 나오지 않자 게임 분야에서는 또 다른 방법으로 3D 정보를 얻는 방법을 모색하기 시작했다. 그 첫 번째 신호탄이 닌텐도에서 Wii로 시장에 나타났다. TV 수상기 위에 적외선 LED 바를 올려 놓고, 손에 쥐고 게임을 조정하는 컨트롤로(WiiMote) 내에는 카메라 센서가 들어있어 TV 수상기 위에 위치한 적외선 LED 위치를 추적한다. 추가로 WiiMote 내에는 3축 가속도 센서가 내장되어 있어 WiiMote의 pose를 실시간으로 파악한다. 최근에는 Wii Motion Plus 팩이라고 해서 3축 자이로 센서를 WiiMote에 추가로 부착할 수 있는 장치가 출시되어 보다 정밀한 3차원 공간상에의 위치, 각도를 추정할 수 있다.
그림 9. 닌텐도 사의 WiiMote와 Wii Motion Plus |
소니의 플레이스테이션의 화려한 그래픽에 수세에 몰려있던 닌텐도는 3D 모션 인식이라는 신기술로 이러한 열세 분위기를 단번에 만회한다. 실제로 2007, 2008년도에는 매장마다 입고가 되자마자 매진되는 분위기였으며, 게임에 있어 가장 중요한 부분은 화려한 그래픽이 아닌 사용자의 몰입감이라는 사실을 다시 한 번 확인하게 된다.
3D 모션 인식이 게임 분야에서 화두로 떠오르면서 소니 사에서도 플레이스테이션 아이라는 장치를 도입하여 추격을 하는데, 이는 닌텐도와 다른 본격적인 영상 처리를 통한 모션 인식에 해당한다. 3차원 공간 상에서 컨트롤러 앞단에 장착되어 있는 구의 색상과 크기를 이용하여 플레이스테이션 아이와 상대적인 위치를 파악하고, 포즈는 MEMS 기반 센서들로 파악한다.
그림 10. 소니 사의 플레이스테이션 아이(좌)와 무브 컨트롤러(우) |
이와 같은 방식은 앞서 소개한 닌텐도 방식에 비해 컨트롤러의 위치를 놓칠 확률이 줄어들고, 동작 범위가 넓어지는 효과가 있으며, 무엇보다 플레이스테이션에 카메라가 장착되는 셈이기에 각종 영상 처리 알고리즘을 응용한 게임이 가능해 진다는 장점이 있다. 이를 이용한 게임 타이틀도 출시 되었는데, eye toy 시리즈와 eye pet이 그것이다. 카메라로부터 입력된 영상을 이용하여 3D 캐릭터를 3차원 공간 상에 실제 존재하는 것처럼 출력하는 즉, 증강 현실 기술을 이용하여 게임을 구현하고 있다. 기존 게임기에 카메라가 붙으니 좀 더 지능적인 장치로 탈바꿈하는 경우이다.
그림 11. EyePet 데모 동영상 | 그림 12. MS사의 Kinect 내부 구조와 모션 인식 |
2000년대 3D 동작 인식 게임기 시장을 닌텐도와 소니가 이끌어왔다면 2010년부터는 MS사의 XBOX 반격이 시작된다. XBOX에서 추가로 부착할 수 있는 Kinect 라는 장비를 선보이는데, 이 제품은 내부에 IR 카메라와 IR 방식의 소형 프로젝터(엄밀히 말하면 IR LED와 렌즈 및 패턴 필름)을 내장한 3D 카메라이다. 흔히 외부에서 보기에 두 개의 카메라가 배치되어 있어 Kinect가 스테레오 기법으로 3D 좌표를 추출하는 것으로 잘못 알고 있는 분들이 많이 있다. Kinect는 기존 3D 영상 처리와 다르게 하나의 카메라로 3D 좌표를 계산해 내는데, 카메라를 하나 사용하는 대신 광원을 이용하여 미리 알고 있는 패턴을 공간에 투사하고, 이 패턴이 어떻게 일그러지는가를 파악하여 거리 정보를 파악하는 방식이다. 이는 이스라엘의 프라임센서사가 가지고 있는 특허로, MS사는 이 특허를 이용하여 Kinect를 제작하였다. 패턴 매칭 및 거리 계산은 ASIC으로 구현하였고, 속도는 놀랍게도 60fps으로 계산이 가능하다. 또한 3D 스테레오 기법에서 해결 못한 고질적인 문제인 “특징점들이 없는 밋밋한 평면”의 거리도 깔끔하게 해결이 된다. 그리고, 오히려 이러한 밋밋한 평면에서 거리 계산이 좀 더 정밀하게 나오기에 게임기가 놓이는 공간인 거실 바닥면을 생각하면 매우 훌륭한 어플리케이션에 접목했다는 것을 알 수 있다.
그림 13. Kinect에서 투사하는 random dot pattern |
그림 13 위 그림처럼 Kinect는 random dot stereogram의 패턴을 쏘고 이 패턴의 일그러짐을 찾아내어 거리를 계산한다.
재미있는 점은 kinect가 시중에서 판매되는 가격이 20만원선인데, 열 배 가격인 연구용 3D 스테레오 시스템보다도 성능이 더 좋다는 사실이다. 이에 kinect를 XBOX가 아닌 일반 PC에서 사용하기 위한 해킹 시도가 있었으며, 실제로 해킹에 성공하여 PC와 리눅스에서 연결에 성공하였다. 이에 올해 4월 MS사는 정식으로 kinect를 지원하는 라이브러리를 공개하였으며, 이를 이용한 여러 PC 응용 프로그램이 출시될 가능성을 열어두었다. Kinect는 많은 가능성을 영상 처리 전공자들에게 열어 두었지만 그 방식의 한계상 실내에서만 사용이 가능하다. 이를 실외에서 응용할 수 있도록 개선한다면 그 활용 범위는 무궁무진하게 넓어질 것으로 예상된다.
이와 같은 게임 분야에서 3D 영상 처리의 성공에 고무된 영상 처리 업체들은 앞다퉈 3D 좌표를 추출할 수 있는 카메라들을 선보이고 있으며, 재미있게도 그림-14의 Zcam은 MS사가 인수 합병하였다.
그림 14. 여려 종류의 3D 카메라들 (좌에서부터 MESA사의 SR4000, PMDTec, ZCam) |
3D 정보를 얻는 또 다른 방법
본고의 주제가 3D 영상 처리이기에 카메라 영상을 통해 3D 정보를 얻는 방법을 소개했지만 현재까지 3D 정보를 추출하는 방식으로는 카메라의 영상을 이용하는 것보다는 레이저를 이용하는 방식이 훨씬 신뢰도가 높다. 대표적인 회사로 SICK 시스템이 있는데, 실내-실외 모두 mm 이하의 정밀도로 거리를 빠르게 계산해 주기에 무인 차량에는 영상 처리용 카메라 이외에 레이저 스캐너 센서를 차량 천장에 주렁주렁 달고 실험을 하고 있다. 이러한 현실은 이런저런 영상 처리 기법으로 3D 정보를 찾아내는 방법이 레이저를 쏘고 물체에 맞아 돌아오는 시간을 측정하는 TOF(Time of Flight) 방식에 비해 아직 정밀도가 떨어진다는 것을 간접적으로 설명해 준다. 이와 같은 상황을 비관적으로 해석하여 ‘영상 처리로는 3D 정보를 얻는데 한계가 있다’라고 단정적으로 결론을 짓고 레이저 센서의 응용으로 분야를 바꾸는 연구자들도 있는 것이 사실이다. 하지만 실제 생태계에서 수많은 동물들이 영상 처리를 통해 3D 정보를 얻고 있으며, TOF 방식으로 공간에 대한 정보를 얻는 동물은 박쥐와 돌고래 정도 뿐이니 아직 우리에게 충분히 빠른 프로세서와 뛰어난 알고리즘이 없음을 탓해야 할 것 같다. 또한 달리 표현하면 아직 영상 처리 쪽에서는 할 일이 많이 남아있다고 해도 과언이 아닐 것이다.
그림 15. SICK사의 레이저 스캐너와 무인 차량 모습 |
카메라 캘리브레이션
이제서야 카메라 캘리브레이션을 설명하려고 한다. 통상적인 3D 스테레오 영상 처리 설명이라면 카메라 캘리브레이션부터 설명하지만 저자는 “왜 캘리브레이션이 필요한지, 어떤 분야에서 쓰게 되는 것인지”를 먼저 설명하고 싶었다. 전형적인 캘리브레이션의 수학적인 표현은 아래와 같다.
그림 16. 카메라 좌표계와 유클리디안 좌표계 |
(x,y,z)는 일반적으로 우리가 알고 있는 3차원 공간 상의 좌표계이며, (u,v)는 이미지 상에서 좌표계이다. 이 때 카메라 내부 파라미터를 최대한 간략하게 표기하면 초점 거리 f와 scale factor w로 두 좌표계간의 변환을 쓸 수 있다.
카메라 캘리브레이션이란, 이 미지수들을 찾아내는 과정이며, 이를 찾기 위해 미리 3차원 공간상의 좌표를 알고 있는 특정 패턴을 카메라로 받아들여 계산해 낸다. 위에서 [u,v, w] 좌표와 [x,y,z] 사이의 좌표를 변환하는 행렬을 프로젝션 매트릭스 P라고 부르며, P를 계산하기 위해 3차원 공간의 여러 점 또는 한 점을 공간 상에서 움직여가며 촬영하여 수식을 쌓아(stacking) 최적화 문제로 해결한다. 이 때 P 매트릭스에 여러 가지 기하학적인 특징이 있기에 값을 계산할 때 이러한 기하학적 특징까지 고려하여 계산하면 보다 정밀한 값을 찾을 수 있다. 가장 일반적으로 많이 사용하는 방식은 SVD(Singular Value Decomposition)을 사용하며 좀 더 복잡하게 계산할 때는 전형적인 최적화 방식으로 계산하기도 한다.
캘리브레이션을 수행하기 위해 사용되는 패턴은 크게 2D 체커 보드와 3D 캘리브레이션 박스로 나눌 수 있다. 2D 체커 보드는 상대적으로 제작이 쉽지만 캘리브레이션을 위해 체커 보드를 이리저리 바꿔가며 여러 장의 이미지를 얻어야 한다는 단점이 있다. 반면 캘리브레이션 박스는 한 장의 이미지만으로 카메라 캘리브레이션을 수행할 수 있다는 장점이 있지만 제작이 복잡하다는 단점이 있다.
그림 17. 카메라 캘리브레이션에 사용되는2D 체커 보드(좌)와 위드로봇에서 제작한 캘리브레이션 박스(우) |
위드로봇에서는 영상 처리 전공자들이 손쉽게 사용할 수 있는 캘리브레이션 박스를 제작하여 시판을 앞두고 있으며, PC와 무선으로 데이터를 주고 받을 수 있어 매칭 문제도 손쉽게 해결할 수 있도록 하였다.
3D 좌표값의 정밀도는 카메라 캘리브레이션의 정확도와 연결된다. 위드로봇에서는 1280×1024 해상도의 카메라를 이용하여 전방 3m 앞의 물체가 움직일 때 mm 이하의 해상도로 0.01도의 움직임까지 측정할 수 있는 기술을 확보하고 있다. 이는 전적으로 캘리브레이션 기술에 의존적이기에 영상 처리를 통해 정밀한 계측이 필요하다면 캘리브레이션 기술 확보가 먼저 수행되어야 한다.
마감하며
원고를 정리하다 보니 해당 내용을 공개 강좌로 진행한지도 벌써 3개월이 지났다. 공개 강좌 때 여러 내용을 추가 보강하여 유료 강좌로 시작하겠다고 독자들에게 약속을 했었는데, 아직 그 약속이 실행되고 있지 못하고 있다. 다행스러운 점은 위드로봇 연구소에서 다양한 신기술들이 개발되어 올해 하반기에는 여러 종류의 영상 처리 시스템이 선 보일 것으로 예상된다. 하루 빨리 제품 개발을 마무리하고, 새로운 내용을 보강하여 강의 프로그램을 만들 것을 다시 한 번 약속 드린다. 다음 번 원고는 마지막 원고로 임베디드 비전 시스템에 대한 설명이 이어지며, 위드로봇의 여러 기술이 소개될 것이다.
그림6 PointGrey Inc. 홈페이지
그림7 PointGrey Inc. 홈페이지
그림9 Nintendo Inc.
그림10 Sony Inc.
그림11 YouTube
그림12 www.ros.org, PrimeSense사
그림13 www.ros.org
그림14 산기평 비전 SoC 기획 보고서
그림15 SICK Inc, DARPA
[7호]2011국제 모션컨트롤 전시회
2011 국제 모션컨트롤 전시회
글 | 이원영 기자 richard@ntrex.co.kr
완연한 봄의 기운을 느낄 수 있었던, 지난 4월 21일 본 기자는 일산 킨텍스에서 열리는 ‘2011 한국전자부품산업전 & 모션컨트롤러 전시회’에 다녀왔다.
자유로변에 막바지 벚꽃들이 꽃비를 뿌리고 있어서, 그대로 나들이를 가고 싶은 마음이 굴뚝 같았지만, 억지로 누르며 킨텍스로 향하였다. 이번 전시회는, 한국전자공업협동조합과 전자부품연구원의 주최로 4월19일 부터 21일까지 3일간 개최되었다. 12개국 118개 업체가 참가하여, 규모가 그리 크지는 않았다.
본 기자는 사전등록을 하여서, 간단한 확인절차 후 입장할 수 있었다. 전시회장에 들어서니 좌, 우로 국내에서 인지도가 높은 모션컨트롤러 회사인 (주)컨벡스와 전자부품연구원 부스가 눈에 들어왔다. 우리 일행은 좌측부터 둘러보기로 했는데, 몇몇 눈에 띄는 부스들이 있었다.
우선, 입구쪽에서 규모면에서부터 가장 눈길을 끌었던 (주)컨벡스는 다양한 DC모터와 스테핑모터, 그리고 드라이버를 선보이고 있었다. 그리고 또 다른 곳은, EZ-SERVO로 더 잘 알려진 (주)파스텍과 일본의 오리엔탈 모터가 있었다.
2~3년 전만 해도 그렇지 않았던 것으로 기억되는데, 이번 전시회는 전반적으로 전자부품관련 업체는 거의 찾아볼 수 없고, 모션컨트롤러에 관련된 업체들이 주를 이루고 있었다. 또한 전체적인 전시 규모도 예년에 비해서는 초라하게 느껴질 정도로 축소되었음을 느낄 수 있었다. 다양하고, 새로운 전자부품을 기대하고 찾아갔던, 본 기자로써는 조금은 실망스러운 전시회였다. 실망감 때문인지는 몰라도, 전시회의 분위기가 전체적으로 위축되어 있어 보이기까지 하였다.
국내에서 열리는 유일한 전자부품전시회로 알고 있는데, 주최측의 많은 노력과, 업체들의 협조로 내년에는 더욱 볼거리가 풍성한 한국전자부품전이 되기를 바라면서 기사를 마친다.