工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

加速度計とESPを使用したジェスチャ認識

コンポーネントと消耗品

>
Arduino 101
加速度計が組み込まれているため、追加のコンポーネントや回路は必要ありません。
× 1
Arduino UNO
Arduino101の代わりにArduinoUno(または他のArduino)を使用できますが、加速度計も必要です。
× 1
Adafruitアナログ加速度計:ADXL335
Arduino 101以外のArduinoを使用している場合は、これ(または同等のSparkFun)を使用してください(加速度計が組み込まれています。
× 1
SparkFun3軸加速度計ブレイクアウト-ADXL335
Arduino 101以外のArduinoを使用している場合は、これ(または同等のAdafruit)を使用してください(加速度計が組み込まれています。
× 1

このプロジェクトについて

概要

このチュートリアルでは、ESPシステムを使用して基本的なジェスチャ認識をArduinoプロジェクトに組み込む方法を示します。たとえば、フォアハンド、バックハンド、サーブなど、さまざまなテニスのジェスチャーを認識する場合があります。ダンスルーチンの要素;重量挙げのジェスチャー;ジェスチャは加速度計を使用して検出され、コンピュータで実行されているESPアプリケーションに送信されます。 ESPは、単純な機械学習アルゴリズムを使用して、ライブ加速度計データをさまざまなジェスチャの記録された例と照合し、例の1つと同様のジェスチャを認識すると、Arduinoにメッセージを送り返します。システムは、個別のジェスチャの個々の発生のみを認識します。ジェスチャがどのように実行されるかについての情報は提供しません。それでも、さまざまなインタラクティブアプリケーションに使用できます。

ESPジェスチャ認識アプリケーションをダウンロードします:

  • Mac:ESP-Gestures-Mac-20161028.zip
  • Windows:ESP-Gestures-Win-20161028.zip。 MicrosoftのVisualC ++再頒布可能パッケージ(Update 3)も必要になる場合があります。
  • Ubuntu:ESP-ジェスチャー-Ubuntu-20161028.tar.gz
  • ジェスチャーの例:ForehandBackhandServe.grt

手順1.加速度計を接続します。

加速度計が組み込まれているArduino101を使用している場合は、この手順をスキップできます。それ以外の場合は、加速度計を接続する必要があります。これを行うには、まだ行っていない場合は、最初にオスのヘッダーピンをブレイクアウトボードにはんだ付けします。次に、加速度計をArduinoに接続します。

ショートカットとして、加速度計のブレークアウトをArduino Uno(または同じフォームファクタの他のArduino)のアナログ入力ピンに直接接続できます。次に、Arduinoコードで、加速度計に電力とアースを提供するように適切なピンを構成できます。

<図>

または、加速度計をブレッドボードに接続してArduinoに配線し、電源ピンとアースピンをArduinoの5VピンとGNDピンに接続し、X、Y、Z軸ピンを3つのアナログ入力に接続することもできます。 Arduinoボードの。

ステップ2.Arduinoコードをアップロードします。

以下のArduinoプログラムのいずれかを使用して、加速度計からデータを読み取り、シリアル(USB)経由でコンピューターに送信できます。まず、Arduinoプログラムで指定されたピンが、加速度計の配線方法と一致していることを確認します(たとえば、xpinは、加速度計のX軸ピンに接続されているアナログ入力ピンに対応します)。 (これは、加速度計が内部で接続されているArduino 101を使用している場合には適用されません。)次に、Arduinoツールメニューから適切なボードとシリアルポートを選択し、Arduinoスケッチをアップロードします。

手順3.シリアルモニターでデータを確認します。

Arduinoシリアルモニターを開き、9600ボーに設定して、Arduinoから加速度計データを取得していることを確認します。加速度計を動かすと変化する3列の数字が表示されます。 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アプリケーションの[トレーニング]タブに進みます。このタブでは、ESPシステムに認識させたいジェスチャの例を記録またはロードできます。最大9つの異なるジェスチャの例を記録できます。

<図>

ジェスチャの例を記録するには、ジェスチャに関連付けるラベルに対応するキーを押しながらジェスチャを作成します。たとえば、ラベル1のジェスチャを記録するには、ジェスチャを行うときにキーボードの「1」キーを押したままにします。 (または、ForehandBackhandServe.grtでテニスジェスチャーの例を読み込むこともできます。)

システムにジェスチャを認識させたい場合は、後で行うのと同じ構成で、加速度計を使用してジェスチャの例を必ず記録してください。たとえば、加速度計を特定の向きで手に持ったり、特定の向きで持っているオブジェクトに取り付けたりすることができます。

優れたサンプルには、ジェスチャー全体に対応するデータが含まれていますが、開始時または終了時に追加のベースラインデータはあまりありません。つまり、サンプルは、長すぎたり、完全に欠落したりしていない、比較的平坦な短い期間で開始および終了する必要があります。また、ジェスチャーが開始時とは別の場所で終了する場合は、 しないように注意してください。 加速度計を開始位置に戻す時間を記録します。たとえば、右にスワイプするジェスチャを記録する場合、手が最初の位置に戻る時間ではなく、手が左から右に移動するときのジェスチャの一部のみを記録する必要があります。

> <図>

記録する追加の各例は、機械学習アルゴリズムがジェスチャを認識するときに照合できる別のサンプルです。つまり、システムにジェスチャのさまざまなバリエーション(たとえば、さまざまな人が行うさまざまな方法)を認識させたい場合は、各バリエーションのサンプルを記録すると役立つ場合があります。一方、悪いサンプルがある場合、システムを混乱させる可能性があります。サンプルが多いほど良いとは限りません。一般的に、各ジェスチャーで約5〜10のサンプルを記録することができましたが、ここでも、個々のサンプルの質が量よりも重要です。

<図>

サンプルが気に入らない場合(たとえば、間違ったタイミングでキーを押して、ジェスチャの一部に対応するデータを見逃したため)、サンプルの下にある「削除」という単語の横にあるボックスをクリックして、サンプルを削除できます。 。サンプルのプロットをクリックしてドラッグし、保持するサンプルの部分を選択してから、[トリム]というラベルの付いたボックスをクリックすると、サンプルをトリムできます。サンプルのプロットの下にある矢印アイコンをクリックすると、クラス内のさまざまなサンプル間を移動できます。間違ったクラスでサンプルを録音した場合は、「再ラベル付け」ボタンをクリックしてから、サンプルを割り当てるラベルに対応するキーを押すことで、サンプルを移動できます。ジェスチャに名前を付けるには、[名前の変更]ボタンをクリックし、名前を入力してEnterキーを押します。

<図>

ステップ7.ジェスチャーを認識するようにシステムをトレーニングします。

いくつかのジェスチャの例を記録したら、ESPシステムをトレーニングして、例からそれらのジェスチャを認識することができます。キーボードの「t」キーを押して、システムをトレーニングします。ウィンドウの下部に「トレーニングに成功しました」というメッセージが表示されます。これで、記録した例の1つに似たジェスチャを行うと、ライブセンサーデータのプロットにその名前が表示されるはずです。

<図>

初めてトレーニングするときは、システムがうまく機能しない可能性があります。ジェスチャの例を記録するときに、システムのトレーニングとテストを頻繁に行うと、システムの動作を理解できるので便利です。

特に、システムが必要と思われるジェスチャを認識しない場合は、そのジェスチャの追加の例を記録することをお勧めします。システムがジェスチャを認識すべきでないときに認識している場合は、他の例とは異なって見える例や、比較的平坦な線が長期間含まれている例を削除またはトリミングすることをお勧めします。システムを再トレーニングするために例を変更した後は、必ず「t」を押してください。

ステップ8.必要に応じてシステム構成を調整します。

トレーニング例を変更することは、システムが正しく実行されるようにするためのおそらく最も重要な手段ですが、ESPを使用すると、いくつかの基本的なシステムパラメーターを構成することもできます。これを行うには、「クリックして構成を開く」ラベルをクリックします。変動性とタイムアウトの2つのパラメーターが表示されます。これらのパラメータを変更した後、「t」を押してシステムを再トレーニングする必要があることに注意してください。

変動性パラメーターは、ジェスチャが記録された例の1つとどの程度異なるかを制御し、それでも認識されます。数値が大きいほど、異なる可能性があります。システムでジェスチャが記録された例と過度に類似している必要があると思われる場合は、この数を増やしてみてください。 (追加の例を記録してみることもできます。)システムが偽のジェスチャを認識した場合は、この数を減らしてみてください。ただし、見栄えの悪いトレーニング例を削除してみることもできます。

タイムアウトパラメータは、ジェスチャを認識した後、システムが新しいジェスチャを認識するまで待機する時間を制御します。ミリ秒(1000分の1秒)で測定されます。システムが別のジェスチャに連続して行われたジェスチャが欠落していると思われる場合は、この数を減らしてみてください。ただし、この数値を低くしすぎると、システムが1つのジェスチャを複数回認識する可能性があるため注意してください。 1つのジェスチャのみを実行したときにシステムが複数のジェスチャを認識しているように見える場合(たとえば、フォアハンドのみを実行したときにフォアハンドの後にバックハンドが表示される場合)、このパラメータを増やしてみてください。

ステップ9.ジェスチャ認識をArduinoプロジェクトに組み込みます。

ESPシステムが予測を行うと、認識したジェスチャの番号を含むメッセージがArduinoに送信されます(ASCIIテキストの後に改行が続きます(例:「1 \ n」))。シリアルポートでこれらの予測を読み取ることにより、Arduinoにさまざまな方法でジェスチャーに応答させることができます。

予測は、TCPを介してローカルホストポート5204で実行されているサーバーにも送信されます(Arduinoと同じ形式で)。たとえば、これはProcessingまたは他のソフトウェアで作成されたゲームである可能性があります。 ESPアプリケーションを開始する前に、TCPサーバーが実行されていることを確認してください。

仕組み

この特定のESPアプリケーションは、動的タイムワーピング(またはDTW)と呼ばれるアルゴリズムを使用します。このアルゴリズムは、個々の読み取り値を削除または複製し、バリエーションの配列を生成し、それらが記録されたサンプルとどの程度類似しているかを確認することにより、ライブセンサー信号をワープします。アルゴリズムは、ライブセンサーデータに最も近いトレーニングサンプルを探します。 2つの差が特定のしきい値未満の場合、一致と見なされ、そのサンプルを含むトレーニングクラスに対応する予測が出力されます。構成ドロップダウンメニューの「変動」パラメーターを使用して、必要な距離を調整できます。

ジェスチャ認識は、ESPシステムを適用できる唯一のドメインです。 ESPは、ジェスチャ認識ツールキット(GRT)の上に構築されています。このツールキットは、その名前にもかかわらず、実際には、さまざまなリアルタイムセンシングアプリケーションに適用できるさまざまな機械学習アルゴリズムを含んでいます。 ESPは特定のアプリケーションのコードを取得し、それをその機械学習パイプラインを操作するためのカスタマイズされたユーザーインターフェイスに変換します。これらのアプリケーション固有のプログラムには、GRT機械学習パイプライン、センサー入力の仕様、キャリブレーションプロセスの定義、および調整可能なパラメーターの仕様が含まれます。カラーセンシング、加速度計を使用したポーズ検出、および単純な音声認識のためのESPの例を作成しました。詳細については、ESPGitHubを参照してください。

コード

ArduinoADXL335コード
このコードは、Arduinoに接続されたADXL335から読み取ります。加速度計のX軸ピンはArduinoのピンA5に接続され、Y軸はA4に、Z軸はA3に接続されている必要があります。読み取り値は、タブで区切られた改行で終了するASCIIデータとして、9600ボーのシリアル(USB)ポートを介して送信されます。
Arduino101加速度計コード
Arduino 101の内蔵加速度計から加速度計データを読み取ります。読み取り値は、改行で終了し、タブで区切られたASCIIデータとして9600のシリアル(USB)ポートを介して送信されます。

製造プロセス

  1. PythonでArduinoとRFIDを使用した出席システム
  2. Arduino、1Sheeld、Androidを使用したユニバーサルリモコン
  3. Arduinoとスマートフォンを使用したDIY電圧計
  4. IOT-ESP8266、Arduino、超音波センサーを使用したスマートジャー
  5. Arduinoを使用した周波数とデューティサイクルの測定
  6. FirmataとXboxOneControllerを使用してArduinoRoverを制御する
  7. arduinoを使用したソナーと処理IDEでの表示
  8. BoltとArduinoを使用したLEDの明るさの制御
  9. Arduinoを使用したシンプルでスマートなロボットアーム
  10. Arduinoによる音声認識と合成
  11. ArduinoとProcessingIDEを使用してコンパスを作成する方法