[8호]2010 캡스톤 최우수 – 드럼 음원 분리와 Zigbee 통신을 이용한 전자드럼
2010 디바이스마트
캡스톤 디자인 공모전 최우수상
드럼 음원 분리와
Zigbee 통신을
이용한 전자드럼
글 | Magic Drum 팀[박병조, 이호섭, 이종혁, 박지훈]
1. 작품개요
1_1 선정 배경
드럼은 타악기로써, 여러 가지 장점을 가진 악기이다. 첫째, 두뇌를 자극하는 효과가 있다. 드럼의 연주 시 양손과 발을 따로 움직여야 하기 때문에 평소에 잘하지 않던 행동을 함으로써 뇌의 자극을 더 주게 된다. 두 번째, 타악기의 특성상 오장육부와 사지를 사용해 연주하는 종합적인 운동기구이다. 악기 중에서도 최고라 불릴 만큼 신체 에너지를 많이 사용한다고 알려져 있고, 운동의 기능도 겸비한다고 할 수 있다. 세 번째, 심리적 효과이다. 그 예로 음악 치료센터라든가 음악 치료사들이 가장 많이 활용하고 있다. 또한 일상생활에 지친 사람들에게 스트레스의 탈출구로도 각광받고 있다. 이 같이 드럼은 많은 장점을 가지고 있는 악기이다. 하지만 몇 가지 제약들로 인해 드럼은 대중화 되지 못하고 있다.
드럼은 필요한 구성품이 많은 악기이다. 따라서 다른 악기에 비해 연주할 공간이 많이 필요하다. 그리고 타악기의 특성상 소음도 많이 발생하기 때문에 가정집에서 연습하기에 적당하지 않다. 비싼 가격 또한 개인에게는 부담이 된다.
Magic Drum은 이 같이 드럼의 장점을 고스란히 담고 단점을 보완하여 일반대중들에게 좀 더 친근하게 다가가고자 개발되었다. 그리고 Magic Drum의 핵심 아이디어는 주위의 사물을 드럼으로 쓰면 어떨까 하는 발상의 전환으로부터 시작되었다.
1_2 작품 개요
타악기란 물체를 (도구로) 때리거나, 흔들거나, 문지르거나, 긁거나 하여 물체가 진동(혹은 공명)할 때 소리를 내는 악기를 의미한다. 따라서 주의의 사물에 충격을 가했을 때, 그 진동을 감지할 수 있다면 사물을 드럼으로 쓸 수 있다는 결론이 나온다.
Magic Drum은 사물에 가해진 충격으로 인한 진동을 감지하고, PC에서 감지된 데이터를 입력신호로 해서 알맞은 드럼의 소리를 재생시켜 준다. Magic Drum은 주위의 사물을 드럼의 구성품으로 사용하고, PC를 이용하므로 드럼의 공간의 제약으로부터 자유롭다. 그리고 사운드를 조절하거나, 스피커에 이어폰을 장착해 소리크기를 조절할 수 있으므로 가정에서도 드럼을 즐길 수 있다. 또한 사물의 진동을 감지하는 장치는 드럼의 가격에 비해 훨씬 저렴하며, 가정에 있는 PC에 프로그램을 설치하기만 하면 되므로 드럼의 금전적인 부담을 덜었다.
Magic Drum은 크게 사물의 진동을 감지하는 하드웨어 장치와 PC에 설치되는 소프트웨어 프로그램으로 구성되어 있다. Magic Drum의 사물의 진동을 감지하는 하드웨어 장치는 Drum Manager라고 부르며, 핸드폰 보다 조금 큰 크기이고 바닥 쪽에는 집게가 부착되어 사물에 쉽게 설치될 수 있다. 그리고 사물과 밀착되는 부분에 얇은 플라스틱 판이 있어 사물의 진동을 감지한다. 감지된 신호는 Magic Drum 소프트웨어 프로그램이 설치된 PC로 무선으로 전송이 된다. Drum Manager는 최대 7개까지 복수로 설치가 가능하여, 사용자의 입맛에 맞는 드럼을 구성 할 수 있다.
Drum Manager | Magic Drum PC Application |
Drum Manager로부터 전송된 신호는 PC에 설치된 프로그램에서 처리되어 사용자에게 드럼의 소리와 시각적 효과를 주게 된다. Magic Drum은 사용자가 지루하지 않고 드럼을 즐길 수 있도록 게임의 요소를 도입하였다. 그리고 디지털적인 장점을 살려 일반 MP3파일을 배경음악으로 등록해서 연주를 할 수도 있다.
2. 시스템 아키텍처
2_1 시스템 아키텍처
Magic Drum 시스템은 크게 입·출력 두 부분으로 나눌 수 있다. 입력 부분은 Drum Manager라 불리는 하드웨어 모듈이고 출력 부분은 WPF(Windows Presentation Foundation)으로 제작된 Windows용 응용 프로그램이다.
전체 흐름을 보았을 때 사용자는 Drum Manager를 책, 책상, 의자 등의 임의의 사물에 부착을 하고 이 사물을 ‘드럼스틱’으로 가격하는 것으로 드럼을 연주하는 것을 대신하게 된다. Drum Manager는 자신이 부착된 물품에 충격이 가해졌을 때 그 진동의 정도를 감지하여 컴퓨터로 전송하게 되고 컴퓨터는 전송 받은 데이터를 분석하여 드럼 소리를 내고 응용 프로그램 내에서 표시된 드럼 이미지가 가격된 것처럼 흔들리게 되는 등의 일을 수행하게 된다. 이러한 일련의 과정을 통해서 사용자는 Drum Manager가 부착된 임의의 사물을 하나의 드럼처럼 느낄 수 있게 된다.
2_2 하드웨어 아키텍처
Drum Manager는 일반의 사물을 드럼으로 바꿔 주는 기능을 하는 장치이다. Drum Manager의 전체적인 형태는 집게 위에 임베디드 모듈이 부착되고 집게가 물체를 집는 형태로 구성하였다.게임 진행 시에는 진동 필름 센서로 사물의 진동을 감지할 수 있게 된다. Drum Manager는 드럼 채로 가격한 사물의 진동을 감지하고, 데이터들을 컴퓨터로 전송한다.
Drum Manager는 크게 MCU, 진동 감지 센서, 배터리 및 충전회로, Zigbee 등으로 구성되어 있다.Drum Manager의 작동 원리는 다음과 같다.
1. (드럼 매니저가 부착된 물체에) 진동 발생
2. (진동 감지 센서인 Piezo film sensor에서) 진동 신호 감지
3. 신호 증폭
4. 아날로그 -> 디지털 데이터로 변환
5. 변환 된 데이터를 Zigbee를 통하여 PC로 송신
요약하자면, Drum Manager는 진동을 감지하고 감지한 진동을 디지털 데이터로 변환 후 자신의 Zigbee 모듈에서 PC에 연결된 Zigbee 모듈로 데이터를 송신하는 역할을 수행한다. 여기서 전송되는 데이터의 양식은 콤마 두 개로 구별되는 세 개의 숫자를 기본으로 하며 줄 바꾸기로 각각의 신호의 경계를 구분 한다. 예를 들자면, 우측 괄호 안의 내용처럼 신호가 전송될 수 있다. [ 3, 14, 55 ] 괄호 안의 내용은 3번 Zigbee 모듈에서 중간 세기의 진동이 14회, 강한 세기의 진동이 55회 발생했다는 뜻이다.
이러한 식으로 강한 진동과 약한 진동을 구별하여 전송함으로써 얻을 수 있는 효과로는 PC에서 구동되는 소프트웨어 입장에서는 현재 발생한 진동이 어느 사물에 부착 된 Drum Manager에게 발생했는지, 어느 정도의 세기로 발생한 것인지라는 두 가지의 내용을 포함하여 받게 될 수 있기 때문에 이를 응용하여 조금 더 풍부한 컨텐츠를 유도할 수 있다는 장점을 가지고 있다.
2_3 소프트웨어 아키텍처
컴퓨터에는 Magic Drum의 소프트웨어가 설치되게 된다. Magic Drum의 소프트웨어는 WPF로 제작되었으며 Windows의 .NET Framework가 설치된 환경에서 작동하게 된다. 컴퓨터에는 Drum Manager들로부터 데이터를 수신하기 위한 Zigbee모듈이 하나 부착되게 되고, 이 Zigbee 모듈을 Serial COM Port를 통해서 접근하게 된다. Magic Drum의 SW에서는 Zigbee가 연결된 Serial COM Port를 계속적으로 관찰하면서 COM Port에 수신된 데이터가 존재한다면 그 데이터를 분석하여 1번 드럼을 강하게 치는 사운드와 이미지 효과를 낸다는 등의 그 데이터가 표시하는 것에 알맞는 일을 수행하게 된다.
3. 결과물
3_1 Drum Manager
Drum Manager는 주위의 사물을 드럼으로 바꿔 주는 장치이다. 즉, Drum Manager는 사물에 설치되어 사물에 가해진 충격의 진동을 감지하여 PC로 신호를 전송하는 역할을 한다. Drum Manager는 중심에 하드웨어 장치들이 있고, 그 주위를 상자와 같은 외곽형틀이 감싸서 보호하고 있다. Drum Manager의 크기는 일반적인 핸드폰보다 조금 크고 바닥부분에는 집게가 부착되어 있다. 그리고 집게의 집는 부분의 끝에는 얇은 플라스틱 판이 있다. 이는 사물에 밀착되어 진동을 감지하는 성능을 향상 시켜주는 기능을 한다.
Drum Manager 외형 |
Drum Manager는 고정된 사물이거나 수평의 사물 위에서는 그냥 올려 놓는 것으로 설치가 끝나며, 경사가 있는 사물이거나 움직이는 있는 가벼운 사물일 경우는 바닥의 집게를 사용하여 설치를 한다.Drum Manager의 사물의 진동감지성능은 설치된 사물에 영향을 받는다. Drum Manger의 사물의 진동감지성능을 제대로 발휘하기 위해선 딱딱한 사물을 사용하는 것이 좋으며, 충격을 흡수하는 사물은 사용하지 않는 게 좋다. 그리고 Drum Manager가 설치된 사물에 충격을 줄 때 충격지점과 Drum Manager의 간격이 일정범위 이상을 넘어가면 진동감지성능이 저하되므로 주의해야 한다.
3_2 Magic Drum 소프트웨어
3.2.1 메인 화면
Magic Drum 소프트웨어 프로그램은 PLAY, MUSIC REGISTRATION, PRACTICE, OPTION 모드로 구성되어 있다. 그리고 조작은 키보드, Drum Manager 두 가지 방식으로 조작이 가능하다.
3.2.2 연주 모드
PLAY모드는 사용자가 원하는 음악을 선택해서 드럼을 연주할 수 있다. PLAY모드의 기본 인터페이스는 ‘비트매니아’와 유사하다. 7개의 수직의 통로에서 원모양의 물체가 내려오는데, 통로의 아래쪽에 위치한 수평선의 중앙에 오는 시점에 맞게 해당 드럼을 치면 점수로 환산된다.
점수는 원모양이 내려왔을 때 얼마나 정확한 타이밍에 드럼을 치느냐의 정확성과, 음악의 노트정보 내의 드럼의 세기에 따라서 산출되며, 연속으로 이와 같은 요건을 만족 하였을 시, 콤보 점수가 플러스가 되게 된다. 사용자가 드럼을 치면 일렬의 통로 밑의 드럼의 해당 부분이 불빛을 내고, 해당 드럼의 그래픽이 흔들리게 되어 자신이 직접 드럼을 친 것 같은 느낌을 제공해 준다.
3.2.3 연습 모드
PRACTICE모드는 이름 그대로 사용자가 드럼을 연습을 좀 더 자유롭게 할 수 있는 환경을 제공한다. 연습모드에서는 배경 음악이 제공되지 않으며, 그로 인해 사용자 자신의 드럼 소리에 더욱 집중해서 연습할 수 있다. 그리고 PLAY모드와 마찬가지로 사용자가 드럼을 쳤을 때, 화면에 보이는 해당드럼에 시각적 효과를 주어 사용자가 실제로 드럼을 친듯한 느낌을 준다.
4장에 설명되는 따라 하기 식의 강좌는 Magic Drum의 연습모드의 일부분을 만드는 형태로 진행될 것이다.
3.2.4 음악 등록 모드
음악 등록 모드에서는 기존에 리듬게임이 한정적인 음악 제공방식을 탈피해서 사용자가 직접 MP3파일을 게임의 배경음악으로 사용할 수 있다. 그리고 등록한 음악을 드럼음원 분리 처리를 해서 드럼 소리가 제거된 음악을 사용 하는 것이 가능하다. 드럼 소리가 제거된 음악은 PLAY모드에서 사용자에게 자신의 드럼소리로 음악을 완성하는 느낌을 주어 더욱 실제감을 높여준다. 또한 기본적으로 mp3 포맷을 지원하며 사용자가 원하는 곡을 선택했다면 그 곡의 mp3 헤더에서 음악의 전체 길이와 곡 이름 등의 정보를 가져 오게 된다. 음악의 총 재생 시간이 180초 라면 각 1초마다 0.1초 단위로 타이밍을 분해하여 사용자가 음악에 PLAY모드에서 사용할 태그(음악에서 드럼의 소리의 시점을 시각적으로 표시하는 원모양의 물체)를 직접 등록할 수 도 있다.
음악 등록 모드에서는 앞서 설명했듯이 단순히 mp3 파일을 가지고 연주할 곡을 만드는 작업만 하는 것은 아니다. 사용자의 선택 사항에 따라서 연주할 곡에 이미 들어 있는 드럼 음원을 제거 할 것인지 아닌지를 선택적으로 수행할 수 있다. 예를 들자면 A라는 곡이 원곡에는 드럼 소리가 들어있는데 Magic Drum에서 사용하려고 음악 등록 모드에서 곡 등록을 할 때 A라는 곡의 드럼 소리만 제거해서 저장할 수 있다는 것이다. 이러한 기능을 제작하기 위해 우리는 “비음수 행렬의 부분적 공동 분해를 이용한 드럼 음원 분리, 유지호, 한국정보과학회 2009 가을 학술발표논문집 36권 2호 p215~220”의 이론과 수식을 참고하였다.
4. 실습
4_1 개발 목표
지금부터 Magic Drum을 제작하는 과정을 구체적으로 살펴보겠다. 위에서 보여드렸던 모든 부분을 다 수록하기 위해서는 너무나 많은 분량과 시간이 필요하기 때문에 여기에서는 Magic Drum에서 중요한 역할을 하는 하드웨어 모듈 제작과, 제작한 모듈을 PC에 연결하여 Magic Drum 연습 모드를 구현하는 것을 목표로 한다. 실제 Magic Drum의 Drum Manager는 강약을 구별 하는 기능이 있지만 실습 예제에서는 강, 약 구별없이 진동 자체를 감지하는 내용으로 구성하였다.
4_2 하드웨어 제작
4.2.1 HW 모듈 구성
Magic Drum은 Snare, Small Tom, Large Tom, Floor Tom, Bass, Hi-hat, Crash 의 7가지로 구성되어 있다. 각 드럼마다 진동을 감지하여 신호를 날리고, 각각의 신호를 수신하여 PC로 전송해주려면 Drum Manager 7개와 PC에 연결 될 Zigbee 모듈 1개가 필요하다. 한 종류의 모듈로 수신, 발신 기능을 다 할 수 있도록 제작하여 사용 편의성을 높였다.
Drum Manager은 센서의 진동을 받아 증폭시켜주는 증폭 부분, 증폭된 신호를 처리하여 시리얼 통신을 통하여 전송해주는 MCU부분, MCU에서 받은 데이터를 전송해주는 인터페이스 부분으로 나누어져 있다. 또한 휴대 및 설치의 편의를 위한 배터리 및 전원부분을 함께 구성하였다.
4.2.2 회로도
Drum Manager의 회로도를 첨부하였다. 하드웨어 아키텍처에서도 알 수 있듯이 회로가 복잡하지 않고 간단한 편이다.
4.2.2.1 센서 증폭부
센서부이다. 피에조 필름 센서에서 들어오는 신호를 opamp를 이용하여 증폭한다.
4.2.2.2 MCU부
MCU부이다. MCU로는 ATmega32L을 사용하였으며, 기본 동작을 위한 주변 회로 외에 상태를 알 수 있도록 LED를 추가하였다. 이 부분은 MCU의 동작에만 필요한 부분이므로 시중에 판매되는 MCU 모듈을 사용해도 무방하다.
4.2.2.3 인터페이스 부
Drum Manager가 다른 모듈 또는 PC와 통신하기 위한 부분이다. PC와 연결을 USB로 쉽게 할 수 있도록 FT232RL을 사용하였다. FTDI 사의 FT232 칩은 UART통신을 USB로 연결할 수 있도록 해준다. 이 칩을 사용해서 PC에 드라이버를 설치하여 연결하면 Windows의 장치 관리자에서 COM 포트로 인식이 된다.
센서 값을 전송해주는 Zigbee 모듈의 경우 Digi사의 XBee 를 사용하였다. ATmega32L은 UART가 하나밖에 없기 때문에 스위치를 이용하여 드럼 모듈일 경우와 PC 수신 모듈일 경우를 선택하여 사용할 수 있도록 하였다.
4.2.2.4 전원부
Drum Manager에서는 USB를 연결할 경우 공급되는 전원이 5V, 배터리는 리튬폴리머 1cell 배터리를 사용하여 3.7 V이며, ATmega32L과 XBee는 동작전압이 3.3V, FT232RL은 5V에서 동작하므로 각각에 맞게 전원을 구성하였다.
또한 배터리 충전을 위해 충전IC를 부착하여 별도로 배터리를 분리하고 충전기를 별도로 이용해야 하는 불편함을 줄였다.
4.2.2.5 PCB제작
Drum Manager는 물건에 부착되어 지속적으로 진동의 영향을 받기 때문에 동작의 안정성과 소형화를 위해서 PCB로 제작하였다. 반드시 PCB제작을 하지 않아도 동작여부에는 큰 차이가 없다.
4.2.3 부품 목록
필요한 부품들은 모두 회로도 상에 나타나 있으나, 제작 시 편의를 위해 별도로 표로 정리해 두었다. 이 표는 모듈 1개를 기준으로 한 부품의 목록이며, 전체 제작을 위해서는 각 부품 수량의 7배와 Zigbee 모듈 1개 추가로 준비하여야 한다.
[Drum Manager 부품]
번호 | 품명 | 비고 | 수량 | 번호 | 품명 | 비고 | 수량 |
1 | 커패시터 | 20pF | 2 | 18 | 저항 | 470R | 3 |
2 | 커패시터 | 0.1uF | 7 | 19 | 저항 | 1MR | 1 |
3 | 커패시터 | 0.1uF | 2 | 20 | 저항 | 1.5kR | 2 |
4 | 커패시터 | 1uF | 1 | 21 | 저항 | 10kR | 1 |
5 | 커패시터 | 10uF | 4 | 22 | 저항 | 1.2kR | 3 |
6 | LED | Yellow | 2 | 23 | 스위치 | Tact Switch | 1 |
7 | LED | Blue | 1 | 24 | 스위치 | ITS12H | 2 |
8 | 다이오드 | SS14 | 1 | 25 | MCU | ATmega32 | 1 |
9 | LED | LED_Green | 1 | 26 | Opamp | TL072 | 1 |
10 | LED | LED_Red | 1 | 27 | USB UART IC | FT232R | 1 |
11 | 박스헤더 소켓 | 5X2 | 1 | 28 | Zigbee Module | XBee/XBee-Pro | 1 |
12 | 피에조 센서 | Piezo Film sensor | 1 | 29 | Battery charger | BQ24072 | 1 |
13 | USB Mini-5p 커넥터 | DS1104-W | 1 | 30 | LDO | TPS76333 | 1 |
14 | MOLEX | 5268-02 | 1 | 31 | Crystal | 16MHz | 1 |
15 | 저항 | 1kR | 1 | 32 | Li-po 배터리 | 500mA | 1 |
16 | 저항 | 22kR | 1 | 33 | USB 케이블 | USB mini | 1 |
17 | 저항 | 10kR | 1 | - | - | - | - |
4.2.4 예제 코드
Drum Manager의 소스 코드이다. 컴파일 환경 설정 및 기타 레지스터 설정은 생략하고, 센서 값을 받아서 PC 로 보내주는 부분만 수록하였다.
코드 내용은 단순한 방법으로 구현되어 있다. 10bit ADC를 Free Running 모드로 동작시키고, 들어온 값을 지속적으로 검사하여 진동으로서 감지하기 위한 특정 값을 넘을 경우 샘플을 여러 개 취하고, 다시 평균값을 내어 기준치를 두고 비교하여 드럼 타격 여부를 시리얼 통신으로 보내주는 방식이다. 이때 드럼 타격 여부를 결정하는 기준치는 실험적으로 얻은 값으로, 센서나 주변 환경에 따라 달라질 수 있다.
4_3 하드웨어 – 소프트웨어 연결
4.3.1 Zigbee 설정
XBee의 설정은 Digi 사에서 제공하는 X-CTU라는 프로그램을 이용해서 설정한다.
구체적인 설정 방법은 일일이 지면에 싣기보다는 툴 제공 회사의 가이드 파일을 참고하는 것이 좋을 듯 하여 아래에 링크를 기재하였다.
X-CTU 다운로드 링크 : http://ftp1.digi.com/support/utilities/40002637_c.exe
X-CTU 사용법 링크 : http://ftp1.digi.com/support/documentation/90001003_A.pdf
참고로 Drum Manager에서는 baud rate 를 19200으로 설정하였다.
4.3.2 PC와 하드웨어 모듈의 연결
PC와 모듈과의 연결은 USB to UART IC인 FT232RL을 사용하였다. FT232RL 드라이버를 설치하고 장치관리자를 확인하면 COM 포트가 추가되어 있는 것을 확인할 수 있다. 장치관리자에서 COM포트 번호를 확인하고, 추후 PC 소프트웨어 제작 시 해당 포트번호를 참고하여야 한다.
FT232RL의 드라이버는 아래 링크에서 다운로드 받을 수 있다.
FT232RL 드라이버 링크 : http://www.ftdichip.com/FTDrivers.htm
4_4 소프트웨어 제작
4.4.1 시리얼 포트 연결
Magic Drum 프로젝트는 WPF(Window Presentation Foundation)를 사용하여 만들어 졌다. WPF의 프로그래밍 로직은 C# 언어를 이용하여 코드를 작성되기 때문에 아래의 예제 코드들은 C# 언어를 이용하여 기술하였다. 이 예제를 이해하기 위한 기본적인 객체지향 개념이나 프로그래밍 언어의 문법을 설명하며 진행하기에는 이 실습의 목적과 부합하지 않으므로 생략하도록 하겠다.
Magic Drum는 2장의 아키텍처란에서 설명했듯이 기본적으로 하드웨어(Drum Manager)-소프트웨어(Windows Program) 간의 통신으로 진행된다. 사용자가 입력한 내용은 Zigbee 네트워크를 통해 Drum Manager로부터 PC로 전송되기 때문에 PC에서 해야 하는 일중 가장 중요한 부분은 일단 자신에게 수신된 Zigbee 네트워크의 메시지를 확인하여야 한다는 것이다.
Magic Drum에 사용된 XBee Zigbee 모듈은 4.3장에서 설명했듯이 Windows에서 PC에 부착 된 Zigbee 모듈을 SerialPort로 인식하고 있다. 내 컴퓨터->속성->장치관리자->포트를 통해서 PC에 장착 된 Zigbee 모듈의 포트 넘버를 확인 할 수 있으며 ‘COM1’~‘COM10’ 등으로 이름이 지어진다. Zigbee 모듈이 연결된 SerialPort에 들어오는 메시지가 있을 때를 이벤트 발생 시점으로 하여 이 이벤트가 발생하였을 때 드럼 소리가 나게 하는 것을 이 예제의 목표로 한다.
이 예제를 수행하기 위해서는 크게 아래의 세 가지 과정을 거치게 된다.
1. PC에 Zigbee 모듈이 연결된 시리얼 포트에 접근
2. 시리얼포트에 데이터가 왔을 때 이벤트를 발생 시키도록 설정
3. 이벤트가 발생 하였을 때 드럼 소리를 내도록 설정
C#에서 SerialPort를 접근하기 위해서는 상단의 그림에서 빨간색 테두리로 표시되어 되어있는 System.IO.Ports; 라는 네임스페이스를 라이브러리로 추가해 주어야 사용할 수 있다.
먼저 SerialPort를 사용하기 위해서는 SerialPort 객체를 생성하여야 하는데 예제 코드에서는 dmPort라는 이름으로 객체를 생성하였다. SerialPort 객체를 생성 한 후에는 해당 객체의 정보에 대해서 설정 할 수 있다.
상단에 표시 된 그림처럼 PortName, BaudRate, DataBits, Parity, StopBits 등을 설정하여 주어야 한다. 설정 값에 대한 부분에 있어서는 컴퓨터의 SerialPort에 연결 된 Zigbee 모듈의 스펙에 따라야 하는데 Magic Drum에서 사용한 Zigbee 모듈인 XBee모델의 스펙은 위 그림에 설정 되어있는 내용과 같다.
만약 시리얼 포트의 설정값의 의미에 대해서 자세히 알고 싶다면 위키피디아를 통해서 찾아 볼 수 있다. http://en.wikipedia.org/wiki/Serial_port
여기서 예외적으로 PortName에 대해서는 Windows에서 Zigbee 모듈을 인식한 SerialPort 이름을 기술하여야 한다. 필자의 경우에는 Zigbee 모듈을 연결 했을 시 Windows에서 “COM4”로 인식하였기 때문에 PortName에 “COM4”를 입력하였다.
모든 설정 값 입력이 끝났다면 생성한 객체에 Open() 메서드를 호출함으로써 자신이 작성한 프로그램에서 Windows 시스템의 SerialPort에 직접 접근할 수 있다. 여기까지의 내용이 이전 페이지의 ①의 과정에 해당한다.
4.4.2 시리얼 포트 이벤트 발생
SerialPort에 접근 하는 것까지 성공했다면 해당 포트에 데이터가 도착했을 때 이벤트를 발생하도록 코드를 작성하면 된다. 이는 사용자 관점에서 봤을 때 Magic Drum에서 사용자가 드럼을 가격하였을 때를 감지하는 이벤트를 지정하는 역할을 뜻한다.
해당 역할을 수행하는 코드는 아래와 같다.
dmPort.DataReceived += new SerialPortReceivedEventHandler(this.dmport_Received);
dmPort.DataReceived는 dmPort 객체에 연결된 SerialPort에 데이터가 도착했을 때를 뜻한다.
여기에 new SerialPortReceivedEventHandler(this.dmport_Received)를 추가하는 것(+=)은 SerialPort에 데이터가 도착했을 때 호출할 메서드를 지정하는 것이다. 이 예제에서 지정한 호출될 메서드의 이름은 this.dmport_Received이고 결과적으로 보았을 때 SerialPort에서 새로운 데이터가 감지되면 dmport_Received 메서드가 호출이 된다.
dmport_Received에 메서드에서 할 일을 지정하면 된다.
만약 이 메서드에서 수행하는 일 중에서 사용자 UI 부분을 제어하는 부분이 있다면 상단의 그림처럼 Dispatcher.invoke 함수를 이용하여야 한다.
이는 윈도우즈 프로그래밍에 관한 특성으로 UI Thread에서 분리된 Background Thread는 UI Thread에서 작성 된 Widget들을 직접적으로 업데이트 할 수 없기 때문이다. 만약 직접적으로 이 부분에서 UI를 업데이트 하려 한다면 프로그램에 오류가 발생 할 것이다.
만약 Dispatcher에 대해서 더 자세한 내용을 알고 싶다면 Microsoft사의 msdn 홈페이지에서 해당 내용을 찾을 수 있다. http://msdn.microsoft.com/ko-kr/library/system.windows.threading.dispatcher.aspx
4.4.3 이벤트에 드럼 사운드 설정
C#에서 소리를 재생시킬 수 있는 라이브러리를 제공하지만 프로젝트를 진행하며 실험해 본 결과 약간의 지연이 발생하였다. 그 문제를 해결하기 위하여 우리는 DirectX SDK를 사용하였다.
DirectX SDK를 사용하기 위해서는 Microsoft에서 제공하는 설치 파일을 다운받아서 설치하면 된다.
http://msdn.microsoft.com/en-us/directx/aa937788
상단의 그림에서 빨간 네모 박스 안에 있는 2가지의 라이브러리를 추가 시키면 DirectX SDK를 사용하여 소리를 재생할 수 있다. 이제 사운드로 재생시키기 위해서 사운드를 재생시키는 클래스를 한 개 생성해보도록 하겠다.
클래스의 이름은 Sound Manager라고 이름을 지었다. 그리고 클래스 내부에 Audio 클래스를 snd_kick라는 이름으로 만들고 Sound Manager가 인스턴스될 때 생성자가 호출되어서 드럼에서 Kick에 해당하는 음이 들어가 있는 kick.wav 을 불러와서 snd_kick로 인스턴스 되어 생성된다.
new Audio()의 생성자로는 wav 파일의 윈도우즈 상에서의 경로를 뜻한다. 필자는 이 프로그램의 경로 아래 (프로그램경로)\Sound\kick.wav 파일을 위치시킨 다음 진행을 하였다.
조금 전에 생성한 dmport_Received라는 메서드 안에서 play Kick()이라는 메서드를 호출 하면 Kick 소리가 재생되는 것을 들을 수 있을 것이다.
5. 음원추출
5_1 음원 추출 과정 개요
① 원본 음악mp3 파일을 가져온다.
② 연산을 좀더 쉽게 하기 위해 mp3를 WAV 포맷으로 변환해준다.
③ wav포맷의 사운드 데이터를 스펙트로그램(Spectrogram)화 시킨다. 스펙트로그램화된 데이터에 비음수 행렬 공동분해를 이용하여 드럼과 화성악기 부분을 분리한다.
④ 드럼이 분리된 사운드 행렬 데이터를 다시 WAV포맷으로 변환한다.
⑤ wav포맷을 mp3로 변환한다.
드럼음원을 분해하기 위한 mp3파일은 먼저 wav파일로 바뀌게 된다. 대부분의 mp3음악은 스테레오로 되어있으므로 변화된 wav파일을 채널별로 나누게 된다. wav파일의 데이터는 음수와 양수가 섞여 있다. 우리는 비음수 행렬분해를 이용한 방법을 써야 하므로, 절대 값을 취해준다. 또한 위상 값을 따로 담아 둔다. 앞서서 얻은 비음수 행렬로 업데이트 식을 연산한다. 여기서 필요하게 되는 사전드럼음원 정보를 로드해 연산에 이용한다. 연산된 데이터를 앞에서 저장해둔 위상 값과 합치고 역 스펙트로그램화 시키고 wav파일을 만든다. 앞서 채널을 스테레오로 2개가 존재하므로 각각의 채널에 위와 같은 순서를 적용한다. 각각의 채널의 웨이브 데이터가 생성되면 다시 합쳐 mp3파일의 형태로 재구성하게 된다.
6.역할 분담
담당 | 이름 | 역할 |
팀장 | 박병조 | · 각 모듈 간 명세 작성 · 메인 화면 제작 · 연습 모드 제작 · 커스터마이징 모드 제작 · 옵션 모드 제작 · 안드로이드 블루투스 통신 모듈 제작 · 안드로이드 GUI 제작 · 각 모듈 통합 · 프로그램 인터페이스 |
음원 분석 | 박지훈 | · 이미지 수집 및 편집 · NMF 알고리즘 분석 · NMF 알고리즘 구현 · 음원 분리 모듈 제작 · 분해 사운드 음질 테스트 및 음원 분리 · 연산 수식 수정 · 분해된 드럼 음원에서 드럼 타이밍 추출 · 게임 UI 이미지 재구성 · 드럼 음원 분해 속도 개선 |
드럼 매니저(HW) | 이호섭 | · 드럼 매니저 설계 및 부품 주문 · 연주 모드 제작 · 드럼 매니저 하드웨어, 펌웨어 제작 · 드럼 매니저 통신 모듈 · 음악 선택 모드 제작 · 연주 모드 tag 적용 · 연주 결과 모드 제작 · PC 프로그램 UI 재구성 · 드럼 매니저 |
외형 제작음원 제어 | 이종혁 | · mp3 파일 구조 분석 · mp3 디·인코더 모듈 제작(mp3 to wav) · wav 음원 분리 및 제어 · 드럼 음원 소스 수집 및 편집 · 음원 분리 매트랩 파일 dll생성 및 C# 제어 클래스 제작 · wav 음원 병합 · 드럼 매니저 강약 조절 보강 · 드럼 매니저 외형 제작 |
7. 개발 환경
OS | Software | Hardware |
·Windows XP SP3 ·Android Platform |
·MS VS 2008 (WPF) ·MS Expression Blend3 ·Eclipse 3.5(Android SDK) ·MySQL |
·AVR ATmega8 ·Zigbee(FZ750) ·Piezo firm Sensor(LDT0-028K) ·Android Phone (ADP1) |
8. 용어 정리
③ Tag(Tagging) : 리듬 게임에서 사용되는 일종의 모형, 사용자가 음악에 대해 입력할 박자를 가리킨다.
④ 주파수 : 진동수(주파수)는 주기적인 현상이 단위시간동안 몇 번 일어났는지를 뜻하는 말
⑤ 스펙트로그램 : 소리나 파동을 시각화하여 파악하기 위한 도구로, 파형과 스펙트럼의 특징이 조합되어 있다.
9. 참고 문헌
① WPF 프로그래밍(이상은 / 가메출판사)
② programming WPF(이안그리피스, 크리스셀즈, 정현희 역 / 한빛 미디어)
③ 찰스페졸드의 WPF(찰스페졸드 / 에이콘)
④ Pro WPF in C# 2008(매튜 맥도날드 / 웰북)
⑤ .NET 프로그래밍 정복(김상형 / 가메출판사)
⑥ 전자 회로(김봉열)
⑦ Multimedia sound programming(한학용, 하성욱, 허강인 / 영진닷컴)
⑧ 집단 지성 프로그래밍(토비 세가란 / 한빛 미디어)
⑨ 비음수 행렬의 부분적 공동 분해를 이용한 드럼 음원 분리(유지호 외 3명 / 논문)
⑩ Non-Negative Matrix Factorization for Polyphonic Music Transcription(Paris Smaragdis, Judith C. Brown / 논문)
⑪ Learning the Parts of Objects using Non-negative Matrix Factorization (Ralf Nikolaus/논문)
⑫ Adaptive Non-negative Matrix Factorization in a Computational Model of Language Acquisition(Joris Driesen, Louis ten Bosch2 Hugo Van hamme, 논문)
⑬ Fourier Transforms(Mark handley / ppt 자료)
[8호] 위드로봇 무료강좌 기술자료 – 4차
4차 릴레이 무료강좌 기술자료
임베디드비전 시스템 소개
글 | 위드로봇(주) 김도윤 대표
시작글
위드로봇 연구실 확장 이전 기념 릴레이 무료 강좌 4차 교육이 2011년 1월 8일 토요일에 성수동 위드로봇 본사에서 진행 되었습니다. 임베디드 비전 시스템에 대한 주제로 진행된 이번 강좌의 강의 내용을 참석하지 못한 디바이스마트 매거진 구독자들을 위해 간단히 소개하고자 합니다.
서 론
비전 시스템(vision system)은 카메라를 통해 얻은 영상에서부터 얻고자 하는 정보를 처리하는 장치로 카메라 – 이미지 그래버 – PC 형태로 구성되는 것이 일반적이다. 이때 PC의 사양은 통상적으로 해당 시점에서 가장 고성능의 부품들로 구성된다. 이는 영상 데이터가 현재 기술 대비 아직도 실시간으로 처리하기에 힘들고, 많은 비전 어플리케이션들이 하드 데드라인(Hard deadline)을 가지는 실시간성을 요구하기 때문이다. 위드로봇에서 수행한 많은 영상 처리 과제들도 쿼드 코어를 가지는 i7 프로세서를 사용하는 PC 1대로도 실시간 처리가 안되어 PC 3대를 기가비트 이더넷으로 연결한 구조로 구성하여 실시간성을 맞추는 시스템을 만들곤 한다.
비즈니스 관점에서는 시스템의 신뢰성을 높이고 시스템을 구성하는 요소를 줄여 성능을 높이고 생산 단가를 줄이는 것이 중요하다. 위 세 가지 요소(카메라, 이미지 그래버, PC)들은 각각 다음과 같이 발전하고 있다.
●카메라: CCD 이미지 센서에 비해 CMOS 이미지 센서가 대량 생산에 유리하기에 기술 개발은 CMOS 이미지 센서쪽에 편중되어 진행되고 있다. 이 덕분에 고해상도, 고속 CMOS 이미지 센서가 지속적으로 출시되고 있으며, CCD 센서에 비해 단점으로 여겨지는 dark current, 저조도에서의 응답 특성이 점차 개선되어 CCD 이미지 센서를 맹렬히 추격하고 있다. 특히 최근에 많은 관심을 끌고 있는 wide dynamic range 카메라는 명암 차이가 심한 지역에서도 어두운 부분과 밝은 부분의 디테일을 잘 표현하기에 영상 처리 센서를 제조하는 제조사들이 공을 들여 개발을 거듭하고 있다. 아울러 적정 해상도, 응답 특성을 기준으로 놓고 보면, CMOS 센서 기술이 발전하면서 점점 더 작은 크기의 이미지 센서 크기로도 담당할 수 있게 되어 가격이 저렴해지는 효과가 있다. 최근 640 x 480 VGA 급 CMOS 이미지 센서는 $2까지 가격이 떨어졌고, 렌즈까지 포함해도 $4 수준인 경우가 많다. 기존 CCTV용 카메라 셋트를 구성하려면 $100이 넘는데, CMOS 이미지 센서로 영상을 취득하는 부분을 구성하면 1/20 가격으로 카메라를 구성할 수 있게 된 것이다.
● 이미지 그래버는 통상적으로 아날로그 신호로 전달되는 영상 신호를 디지털 신호로 바꾸기 위해 존재했었는데 앞서 소개한 CMOS 이미지 센서들은 디지털 신호를 바로 출력하여 마이크로 프로세서에 연결할 수 있는 인터페이스를 내장하고 있다. ITU BT.601, 656과 같은 규약이 그것이다. 주로 8비트 내지 10비트의 데이터 라인과 함께 수평 라인, 수직 라인을 표시하는 동기 신호 및 각 픽셀의 전송을 알리는 픽셀 클럭 신호를 가지고 있다. 최근 출시되는 범용 마이크로 프로세서에서는 이러한 BT.601/656 포맷을 지원하는 인터페이스 블록을 내장하고 있는 경우도 있어 이러한 마이크로 프로세서를 사용하면 CMOS 이미지 센서 출력을 바로 마이크로 프로세서에 연결할 수 있다. BT.601/656 인터페이스는 PCB 상에서 영상을 전달하거나 근거리(10~20cm 이내)내에서 영상을 전송하는 목적으로 만들어진 인터페이스이므로 이 보다 더 긴 거리로 영상을 전송하려면 별도의 인터페이스가 필요하다. 최근에 널리 사용되는 기술은 Camera link, 기가비트 이더넷, USB 3.0을 들 수 있다. 이 중에서 가장 최근에 출시된 USB 3.0은 5Gbit가 넘는 넓은 대역폭에 기존 USB 2.0과의 하위 호환성을 무기로 빠른 속도로 영상 전송 인터페이스 시장을 잠식할 것으로 예상된다.
● PC는 본질적으로 영상 처리 알고리즘을 동작시키기 위한 장치이므로 성능만 따라준다면 전통적인 임베디드 프로세서로 대치 가능하다. 아쉽게도 현존하는 기술로는 PC가 가장 손쉽게 접할 수 있는 고성능 프로세서를 장착한 시스템이기에 PC를 능가하는 임베디드 프로세서를 접하기는 어렵다. 하지만 특정 영상 처리 알고리즘을 소프트웨어가 아닌 하드웨어를 통해 구현하고, 이를 하나의 칩으로 만든 형태로 시스템을 구성하면 PC에 비해 낮은 클록으로 동작하는 임베디드 프로세서에서도 실시간성을 확보할 수 있어 굳이 PC를 사용하지 않더라도 비전 시스템을 구성할 수 있게 된다. 대표적인 예로 차량에 장착하여 전방의 상황을 실시간으로 SD 카드에 저장하는 차량용 블랙박스를 들 수 있다. 640×480 해상도의 컬러 이미지를 실시간으로 압축하여 저장하는 연산량은 저사양 PC에서도 버거울 정도로 많은 컴퓨팅 파워를 요구한다. 이를 현장에서는 MPEG2 또는 H.264와 같은 특정 압축 알고리즘을 전담하는 임베디드 프로세서와 인터페이스를 담당하는 임베디드 프로세서 두 개를 하나의 칩으로 만들어 해결하였다. 이러한 프로세서는 설계는 어렵지만 일단 설계가 완성되면 대량 생산이 가능해지기 때문에 생산 원가를 대폭 줄일 수 있다. 통상적으로 이러한 프로세서는 $5 이내에서 공급되기에 $150이 넘는 PC 세트에 비해 가격 우월성, 저전력, 시스템 크기 등에서 큰 장점을 가진다.
위에서 살펴본 바와 같이 이미지 센서 기술 발전으로 인한 영상 장치 가격의 하락, 별도의 이미지 그래버 없이 영상을 바로 마이크로 프로세서로 전달할 수 있는 인터페이스 등장, 그리고 마이크로 프로세서의 성능 개선을 통한 컴퓨팅 능력의 향상은 영상 처리 기술이 공장 자동화와 같이 한정된 산업 분야를 벗어나 모바일 기기, 차량, 게임, 서비스 로봇, 사용자 인터페이스 등과 같이 실생활 곳곳에서 다양한 형태로 응용되는 기반을 마련하였다[1]. 이처럼 영상 처리 시스템의 기반이 기존 고성능, 고가의 컴퓨터에서 휴대폰이나 디지털 카메라와 같은 저가형 임베디드 시스템으로 전환되면서 임베디드 비전 시스템, 임베디드 컴퓨터 비전이라는 개념이 등장하기 시작하였고, 관련 학회에서도 이러한 용어를 사용하기 시작하였다[2][3].
이러한 새로운 개념이 등장하면 해외에서는 뜻을 같이 하는 단체를 결정하여 주도권을 쥐고 많은 부분의 표준을 선도한다. 이런 부분은 국내 연구진, 산업체들이 항상 한 발 늦어 아쉬운 부분인데 임베디드 비전 분야도 얼마전 15개의 해외 기업 주도로 임베디드 비전 연합(Embedded Vision Alliance, www.embedded-vision.com)을 출범하였다. 참여하고 있는 기업을 살펴 보면 BDTI, 자일링스, 아날로그 디바이스, 앱티컬(Aptical), 애브넷 일렉트로닉스 마케팅, CEVA, 코그니뷰, 프리스케일, 매스웍스, 내쇼날 인스트루먼트(NI), 엔비디아(NVIDIA), 텍사스 인스트루먼트(TI), 도쿄 일렉트론 디바이스, Ximea 그리고 XMOS 등이다. 아직은 초기 단계여서 홈페이지에서 많은 정보를 제공하고 있지는 않지만 쟁쟁한 업체들이 참여한 만큼 해당 분야에서 큰 영향력을 미칠 것으로 예상된다.
임베디드 비전 분야가 등장하면서 이전 영상 처리 시스템에서는 별로 고려하지 않던 제약 사항들이 새롭게 등장하는데, 대표적인 것이 성능, 가격, 크기 등이다. 이 중 이번 원고에서는 임베디드 비전 시스템의 성능에 대해 살펴보도록 하겠다.
임베디드 비전 시스템의 성능 개선 방향
반복해서 강조하지만 영상정보는 한 장의 이미지만 해도 수백 KB가 넘는 데이터를 가지고 있어 연산량은 매우 방대하다. 따라서 연산 속도가 PC에 비해 절대적으로 느린 임베디드 프로세서에서는 성능 저하가 발생한다. 임베디드 환경이 가지는 여러 제약사향을 만족시키면서 실시간성을 확보하기 위해 전용/범용 하드웨어 구성 및 소프트웨어 프로그램에 대한 연구가 진행되고 있다. DSP(Digital Signal Processor)를 내장하여 코프로세서(Co-processor)처럼 활용하는 방법이 있으며, DSP에 전통적으로 강점을 지녔던 TI(Texas Instrument)가 많은 시도를 하고 있다. TI의 Davinci 제품군은 범용 프로세서로 ARM Cortex-A8을 사용하고, 전용 프로세서로 TI C6000 계열 DSP를 내장한 원칩 임베디드 프로세서이다.
외부에서 봤을 때에는 ARM 프로세서처럼 보이게 되어 기존 ARM 시스템과 호환성을 높였고 내부적으로는 DSP가 코프로세서처럼 동작하게 하여 다양한 영상 처리를 두 개의 프로세서를 통해 처리가 가능하도록 구성한 시스템이다. 두 개의 프로세서 프로그래밍을 돕기 위해 SYS/LINK라는 기능이 지원되며 이를 이용하면 ARM쪽 프로세스와 DSP쪽 프로세스간의 프로세스 통신 및 데이터 교환이 가능하다. 2011년 기준으로 가장 최신 Davinci 제품군은 DM814x 시리즈이며, Cortex-A8 667MHz와 C674x DSP가 내장되어 있다. TI에서 전략적으로 임베디드 비전 분야 시장을 보고 출시한 제품이며 2012년 상반기에 출시될 예정이다. 현재 엔지니어링 샘플이 출시되어 있다.
또 다른 접근 방법은 FPGA(Field-programmable Gate Array)를 이용하는 것이다. FPGA 단어 자체가 낯선 분들을 위해 간단히 소개하면 하드웨어 기술 언어(HDL)을 이용하여 수행하고자 하는 연산을 하드웨어 로직으로 구성할 수 있는 디바이스이다. 통상적으로 ASIC으로 가기 위한 전단계로 많이 사용되지만 영상 처리 알고리즘에 최적화된 하드웨어를 빠르게 구현할 수 있다는 점에서 꾸준히 영상 처리 전문가들에게 관심을 받아왔다. FPGA를 이용하여 영상 처리 알고리즘을 구현하면 비종속적인 연산을 동시에 수행할 수 있어 병렬 처리가 가능해진다.
이는 전통적인 범용 프로세서에서 for loop를 돌릴 경우 파이프 라인 처리 속도 이상은 기대할 수 없는 반면, 극단적인 예를 들다면, for loop문이 필요 없이 한 번에 연산을 처리할 수 있다는 이야기가 된다. 특히 특정 비전 알고리즘은 FPGA와 궁합이 매우 잘 맞는다. Optical flow, 얼굴 검출 등은 연산의 구조가 서로 관련성이 적고, 여러 영상 화소 데이터값은 동시 참조가 빈번하여 FPGA 특성을 잘 활용하면 범용 프로세서에서 처리한 것에 비해 대폭적인 성능 향상을 기대할 수 있는 분야이다. 실제로 이와 같은 특징을 잘 활용하여 얼굴 인식 분야에서는 얼굴 인식 알고리즘을 FPGA 또는 ASIC까지 진행하여 원칩으로 나온 제품들이 많이 있다. 이러한 전용 칩은 동시 연산이 가능하기에 VGA 영상을 초당 300장 이상 처리할 수 있는 제품들도 있어 동적 응답 특성이 중요한 응용 분야에서 널리 활용될 것으로 기대된다.
앞서 언급한 ARM+DSP 조합이 범용 프로세서 두 개를 구성하고 소프트웨어를 잘 구성하여 임베디드 비전 시스템의 성능 향상을 꾀하는 방법이라면 범용 프로세서 + FPGA 조합은 하드웨어 구성으로 성능 향상을 꾀하는 방법이다. 후자 방식이 시스템 크기도 커지고 소비 전력도 상대적으로 많이 소비되며 VHDL 또는 Verilog로 추가 코딩을 해야 하기 때문에 디버깅이 어렵다는 단점이 있다. 하지만 시스템의 보완이 상대적으로 우월하며 실시간 측면에서는 훨씬 이점이 있기에 주어진 조건에 맞춰 개발자들은 적절한 방법을 선택하여 개발하고 있다.
마지막으로 시도하는 방식은 GPU(Graphics Processor Unit)을 이용하는 것이다. GPU는 원래 모니터에 2D/3D 그래픽을 출력하는데 있어 빠른 처리를 위해 매트릭스 연산을 빨리 수행할 수 있도록 특화된 프로세서이다. 부동 소수점의 병렬 처리 기능이 강화되어 있으며 하드웨어 구조가 범용 프로세서에 비해 매우 단순하여 집적도를 늘리기 쉽다. 그 결과 범용 프로세서의 집적도를 넘어서서 연산 성능으로만 보면 GPU가 CPU를 능가하게 되었다. 이런 기능을 그래픽 연산뿐만 아니라 범용 연산에도 처리할 수 있도록 하는 GPGPU(General-Purpose computing on Graphics Processor Unit)가 도입되면서 최근에는 슈퍼 컴퓨터들이 GPU로 만들어지고 있다. 앞서 소개한 임베디드 비전 얼라이언스 참여 기업 목록을 보면 그래픽 카드 칩셋 제조사로 유명한 엔비디아가 참여하고 있는 것을 확인할 수 있다. 이는 GPU의 임베디드 비전 분야 활용을 보여주는 단적인 예이다. 엔비디아는 CUDA(Compute Unified Device Architecture)라는 하드웨어 코어 및 프로그래밍 방법론을 제공하고 있다. CUDA 코어에는 매 클록 당 부동 소수점 연산이 가능한데 GF100 그래픽 카드의 경우 이러한 CUDA 코어를 512개 가지고 있다. 추가로 스트리밍 멀티 프로세서(SM)을 16개, SM 1개당 4개의 특수 기능 유닛(SFU)를 가지고 있어 범용 프로세서 대비 30배 이상 빠른 연산을 수행할 수 있다. 실제로 위드로봇에서는 CPU에서 동작하던 알고리즘을 GPU로 이식하는 과제를 수행하였는데 인텔 CPU 대비 38배 빠르게 수행할 수 있는 결과를 얻었었다.
문제는 내부 캐시 메모리가 한정적이어서 모든 이미지를 GPU가 접근 가능한 영역에 올릴 수 없다는 것이 단점이다. 따라서 메모리 억세스를 최소화하면서 해당 알고리즘을 구현할 수 있도록 변경해야 하는데 이 부분이 GPU 프로그램의 핵심이 된다.
이와 같은 GPU 장점으로 임베디드 프로세서에 GPU를 이식하는 시도가 계속되고 있으며, 첫 번째 제품이 최근 스마트 폰에 도입되어 선전하고 있는 테그라 프로세서이다. 올해 시제품이 출시될 것으로 보이는 테그라3의 경우 쿼드 코어 프로세서 + 듀얼 GPU 기반으로 출시가 된다면 임베디드 비전 분야에서는 가장 화려한 스펙을 가진 디바이스가 될 것으로 예상된다.
핵심은 무엇인가?
앞서 소개한 내용 구성 요소 모두가 중요하긴 하다. 하지만 최근 프로세서의 패키징이 작아지고 AP(application processor) 공급이 대규모 설계 쪽으로 치중되는 현상이 심해지면서 아마추어들이 취미 삼아 하드웨어를 만들기에는 점점 어려워지고 있다. 이는 소규모 회사에게도 마찬가지여서 Davinci 시스템이건, FPGA 기반 시스템이건, Tegra3 GPU 기반의 시스템이건 프로젝트를 가동하기가 매우 부담스러워졌다. 이러다 보니 해당 프로세서를 조그마한 모듈로 만들고 이를 대량 생산하여 공급하는 업체들이 자리 잡을 시장이 형성되고 있다. 이 이야기는 임베디드 비전 시스템을 구성하는데 있어 하드웨어는 굳이 자체적으로 제작하지 않아도 시장에서 구할 수 있는 분위기가 조성되고 있다는 뜻이다.
반면 소프트웨어는 조금 사정이 다르다. 시중에 나와있는 상용 영상처리 라이브러리는 모두 PC 기반이며, 임베디드용은 거의 찾기가 어렵다. 그나마 컴퓨터 비전 연구자들이 모여 공개 소프트웨어로 진행한 OpenCV가 임베디드 비전 분야에서는 대안책처럼 여겨지고 있다.
주어진 환경에서 목적하는 작업을 수행하는 알고리즘은 매번 프로젝트마다 달라지고, 또한 프로젝트마다 주어진 환경이 달라지기에 기존에 사용했던 알고리즘을 그대로 사용할 가능성은 희박하다. 이러한 분위기에서는 환경에 알맞게 변화하는 카멜레온처럼 알고리즘을 주어진 환경 및 하드웨어에 최적화하는 기술을 핵심이 된다. 이를 위해서는 해당 알고리즘의 기본 원리에서부터 구현까지 온전히 다 알고 있어야 한다. 최근 스마트 폰 보급이 늘어나면서 스마트 폰에서 다양한 영상 처리를 하려는 시도가 늘어나고 있다. 이 역시 임베디드 비전 분야라고 볼 수 있는데, 이 분야의 개발자들과 이야기를 하다 보면 “나는 비전 전문가가 아니라서… 알고리즘에는 관심 없고 일단 함수 레벨에서 가져다 쓰면 되지”라는 이야기를 종종 듣곤 한다.
예를 들면 2D 바코드로 유명한 QR code는 최근 보급이 많이 되어 스마트 폰에서 다양한 어플리케이션들이 만들어 지고 있는데 그 수 많은 어플리케이션들이 단 2종류의 QR 코드 디코더를 쓰고 있다. 스마트 폰 어플리케이션 개발자가 수 만명이라면 이러한 임베디드 비전 알고리즘을 구현할 수 있는 개발자는 수 십명 수준이라는 것이다. 어느 쪽이 개발자로서 수명이 길고 대접을 받을 수 있을까?
항상 핵심은 단순하고 간단하다. 가장 밑바탕이 되는, 그리고 가장 어려워 보이는 것이 핵심이다. 그리고 그 핵심이 가장 오래 간다. 많은 개발자들이 개발자로서의 수명이 짧다고 한탄하는 것, 제대로 대접받지 못하는 것은 물론 시스템 구조적인 문제도 있겠지만 보다 쉽고 빨리 할 수 있는 방향으로 가다 보니 본질에 해당하는 핵심 부분을 건드리지 못해서는 아닐까 생각해 본다. 짧은 저자의 식견으로는 임베디드 비전 분야의 핵심은 ARM 프로세서를 잘 사용하는 것도, ARM 프로세서 하드웨어를 잘 설계하는 것도 아닌 비전 알고리즘을 얼마나 잘 이해하고 실제 구현할 수 있느냐라고 생각한다.
앞서 DSP, FPGA, GPU 등의 다양한 하드웨어를 소개했었다. 하지만 자신이 풀고자 하는 문제의 특성을 정확하게 파악하지 않으면 아무리 좋은 하드웨어를 사용한다고 해도 생각보다 빨라지지 않는 것을 경험할 수 있으며 꽤나 많은 시간을 들여도 개선되지 않는 것을 경험하게 될 것이다. 예를 들면 어떤 필터 알고리즘을 구현한다면, 부동 소수점 연산을 고정 소수점 연산으로 바꾸는 것만으로도 8배 이상 빨라지거나 심지어는 20배 이상 빨라지는 것을 경험할 수 있다.
이 때 고정 소수점 연산으로 변환하기 위해서는 알고리즘의 각 부분은 명확하게 이해해야지 오류 없이 변환이 가능하다. 또한 GPU의 경우 일반 프로세서에서 순차적으로 수행하는 형태로 작성된 알고리즘은 그다지 빨라지는 효과를 볼 수 없다. 알고리즘을 이해하여 병렬적인 부분을 만들어 내야지만 대폭적인 성능 개선을 볼 수 있다. 이러한 부분은 책이나 강의로 전달될 수 있는 부분이 아니라 많은 시간을 들여 노력을 해야 얻을 수 있는 노하우이다. 역설적으로 그러기에 누구나 할 수 있는 분야가 아니게 되고 그렇기에 더욱 값어치가 있다.
임베디드 비전 시스템의 알고리즘을 공부하고 싶은 분은 다음 내용을 추천한다.
● OpenCV(http://sourceforge.net/projects/opencvlibrary/): 현존하는 가장 좋은 임베디드 비전 알고리즘을 학습하기에 좋은 소스이다. PC에서 동작하는 것을 기본으로 하고 있지만, cxcore 부분을 잘 이식하면 non-OS의 임베디드에서도 잘 동작한다. 단순히 영상 처리 함수들을 불러다 쓰는데만 만족하지 않고 해당 소스들을 하나씩 공부하다 보면 누구보다도 월등한 실력을 가진 임베디드 비전 개발자가 될 수 있다. 꽤 방대한 양이니 단숨에 끝날 것이라고는 기대하지 마시길.
● TI Fast Run-Time Support Library(http://focus.ti.com/docs/toolsw/folders/print/sprc060.html): 임베디드 비전 분야에서는 DSP쪽에 강세인 Texas Instruments 자료에 많이 의존하게 된다. FastRTS라고 알려진 수학 함수라이브러리는 일반 라이브러리에 비해 3배 이상 빠른 연산을 보장한다. 실제로 필자도 MARU 휴머노이드 프로젝트를 할 때 FastRTS의 도움을 많이 받았다. 부동 소수점 연산 수학 함수들이 DSP에 최적화되어 있는데 어떻게 하면 DSP에 최적화되는지 구조를 볼 수 있다. 폼페이지 접속하면 소스와 설명서를 내려 받을 수 있는데, 대부분의 TI 문서가 그렇듯이 무지막지한 양을 자랑한다.
● BLAS/LAPACK(http://www.netlib.org/lapack/): FOTRAN에서 시작한 수학 연산 라이브러리로 거의 대부분의 수학 연산 알고리즘을 확인할 수 있다.
● TI DSPLIB(http://focus.ti.com/docs/toolsw/folders/print/sprc265.html): TI DSP 하드웨어 플랫폼에 최적화된 라이브러리이다. ANSI-C 로 작성되어 있으니 꼭 TI가 아니더라도 한 번 살펴보면 다른 DSP쪽에 어떻게 활용할 것인지 알 수 있다.
● TI IMGLIB(http://focus.ti.com/docs/toolsw/folders/print/sprc264.html) : 2D 이미지 처리에 관련된 기본 함수가 TI DSP에 최적화되어 있다.
● IPP(http://software.intel.com/en-us/articles/intel-integrated-performance-primitives-intel-ipp-domain-library-migration-faq/): 인텔 프로세서에 최적화된 라이브러이다. OpenCV도 IPP의 전신인 IPL을 기반으로 작성되어 있다. 각종 이미지 연산에 관련된 최적화된 함수를 확인할 수 있다.
마감하며
위드로봇㈜ 연구소를 성수동으로 이전하는 기념으로 시작한 공개 강좌 내용을 디바이스마트 매거진에 글로 옮긴지 벌써 네 번째이자 마지막이 되었다. 볼품없는 글을 예쁘게 다듬어주신 디바이스마트 디자인 팀 및 신종헌 팀장님께 감사 드리며, 다시 기회가 주어진다면 좀 더 알찬 내용으로 다시 한 번 독자분들을 찾아 뵙겠다는 이야기로 마무리한다.
참고 문헌
[1] 진승훈, 전재욱, “Embedded Computer Vision 관련 연구 동향,“ 로봇학회지 제7권 제 1호, pp7-15[2] http://www.movesinstitute.org/~kolsch/pubs/EmbeddedCV.html
[3] Mathias Kolsch, Branislav Kisacanin, “Embedded Computer Vision and Smart Cameras,” Tutorial Paper on Embedded Systems Conference(ESC), 2007
그림 출처
그림 1 Micron 홈페이지
그림 2 TI 홈페이지
그림 3, 4 nVidia 홈페이지
[9호]국제 LED EXPO 2011를 다녀오다
국제
LED EXPO 2011를
다녀오다
글 | 이용세 기자 edgar@ntrex.co.kr
국내 최대 규모 LED EXPO가 개최되어 설레이는 마음으로 방문하였다. LED조명은 산업분야 뿐만 아니라 저전력 에너지로 밝은 빛을 발광할 수 있어 가정과 편의시설, 휴대기기 등의 많은 부분에 적용되고 있어, 우리 주변에서 쉽게 찾아볼 수 있다. 이번 LED EXPO 에는 소니 캐미컬, GE Lighting Korea, LED 제조장비 AIXTRON 등의 글로벌 LED 기업 70여 업체가 참가하였다. 금호전기, 주성엔지니어링, 광전자, 루멘스, 삼진엘앤디 등 국내 LED 조명과 장비 관련 주요 기업들도 자사의 제품과 장비를 소개하는 자리를 마련했다.
LED 전시회장 모습 |
GE Lighting Korea 에서는 여러 실내 조명을 선보였는데, 최대 밝기의 10%까지 밝기 조절이 가능한 Dimmable PAR Lamp와 백열램프를 대체하는 LED램프, 빛샘을 줄인 정밀한 배광 컨트롤과 색온도 선택을 할 수 있는 램프, 세계최초 270도 전방위 배광분포 램프 등을 시연하고 있었다.
금호전기는 플렛타입의 LED 면발광과 LED 현광타입 램프를 선보였다. 기존 램프 대비 사용 시 유지비는 반 이상 절감효과를 볼 수 있으며, 밝기 조절과 설치가 간편하고 발열 부분이 많이 개선되었다는 점이 눈에 띄었다. 발열은 LED의 수명뿐만 아니라 사용 가능한 환경까지도 변화시키기 때문에 중요한 부분이다. PCB 자체로 방열판 역할을 하는 METAL PCB가 이러한 발열 부분을 해결하고 있다.
금호전기의 LED램프 |
LED LIGHT 후레시 업체 SUREFIRE가 참가하였는데, 여러 아웃도어 상품들을 진열하고 있었으며, 무접점으로 충전이 가능한 상품도 있었다. 손쉽게 거치대에 올려만 두면 자동 충전이 되는 상품이다. 100%방수는 물론 어떠한 충격에도 쉽게 손상되지 않는 것이 특징이다. 가격대는 저렴한 상품부터 고가의 상품까지 다양하게 준비되어 있다.
SUREFIRE사의 제품 |
조명 업체와 더불어 조명을 인테리어 디자인 효과로 전시하는 업체도 있었다. 불투명한 조형물 내부에 LED 조명을 넣어 은은한 조명을 내는 상품과 가지 끝이 반짝이는 나무 모형도 볼 수 있었다.
백라이트는 각종 LCD와 전광판/광고판 등에 없어서는 안되는 핵심인데, 이 부분에 최근 LED 조명이 사용되어 보다 밝은 화면을 볼 수 있게 되었다. K&C에서는 가공 장비(CNC)가 필요없으며, 교체/설치가 용이한 특수 필름으로 V-Cutting보다 밝은 백라이트 대체 필름을 소개하였다. 아크릴 등에 필름지만 붙여서 위/아래에 LED 등으로 빛을 쏘아주면 전체적으로 빛이 반사되는 형태이다. 얇게 적용할 수 있으며 아크릴에 광고 시트지 정도만 붙여도 훌륭한 광고판이 되는 것이다.
그 외에도 수많은 LED 전광판과 LED 빛으로 상품홍보를 하는 전시장은 눈이 부시도록 화려했다. 해마다 기발한 상품들이 눈과 귀를 즐겁게 하는데, 소개한 상품 일부가 디바이스마트에서 판매 준비를 하고 있다는 것도 잊지 말자.
[9호]TMS320F28x 플래시 프로그래밍 실습 강좌 교육현장에서의 동행취재
TMS320F28x
플래시 프로그래밍
실습 강좌 교육현장에서의
동행취재
글 | 김지혜 기자 sophia@ntrex.co.kr
2011년 5월 28일 화창한 초여름 날씨에 한남대학교 공과대학 강의실에선 싱크웍스에서 준비한 TMS320F28x 플래시 프로그래밍 실습 강좌 교육이 한창이었다.
오후 1시 반부터 시작된 강의는 강의준비를 위해 시작 두 시간 전부터 준비를 해야 했다. 강의에 대한 강사 분의 열의와 포항, 전주, 평택에서 한달음에 달려온 교육참가자들의 열기로 강의실을 가득 채웠다. 우선, TMS320F28x 프로세서를 사용하기 위한 28x 프로세서 소개와 28x 개발환경 안내 등의 설명으로 오리엔테이션을 시작하였다. 간단한 휴식시간을 가진 후, 본격적인 강의가 시작되었다.
28x 프로세서를 소개하고 있다 | 강의 집중하는 교육 참가자들 | 강의 실습에 쓰인 플레시 메모리 |
TMS320F28x의 플래시 메모리 개요와 플래시 메모리의 구조, 프로그램을 플래시에서 동작시키는 방법 설명을 하고 플래시에서 프로그램을 동작시키기 위한 실습을 시작하였다.
실습 교육 후, TMS320F28x의 플래시 메모리 최적 사용법에 대한 플래시의 Wait-state와 Pipeline 설정 방법과 특정 함수를 RAM으로 옮겨 실행하는 방법, 프로그램 전체를 RAM에서 실행하는 방법, 플래시에서 프로그램 고속 동작 시키기에 대한 실습을 하며 강의를 이어나갔다.
휴식시간 싱크웍스에서 준비한 키트와 모듈 등을 볼 수 있는 시간을 가지며, 제품에 대한 참가자들의 문의에 대한 싱크웍스 관계자의 답변 및 제품소개가 있었다.
4시간여의 강의가 끝나고, 문의점에 대한 질의 응답시간을 가졌는데, 이때에도 강의에 대한 관심과 열의만큼이나 다양한 질문들이 많았으며, 친절한 답변 및 설명이 이어졌다.
교육에 참가한 참가자들에겐 TMS320F28x 플래시 프로그래밍에 대해 자세히 알 수 있는 계기가 되어 좋은 교육의 기회가 됐다는 소감과, 앞으로도 이런 유익한 교육들이 수도권 이외의 지방에서도 자주 마련됐으면 하는 바램과 함께 짧지만 알찬 교육을 정리하고 마무리를 지었다.
[8호]2011 국제 전지 산업전을 다녀오다
2011
국제 전지 산업전을
다녀오다
글 | 김형준 기자 episode@ntrex.co.kr
엑스포럼, 전자 신문이 주최하고 지식경제부, 한국과학기술연구원, 한국전기연구원, 전자부품연구원, 한국전지연구조합, 한국전지공동협동조합이 후원하는 2011 국제 전지산업전(GREEN BATTERY / CELL EXPO 2011)이 지난 6월 22일부터 24일까지, 3일간 서울 삼성동 코엑스홀 B관에서 개최되었다.
“녹색성장의 심장, 2차 전지 공략법 A to Z”라는 주제 아래 전지, 배터리 관련 국내외 10개국 약 100여 개의 업체에서 참가한 이번 행사는 1차 전지, 2차 전지, 초고용량 캐패시터, 차량용 2차 전지, 연료전지 등 5개 전시분야로 나뉘어 진행이 되었다.
여기서 1차 전지란 일상에서 많이 사용되는 라디오, 시계, 장난감, 계산기 등 일반 알카라인 망간 건전지, 산화은전지, 리튬일차전지 등이 포함되어 있으며, 2차 전지는 휴대폰, 노트북, 전기차, 신재생에너지 저장을 위한 납축전지, 니켈카드뮴전지, 니켈수소전지와 차세대 전지로 각광받고 있는 리튬이차전지 등이 포함이 된다. 그 외 수송용 휴대통신기 전력저장용 초고용량 캐패시터와 전력저장용 전기차(하이브리드카), 스마트카드, GPS 등에 사용되는 2차 전지, 분산발전용(가정, 빌딩) 연료전지차(수송용) 연료전지 등으로 전시가 구분이 되어 있어 관람을 하는데 많은 도움이 되었다.
국제전지 산업전 입구 | mds테크놀러지 부스 |
입구를 들어서자 가장 먼저 눈에 뜨인 곳에 mds테크놀로지라는 회사가 위치하고 있었다. IT융합 솔루션 전문업체로 이번 행사에는 자동차 S/W개발을 중점으로 참가를 하였다. 무인주차 시스템에 대한 원리, 자동차 S/W 개발 전문 교육과정, 향후 자동차 S/W의 미래 방향 제시 등에 대해 설명하고 있었다.
두 번째로 Apple 공식 인증 제품을 생산, 판매하는 국내 제조회사 상신 이디피는 아이폰4에서 문제가 되었던 빠른 배터리 소모와 사용 지원이 되지 않았던 지상파 DMB기능을 한꺼번에 만족시킬 수 있는 이지티비(Easy TV)라는 제품을 선보이고 있었다. 보조 배터리와 지상파 DMB 시청이 가능한 이 제품은 아이폰 본체에 별도로 장착할 필요가 없으며, 아이폰 케이스와 비슷한 모양의 일체형 제품으로 지상파 DMB 수신시간은 8시간, 연속 통화시간 5시간, 인터넷 사용시간 5시간(3G), 6시간(WIFI), 통화 대기시간의 경우 250시간 이상을 추가로 지원 가능한 제품으로 아이폰 유저들의 입맛을 당기기에 충분한 매력이 있었다. 또한 이지티비(Easy TV) 외 3G용 보조팩 WAVE와 삼성, LG, 모토로라 등 기타 모바일 기기의 보조 배터리팩 SEDP-540 , SEDP-270 등도 충분히 매력적인 상품이었다.다음으로 차세대 전지인 리튬배터리를 이용한 전기차(하이브리드카)와 친환경 연료 에너지로 만든 전시품이 많았다.
용인송담대학교의 전기차 | 중부대학교의 전기차 |
용인 송담대학교에서는 실제 가솔린 자동차에 본인들이 직접 개발하고 발명한 유도모터시스템을 도입하여, 가솔린 엔진과 엔진제어 유닛으로 돌아가는 일반적인 자동차가 아닌 리튬2차전지를 이용한 차세대 자동차 모형에 대한 설명이 있었다. 또한 현대, 기아자동차 등 자동차 업계에서는 실제 판매가 되고 있는 하이브리드 자동차(아반떼 MD, K5, 쏘나타 등)에 대한 전문적인 설명회 등이 열려 관심이 높아지고 있는 차세대 하이브리드 자동차에 대한 열기를 직·간접적으로 느껴볼 수 있는 자리였다.
모터웰사의 휠체어 락 |
마지막으로 눈길을 끈 제품은 차량용 장애인 보조기기를 전문으로 개발, 판매하고 있는 모터웰(http://www.motorwel.co.kr)이라는 업체의 제품들이었다. 요즘 장애인 복지에 대한 관심이 높아지고 있는 가운데 실제 차량에 이용 가능한 리프트 시트와 회전 시트, 현대 버스와 대우 버스, 한국상용차 등에서 사용되고 있는 휠체어 락, 하체가 불편한 장애인들의 이동 편의를 위한 탈부착형 전기모터 핸드 바이크 등 리튬 이온 전지를 사용한 제품들에 대한 소개가 눈에 띄었다.
올해로 2회째를 맞이한 이번 전시회는 전기차용 전지 시장을 주도하며 향후 가장 잠재력이 큰 시장으로 파악이 되는 에너지 저장용 2차 전지에 대한 많은 기업과 학교들에 대한 개발과 노력을 볼 수 있었던 자리였다. 내년에는 얼마나 더 다양한 제품들과 기술들로 우리 생활에 도움을 줄 수 있는 전시품들이 나올지 벌써부터 기대가 되며 이번 기사를 마친다.