산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

가속도계 및 ESP를 사용한 제스처 인식

구성품 및 소모품

아두이노 101
내장 가속도계를 포함하므로 추가 구성요소나 회로가 필요하지 않습니다.
× 1
Arduino UNO
Arduino 101 대신 Arduino Uno(또는 다른 Arduino)를 사용할 수 있지만 가속도계도 필요합니다.
× 1
Adafruit 아날로그 가속도계:ADXL335
Arduino 101( 가속도계가 내장되어 있음).
× 1
SparkFun 3축 가속도계 브레이크아웃 - ADXL335
Arduino 101( 가속도계가 내장되어 있음).
× 1

이 프로젝트 정보

개요

이 튜토리얼은 ESP 시스템을 사용하여 기본 제스처 인식을 Arduino 프로젝트에 통합하는 방법을 보여줍니다. 예를 들어 포핸드, 백핸드, 서브와 같은 다양한 테니스 동작을 인식할 수 있습니다. 댄스 루틴의 요소; 역도 제스처; 등. 제스처는 가속도계를 사용하여 감지되고 컴퓨터에서 실행되는 ESP 애플리케이션으로 전송됩니다. ESP는 간단한 기계 학습 알고리즘을 사용하여 실시간 가속도계 데이터를 기록된 다양한 제스처의 예와 일치시키고 예제 중 하나와 유사한 제스처를 인식하면 Arduino에 메시지를 다시 보냅니다. 시스템은 개별 제스처의 개별 발생만 인식합니다. 제스처가 수행되는 방식에 대한 정보는 제공하지 않습니다. 그래도 다양한 대화형 응용 프로그램에 사용할 수 있습니다.

ESP 제스처 인식 애플리케이션 다운로드:

<울>
  • Mac:ESP-Gestures-Mac-20161028.zip
  • <울>
  • Windows:ESP-Gestures-Win-20161028.zip. Microsoft의 Visual C++ 재배포 가능 패키지(업데이트 3)가 필요할 수도 있습니다.
  • <울>
  • 우분투:ESP-제스처-Ubuntu-20161028.tar.gz
  • <울>
  • 예시 제스처:ForehandBackhandServe.grt
  • 1단계. 가속도계를 연결합니다.

    가속도계가 내장된 Arduino 101을 사용하는 경우 이 단계를 건너뛸 수 있습니다. 그렇지 않으면 가속도계를 연결해야 합니다. 이렇게 하려면 먼저 수 헤더 핀을 브레이크아웃 보드에 납땜합니다(아직 수행하지 않은 경우). 그런 다음 가속도계를 Arduino에 연결합니다.

    지름길로 가속도계 브레이크아웃을 Arduino Uno(또는 동일한 폼 팩터의 다른 Arduino)의 아날로그 입력 핀에 직접 연결할 수 있습니다. 그런 다음 Arduino 코드에서 적절한 핀을 구성하여 가속도계에 전원과 접지를 제공할 수 있습니다.

    또는 가속도계를 브레드보드에 연결하고 Arduino에 연결하여 전원 및 접지 핀을 Arduino의 5V 및 GND 핀에 연결하고 X, Y 및 Z축 핀을 3개의 아날로그 입력에 연결할 수 있습니다. 아두이노 보드의.

    2단계. Arduino 코드를 업로드합니다.

    아래 Arduino 프로그램 중 하나를 사용하여 가속도계에서 데이터를 읽고 직렬(USB)을 통해 컴퓨터로 보낼 수 있습니다. 먼저 Arduino 프로그램에 지정된 핀이 가속도계를 연결한 방식과 일치하는지 확인합니다(예:xpin은 가속도계의 X축 핀에 연결된 아날로그 입력 핀에 해당함). (가속도계가 내부적으로 연결되어 있는 Arduino 101을 사용하는 경우에는 적용되지 않습니다.) 그런 다음 Arduino 도구 메뉴에서 적절한 보드와 직렬 포트를 선택하고 Arduino 스케치를 업로드하십시오.

    3단계. 직렬 모니터에서 데이터를 확인합니다.

    Arduino 직렬 모니터를 열고 9600 보드로 설정하고 Arduino에서 가속도계 데이터를 가져오는지 확인하십시오. 가속도계를 움직일 때 변경되는 세 개의 숫자 열이 표시되어야 합니다. 이 숫자의 그래프를 보려면 Arduino 직렬 플로터를 사용하십시오.

    계속하기 전에 직렬 모니터와 직렬 플로터를 닫아야 합니다. 그렇지 않으면 ESP 애플리케이션이 Arduino와 통신하는 것을 차단할 수 있습니다.

    4단계. ESP 제스처 인식 애플리케이션을 실행하고 직렬 포트를 선택합니다.

    ESP 제스처 인식 애플리케이션 다운로드:

    <울>
  • Mac:ESP-Gestures-Mac-20160812.zip
  • <울>
  • Windows:ESP-Gestures-Win-20160812.zip
  • 구성 메뉴에서 Arduino 보드에 해당하는 직렬 포트를 선택합니다. ("직렬 포트 선택" 제목을 클릭하여 포트 목록을 엽니다.)

    "원시 데이터" 플롯에서 스트리밍되는 라이브 데이터가 표시되어야 합니다. 플롯의 3개 선은 가속도계의 3개 축에 해당합니다. 빨간색 선은 X축, 녹색은 Y축, 파란색은 Z축에 해당합니다.

    5단계. 보정 샘플을 기록합니다.

    ESP 애플리케이션이 가속도계와 Arduino에서 예상되는 값 범위를 이해할 수 있도록 하려면 보정 샘플을 기록해야 합니다. Z축이 위쪽을 향하도록 하여 가속도계를 평평한 표면에 놓습니다. "업라이트" 보정 샘플을 기록하려면 "1" 키를 1초 정도 누르고 있습니다. 샘플 플롯이 표시되어야 합니다. 그런 다음 가속도계를 거꾸로 뒤집고 평평하게 유지하면서 "2" 키를 눌러 거꾸로 된 보정 샘플을 기록합니다. ESP 시스템은 이 데이터를 사용하여 가속도 0g(X축 및 Y축)에 해당하는 수치와 가속도 1g에 해당하는 수치(Z축)를 파악합니다.

    6단계. 예시 제스처를 기록합니다.

    ESP 애플리케이션을 클릭하거나 대문자 "T"를 입력하여 "교육" 탭으로 이동합니다. 이 탭에서는 ESP 시스템이 인식할 제스처의 예를 기록하거나 로드할 수 있습니다. 최대 9개의 다른 제스처의 예를 녹음할 수 있습니다.

    제스처 예제를 기록하려면 제스처와 연결하려는 레이블에 해당하는 키를 누른 상태에서 제스처를 만듭니다. 예를 들어, 레이블이 1인 제스처를 녹음하려면 제스처를 만드는 동안 키보드의 "1" 키를 누르고 있습니다. (또는 ForehandBackhandServe.grt에서 예제 테니스 제스처를 로드할 수 있습니다.)

    시스템이 제스처를 인식하도록 하려면 나중에 동일한 구성으로 가속도계로 예제 제스처를 기록해야 합니다. 예를 들어, 특정 방향으로 손에 가속도계를 잡거나 특정 방향으로 잡을 물체에 부착할 수 있습니다.

    좋은 샘플은 전체 동작에 해당하는 데이터를 포함하지만 시작이나 끝에서 추가 기준 데이터가 많지 않습니다. 즉, 샘플은 너무 길거나 전혀 누락되지 않은 비교적 평평한 선의 짧은 기간으로 시작하고 끝나야 합니다. 또한 동작이 시작되는 위치와 다른 위치에서 끝나는 경우 않습니다. 가속도계를 시작 위치로 되돌리는 시간을 기록합니다. 예를 들어 오른쪽으로 살짝 밀기 제스처를 기록하는 경우 손이 처음 위치로 돌아가는 시간이 아니라 손이 왼쪽에서 오른쪽으로 움직일 때 제스처의 일부만 기록하고 싶을 것입니다.

    기록하는 각각의 추가 예제는 기계 학습 알고리즘이 제스처를 인식할 때 비교할 수 있는 또 다른 샘플입니다. 즉, 시스템이 제스처의 다양한 변형(예:다른 사람이 만든 다양한 방법)을 인식하도록 하려는 경우 각 변형의 샘플을 기록하는 것이 도움이 될 수 있습니다. 반면에 잘못된 샘플이 있는 경우 시스템을 혼동할 수 있습니다. 더 많은 샘플이 반드시 더 좋은 것은 아닙니다. 일반적으로 각 제스처에 대해 약 5-10개의 샘플을 녹음하는 행운을 누렸습니다. 다시 말하지만 개별 샘플의 품질이 수량보다 더 중요합니다.

    샘플이 마음에 들지 않는 경우(예:잘못된 시간에 키를 누르고 제스처의 일부에 해당하는 데이터를 놓친 경우) 샘플 아래의 "삭제"라는 단어 옆에 있는 상자를 클릭하여 샘플을 삭제할 수 있습니다. . 샘플 플롯을 클릭하고 끌어서 유지하려는 샘플 부분을 선택한 다음 "트림"이라고 표시된 상자를 클릭하여 샘플을 트리밍할 수 있습니다. 샘플 플롯 아래에 있는 화살표 아이콘을 클릭하여 클래스의 다른 샘플 사이를 탐색할 수 있습니다. 잘못된 클래스에 샘플을 녹음한 경우 "re-label" 버튼을 클릭한 다음 샘플을 할당하려는 레이블에 해당하는 키를 눌러 샘플을 이동할 수 있습니다. 제스처의 이름을 지정하려면 "이름 변경" 버튼을 클릭하고 이름을 입력한 다음 Enter 키를 누릅니다.

    7단계. 몸짓을 인식하도록 시스템을 훈련시킵니다.

    몇 가지 예제 제스처를 녹음한 후에는 예제에서 이러한 제스처를 인식하도록 ESP 시스템을 훈련할 수 있습니다. 시스템을 훈련시키려면 키보드의 "t" 키를 누르십시오. 창 하단에 "훈련 성공" 메시지가 표시되어야 합니다. 이제 기록된 예제 중 하나와 유사한 제스처를 만들 때 라이브 센서 데이터 플롯에 이름이 나타나는 것을 볼 수 있습니다.

    시스템을 처음 훈련할 때는 제대로 작동하지 않을 수 있습니다. 예제 제스처를 기록할 때 시스템을 자주 훈련하고 테스트하는 것이 도움이 되므로 시스템이 어떻게 작동하는지 이해할 수 있습니다.

    특히 시스템이 생각하는 제스처를 인식하지 못하는 경우 해당 제스처의 추가 예를 기록할 수 있습니다. 시스템이 제스처를 인식하지 않아야 할 때 인식하는 경우 다른 예제와 다르게 보이거나 비교적 평평한 선이 긴 기간을 포함하는 예제를 삭제하거나 다듬고 싶을 수 있습니다. 시스템을 다시 훈련시키려면 예제를 수정한 후 "t"를 누르십시오.

    8단계. 필요에 따라 시스템 구성을 조정합니다.

    훈련 예제를 수정하는 것이 아마도 시스템이 올바르게 수행하도록 돕는 가장 중요한 수단일 수 있지만 ESP를 사용하면 일부 기본 시스템 매개변수를 구성할 수도 있습니다. 이렇게 하려면 "구성을 열려면 클릭" 레이블을 클릭하십시오. 가변성과 시간 초과라는 두 가지 매개변수가 표시되어야 합니다. 이 매개변수를 변경한 후 "t"를 눌러 시스템을 다시 훈련시켜야 합니다.

    가변성 매개변수는 제스처가 기록된 예 중 하나와 다를 수 있고 여전히 인식될 수 있는 정도를 제어합니다. 숫자가 높을수록 다를 수 있습니다. 시스템에서 제스처가 녹음된 예와 지나치게 유사해야 하는 것 같으면 이 숫자를 늘려볼 수 있습니다. (추가 예제를 녹음해 볼 수도 있습니다.) 시스템이 가짜 제스처를 인식하면 이 숫자를 낮추고 좋지 않은 훈련 예제를 삭제할 수도 있습니다.

    timeout 매개변수는 제스처를 인식한 후 시스템이 새 제스처를 인식하기 전에 기다리는 시간을 제어합니다. 밀리초(1000분의 1초) 단위로 측정됩니다. 시스템에 다른 제스처에 이어 수행된 제스처가 누락된 것 같으면 이 숫자를 낮추십시오. 그러나 이 숫자를 너무 낮게 설정하면 시스템이 단일 제스처를 여러 번 인식할 수 있으므로 주의하십시오. 하나의 제스처만 할 때 시스템이 여러 제스처를 인식하는 것 같다면(예:포핸드만 만들었을 때 포핸드 다음에 백핸드가 표시되는 경우) 이 매개변수를 늘려 보십시오.

    9단계. 제스처 인식을 Arduino 프로젝트에 통합합니다.

    ESP 시스템이 예측을 하면 인식한 제스처 번호와 함께 Arduino에 메시지를 보냅니다(ASCII 텍스트 뒤에 줄 바꿈이 오는 형식, 예:"1\n"). 직렬 포트에서 이러한 예측을 읽으면 Arduino가 다양한 방식으로 제스처에 응답하도록 할 수 있습니다.

    예측은 또한 TCP를 통해 localhost 포트 5204(Arduino와 동일한 형식)에서 실행되는 서버로 전송됩니다. 예를 들어 Processing 또는 다른 소프트웨어로 작성된 게임이 될 수 있습니다. ESP 애플리케이션을 시작하기 전에 TCP 서버가 실행 중인지 확인하십시오.

    작동 방식

    이 특정 ESP 애플리케이션은 동적 시간 왜곡(DTW)이라는 알고리즘을 사용합니다. 이 알고리즘은 개별 판독값을 제거하거나 복제하고, 변동 배열을 생성하고, 기록된 샘플과 얼마나 유사한지 확인하여 라이브 센서 신호를 왜곡합니다. 알고리즘은 라이브 센서 데이터에 가장 가까운 훈련 샘플을 찾습니다. 둘 사이의 차이가 특정 임계값보다 작으면 일치로 간주하고 해당 샘플을 포함하는 훈련 클래스에 해당하는 예측을 출력합니다. 구성 드롭다운 메뉴에서 "가변성" 매개변수를 사용하여 필요한 거리를 조정할 수 있습니다.

    제스처 인식은 ESP 시스템이 적용될 수 있는 하나의 영역일 뿐입니다. ESP는 이름에도 불구하고 실제로 광범위한 실시간 감지 애플리케이션에 적용될 수 있는 광범위한 기계 학습 알고리즘을 포함하는 GRT(Gesture Recognition Toolkit)를 기반으로 구축되었습니다. ESP는 특정 애플리케이션에 대한 코드를 가져와서 해당 머신 러닝 파이프라인 작업을 위한 맞춤형 사용자 인터페이스로 변환합니다. 이러한 응용 프로그램별 프로그램에는 GRT 기계 학습 파이프라인, 센서 입력 사양, 교정 프로세스 정의 및 조정 가능한 매개변수 사양이 포함됩니다. 색상 감지, 가속도계를 사용한 포즈 감지, 간단한 오디오 인식을 위한 ESP 예제를 구축했습니다. 자세한 내용은 ESP GitHub를 참조하세요.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    Arduino ADXL335 코드
    이 코드는 Arduino에 연결된 ADXL335에서 읽습니다. 가속도계의 X축 핀은 Arduino의 A5 핀에, Y축은 A4에, Z축은 A3에 연결되어야 합니다. 판독값은 탭으로 구분되고 줄 바꿈으로 끝나는 ASCII 데이터로 9600 보드의 직렬(USB) 포트를 통해 전송됩니다.
    Arduino 101 가속도계 코드
    Arduino 101의 내장 가속도계에서 가속도계 데이터를 읽습니다. 판독값은 9600의 직렬(USB) 포트를 통해 줄 바꿈으로 종료되고 탭으로 구분된 ASCII 데이터로 전송됩니다.

    제조공정

    1. Python과 함께 Arduino 및 RFID를 사용한 출석 시스템
    2. Arduino, 1Sheeld 및 Android를 사용한 범용 원격 제어
    3. Arduino와 스마트폰을 사용한 DIY 전압계
    4. IOT - ESP8266, Arduino 및 초음파 센서를 사용하는 스마트 항아리
    5. Arduino를 사용한 주파수 및 듀티 사이클 측정
    6. Firmata 및 Xbox One 컨트롤러를 사용하여 Arduino Rover 제어
    7. arduino를 사용한 소나 및 IDE 처리 시 표시
    8. 볼트와 Arduino를 사용하여 LED 밝기 제어
    9. Arduino를 사용한 간단하고 스마트한 로봇 팔
    10. Arduino 및 Processing IDE를 사용하여 나침반을 만드는 방법