이 튜토리얼은 ESP 시스템을 이용해 아두이노 프로젝트에 기본적인 제스처 인식을 추가하는 방법을 보여줍니다. 예를 들어 테니스 포핸드·백핸드·서브, 댄스 동작, 역도 자세 등을 인식할 수 있습니다. 가속도계로 제스처를 감지해 PC에서 실행 중인 ESP 애플리케이션으로 전송하면, ESP가 간단한 머신러닝 알고리즘(DTW)으로 실시간 데이터를 기록된 예시 제스처와 매칭해 유사한 제스처를 인식하면 아두이노로 메시지를 보냅니다. 개별 이산 제스처의 발생만 인식하며 수행 방식에 대한 정보는 제공하지 않지만, 다양한 인터랙티브 응용에 활용 가능합니다.
ESP 제스처 인식 애플리케이션 다운로드
Mac: ESP-Gestures-Mac-20161028.zip
Windows: ESP-Gestures-Win-20161028.zip (Visual C++ Redistributable Update 3 필요할 수 있음)
Ubuntu: ESP-Gestures-Ubuntu-20161028.tar.gz
예시 제스처 파일: ForehandBackhandServe.grt
1단계: 가속도계 연결
아두이노 101 사용 시 내장 가속도계가 있으므로 이 단계 생략 가능. 그렇지 않으면 브레이크아웃 보드에 핀 헤더 납땜 후 아두이노에 연결합니다. 아두이노 우노의 아날로그 입력 핀에 직접 꽂아 전원/그라운드를 핀으로 공급하는 방식이 간편합니다.
또는 브레드보드에 꽂아 5V/GND와 X/Y/Z축을 아날로그 입력 3개에 연결하세요.
2단계: 아두이노 코드 업로드
아래 두 가지 코드 중 배선에 맞는 것을 사용하세요. 핀 번호가 실제 배선과 일치하는지 확인 후 보드/포트 선택해 업로드합니다.
3단계: 시리얼 모니터로 데이터 확인
시리얼 모니터(9600 보드레이트) 또는 시리얼 플로터로 가속도계 데이터(3축)가 움직임에 따라 변하는지 확인하세요. 확인 후 모니터/플로터는 꼭 닫으세요(ESP 앱이 포트 접근 못 함).
4단계: ESP 앱 실행 및 시리얼 포트 선택
ESP 앱을 실행하고 설정 메뉴에서 아두이노 보드에 해당하는 시리얼 포트를 선택합니다. "Raw Data" 플롯에 실시간 3축 데이터(빨강=X, 초록=Y, 파랑=Z)가 스트리밍됩니다.
5단계: 캘리브레이션 샘플 기록
가속도계를 평평한 표면에 놓고 Z축이 위를 향하게 한 뒤 '1' 키를 1초간 눌러 "Upright" 샘플 기록. 뒤집어서 '2' 키로 "Upside down" 샘플 기록. 이를 통해 0g(X/Y축)와 1g(Z축)에 해당하는 수치 범위를 시스템이 학습합니다.
6단계: 예시 제스처 기록
"Training" 탭으로 이동(대문자 'T' 키). 최대 9가지 제스처의 예시를 기록할 수 있습니다. 원하는 라벨 키(1~9)를 누른 상태에서 제스처를 수행하면 기록됩니다. (예시 테니스 제스처 파일 로드도 가능)
좋은 샘플: 제스처 전체가 담기되 시작/끝에 너무 길거나 없는 베이스라인 구간이 없도록. 제스처가 제자리로 돌아오는 동작은 기록하지 마세요(예: 오른쪽으로 스와이프면 왼쪽으로 돌아오는 건 제외).
제스처당 5~10개 샘플 권장. 품질이 양보다 중요합니다. 나쁜 샘플은 삭제(delete)하거나 다듬기(trim) 가능. 라벨 변경(re-label), 이름 변경(rename)도 지원.
7단계: 시스템 학습
't' 키를 눌러 학습시키면 "training successful" 메시지 표시. 이후 기록된 예시와 유사한 제스처를 하면 실시간 플롯에 제스처 이름이 뜹니다.
처음부터 잘 안 될 수 있음. 기록·학습·테스트를 반복하며 조정하세요. 인식이 안 되면 예시 추가, 오인식이 되면 나쁜 예시 삭제/다듬기 후 재학습('t').
8단계: 설정 파라미터 튜닝
"click to open configuration" 클릭 → variability(변이 허용도), timeout(재인식 대기시간) 조정 가능. 변경 후 't'로 재학습 필요.
Variability: 값이 클수록 기록된 예시와 달라도 인식. 너무 엄격하면 증가, 오인식 많으면 감소.
Timeout: 인식 후 다음 인식까지 대기시간(ms). 연속 제스처 놓치면 감소, 한 제스처를 여러 번 인식하면 증가.
9단계: 아두이노 프로젝트에 제스처 인식 통합
ESP가 예측하면 아두이노로 제스처 번호(ASCII 텍스트 + 개행, 예: "1\n") 전송. 시리얼 포트에서 읽어 아두이노가 반응하게 만드세요. TCP로 로컬호스트 5204 포트에도 동일 포맷 전송(Processing 게임 등 연동 가능).
작동 원리: DTW(Dynamic Time Warping)
실시간 센서 신호를 늘리거나 줄여 기록된 샘플과 유사도를 비교. 가장 가까운 학습 샘플과의 거리가 임계값(variability) 미만이면 매칭으로 판정. GRT(Gesture Recognition Toolkit) 기반으로 제스처 인식 외 컬러 감지, 자세 추정, 오디오 인식 등에도 적용 가능. ESP GitHub 참고.