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

Windows 10 IoT Core:音声制御ロボット

ストーリー

コンピューターの初期の頃は、コンピューターとのやり取りは、パンチカード、トラックボール、ライトガン、キーボード、さらにはタッチスクリーンを介して行われていました。これらのデバイスはすべて、操作するために何らかの物理的接触が必要です。

10年ごとに、新しいテクノロジーは古いテクノロジーよりも向上しています。ワイヤレス入力デバイスは、清潔で雑然としたデスクを提供するため、人気が高まっています。ソフトウェアとハ​​ードウェアの現在の機能強化により、視覚入力と音声入力という新しい種類の入力が可能になります。

この記事は、Windows 10 IoTCoreで提供される音声認識テクノロジーの学習に役立ちます。トピックの最後に、音声認識アプリケーションを実行するWindows 10 IoTCoreとRaspberryPi2を使用してロボットを作成します。この音声認識アプリケーションを使用すると、ロボットは、音声によるユーザーの操作に基づいて、さまざまな移動タスク(たとえば、前進、方向転換、停止など)を実行できます。

Windows 10 IoT Coreは初めてですか?または初心者?最初にこのリンクを参照してください。

この記事は2016年3月30日に更新されました

音声認識とは何ですか?

1行で、音声認識とは、話し言葉を同等のテキストに翻訳することを意味します。音声認識は、主に2つのコンポーネント、信号処理と音声デコーダに分けることができます。マイクロソフトはすでにそのためのソリューションを開発しているため、その複雑さを気にする必要はありません。音声ライブラリを使用するだけです。

ステップ1

音声認識入門

基本的な考え方から始めましょう:

音声認識文法を作成する

音声認識を開始する前に、ユニバーサルWindowsアプリをプログラムして言語やコマンドを理解する方法を理解する必要があります。そのためには、音声認識文法を作成する必要があります。音声認識文法は、ユニバーサルWindowsアプリ用のSRGS文法を使用して作成できます:

注:他の可能な方法は.Net Frameworkで利用できますが、この記事の執筆時点ではUWPではサポートされていません。どれが:

XML文法から始めます。文法ファイルの作成を開始する前に、ユーザーがアプリケーションをどのように操作するかを想定して定義する必要があります。このプロジェクトのコンテキストでは、ユーザーはロボットにいずれかの方向に移動するように命令し、停止して障害物の検出を開始/解除するように命令します。次のような音声語彙のリストを作成できます。

この語彙では、XML文法を設計する必要があります。 SRGSv1のいくつかの基本的なルールに従う必要があります。

SRGS文法

SRGS文法を作成するには、次のようないくつかの基本的なルールに従う必要があります。

SRGS文法に必要な基本構造を見てきました。次に、その語彙を作成する必要があります。語彙は、ロボットにとって意味のあるコマンドを生成する単語のセットです。

例:「前進」または「後退」の場合、ここで「移動」は「前進」と「後退」の前になります。したがって、原則として、フォワードとリバースの前に最初に来る必要があります。したがって、順方向と逆方向を別のルールに抽出できます。以下の画像を参照してください:

ルートルールとは ?これは、SpeechRecognizerが文法をロードするときにロードする開始ノードまたはルートノードです。オプションです。無視してかまいませんが、プログラムでルートノードを指定する必要があります。

ルート属性とは 文法タグで?ルート属性は、文法をロードするときの音声認識機能の起動ルールを定義します。属性として指定されていない場合は、プログラムで指定する必要があります。

この記事は初心者を対象としているため、複雑なSRGSタグと属性をカバーすることはできません。 SRGSの文法について詳しくは、MSDNとW3Cをご覧ください。

ロボット用のSRGS文法を作成しました。次に、ユニバーサルWindowsアプリに音声認識機能を実装する方法を説明します。

音声認識機能を初期化し、文法をロードする

SpeechRecognizer クラスは Windows.Media.SpeechRecognition で利用できます 名前空間。名前空間をコードファイルにインポートします。初期化する前に、プロジェクトにXML文法ファイルを作成する必要があります。前のセクションで文法ファイルのコンテンツをすでに作成しました。

注:「CompilationResult」が失敗した場合は、マイクインターフェースに問題がある可能性があります。マイクとの接続を確認します。デフォルトのIoTCoreアプリで検出されるかどうかを確認します。

音声認識イベントに登録してハンドラーを作成する

最後のステップでは、音声認識機能を開始し、音声を聞いて解析する準備が整いました。解析が成功すると、「ContinuousRecognitionSession」は「ResultGenerated」という名前のイベントを発生させます。このイベントは、音声に基づいてタスクを実行するために処理できるイベント引数として解析結果を提供します。イベント「StateChanged」によって認識機能の状態をリッスンして、認識機能がリッスンしていることをスピーカーに示すこともできます。

ここで、「MyRecognizerStateChanged」は、状態が変化したときに「MyRecognizer」によって発生する関数です。 「MyRecognizer」が聞き始めたときと聞き止まったときの貴重な状態情報を提供します。聞き取りが停止した後、「MyRecognizer」は提供された文法に対して音声を解析し、成功するとイベント「ResultGenerated」を発生させます。

注:関数「MyRecognizer_StateChanged」および「MyRecognizer_ResultGenerated」を自分で作成する必要はありません。代わりに、VisualStudioはそれらを自動的に作成する方法を提供します。イベントの+ =の右側にあるを2回使用して、VisualStudioで自動的に作成できます。

SpeechRecognizerオブジェクトを初期化した直後にイベントハンドラーを登録することもできます。

ほぼ完了です!

ステップ2

解析された音声を運転する方法は?

前のセクションでは、ユニバーサルWindowsアプリ用にカスタム文法と音声認識機能を構成しました。 Speech Recognizerが音声を正常に解析すると、イベント「ResultGenerated」が発生します。このイベントには、解析された結果が引数として含まれています。話されていることを検出する方法と、話されたスピーチに基づいて何をすべきかを見てみましょう:

ここで、「args」引数は、音声の解析が成功したときに、SpeechRecognizerによってイベントハンドラーに渡されます。 「args.Result.Text」は文字列型です。話し言葉がテキストとして含まれています。条件付きブロックを使用して音声固有のタスクを実行できます。

ロボットを駆動するための完全なコードを表示することはできません。ロボットを駆動するためのさまざまな関数を含む「MotorDriver」という名前の静的クラスを提供しました。このクラスは、ロボットを駆動するためのGpioピンを管理します。完全なソースコードはプロジェクトの最後にあります。 Raspberry Pi2およびWindows10 IoTを初めて使用する場合は、このリンクを参照して開始してください。

ステップ3

デバイス機能の更新

ユニバーサルWindowsアプリをRaspberryPi 2にデプロイする前に、アプリケーションが特定のハードウェアアクセス権で実行されるように適切なデバイス機能を設定する必要があります。このアプリケーションのコンテキストでは、使用する外部デバイス「マイク」が必要です。パッケージマニフェストで「マイク」を有効にするには:


すべてソフトウェア側で行われます。次に、ハードウェアを接続します。ソースコードは記事の最後に記載されています。

音声認識を実装するための主要な部分は実行されており、ここでコードのすべての行を説明することは現実的ではありません。代わりに、ソースコードはよくコメントされています。質問をしてください。

ステップ4

アプリをスタートアップアプリケーションとしてデプロイして登録する

ロボットは、電源がオンになるたびに音声コマンドを認識する必要があります。これを実現するには、アプリをスタートアップアプリとして登録して、Raspberry Pi 2が起動するたびに、起動直後にアプリが起動するようにする必要があります。そのためには、まずアプリをRaspberry Pi 2にデプロイしてから、スタートアップアプリケーションとして登録する必要があります。

デプロイする前に、アプリケーションのパッケージファミリ名を変更することをお勧めします:


パッケージファミリー名を変更した後、アプリケーションをリモートデバイス(Raspberry Pi 2)にデプロイします。




アプリケーションをRaspberryPi 2にデプロイする適切な方法がわからない場合は、このリンクを参照してください。

アプリが正常にデプロイされたら、アプリをスタートアップアプリケーションとして登録する必要があります。 PowerShellまたはWindowsIoT CoreのWeb管理ポータルを使用する2つの方法を使用して、アプリをスタートアップとして登録できます。 2番目の方法を使用します。ウェブブラウザを開いてフォローします:



スタートアップアプリとして登録する際に問題が発生しましたか?この記事を参照してください。

アプリを起動アプリとして正常に登録したら、Raspberry Pi 2を再起動し、起動後にアプリケーションが起動するかどうかを確認します。そうでない場合は、展開から登録までのすべてのステップを確認してください。アプリの起動が成功したので、今度は物事を配線します。

回路図

ハードウェアパーツは、ロボットシャーシ(DCモーター付き)、Raspberry Pi 2(Windows 10 IoT Coreを搭載)、バッテリー、距離センサーなどで構成されています。モーターバッテリー(左側の画像の「バッテリー:9-12VDC」に表示)は、Hブリッジモータードライバーに直接接続されます。 Raspberry Pi2用に別の電源が必要です。 USB PowerBankは、Raspberry Pi 2に十分な電力を供給するのに適しています。USBPowerBankまたはフィルター付き5VDC電源がない場合、Raspberry Piと超音波距離センサーに電力を供給するために別の電圧レギュレーター回路(7805を使用)が必要です。

USB PowerBankまたは5VDCフィルター付き電源がない場合は、モーターバッテリー(上の画像の左側に表示–オレンジ色、バッテリー:9-12VDC)を使用してRaspberry Pi2の電源を入れることができます。構成の概略図は次の場所にあります。記事の終わり(「Schematic:MotorBattery」という名前)

超音波距離センサーを備えた抵抗器はなぜですか?

超音波距離センサーは5Vで動作し、Raspberry Pi2は3.3Vで動作します。センサーのEchoピンをRaspberryPiのピンに直接接続することはできません。これは、5V出力を備えているためです。ラズベリーパイを燃やします。したがって、Raspberry Piに送信する前に、センサーの出力電圧を3.3Vに下げる必要があります。分圧回路を使用することにより、センサーの電圧を下げることができます。したがって、Voutは次のように計算できます。

R1 =1000 ohmR2 =2000 ohmVin =5V(センサーのエコーピン)Vout =5 *(2000 /(1000 + 2000))=3.3V(Raspberry Pi 2へ)

警告:超音波距離センサーのエコーピンをラズベリーパイのGPIOピンに直接接続しないでください。ラズベリーパイが焼ける可能性があります。代わりに、ロジックレベルコンバータまたは適切な分圧器を使用してください。

最終組み立て




既知の問題

音声認識が機能しない(ビルド10586)

Windows IoTビルド10586をインストールしている場合、音声認識と合成はどのIoTデバイス(RPi2、MinnowBoard MAX、Dragonboard 410c)でも機能しません。

解決策: 現時点では、有効な解決策はありません。 WindowsIoTチームが次のビルドでこのバグを解決することを願っています。それでも、音声認識を操作したい場合は、古いバージョン10240に戻すと、魅力のように機能します。

マイクの問題

音声認識には、間違いなく高品質のマイクが必要です。低品質のマイクを近くに置いても使用できますが、マイクが1〜2メートルほど離れていると、正確に認識されません。

解決策: (オプション1):高品質のマイクを購入します。高品質のマイクを使用しても、正しく認識されない場合があります。そのような場合、大きな声が必要です。 (オプション2):ワイヤレスマイクは素晴らしいでしょう。遠方からでも外部ノイズを気にせずにロボットを制御できます。この動画を参照して、購入することも、自分で作成することもできます。

認識機能の処理遅延

認識機能が音声を処理するのに時間がかかることは明らかです。問題や問題ではありませんが、リアルタイムシステムで問題が発生する可能性があります。

音声コマンドに従う高速ロボット兼車があるとします。 600〜2000ミリ秒後に車が音声コマンドを実行するとします(処理の遅延のため)。したがって、停止するように命令すると、車はしばらくして信号を解析し、壊滅的なイベントにつながる可能性があります。

解決策: 現在(この記事が書かれたとき)、適切な解決策はありません。将来的には解決されることを願っています。 🙂

発音の違い

異なる地域の人々は、1つの単語に対して異なる発音を使用します。話し言葉の発音がプログラムされているものと異なる場合、音声認識機能は音声を解析できません。

解決策: SRGS XML文法ファイルで言語と地域を指定して、特定の地域の発音を解析できます。

たとえば、English(UK)を解析する場合、文法タグxml:lang =” en-GB”の属性を設定する必要があります。ここで、英国のISO国コードはGBです。したがって、「en-GB」は、英語(UK)の発音に基づいて音声を解析するように音声認識機能に指示します。別の例として、カナダフランス語の場合は、「fr-CA」を使用します。

環境騒音

1つ以上の外部エンティティによって引き起こされる不要な音や振動は、処理の精度に影響します。正しく話されていても、認識機能が音声を理解できない場合があります。

解決策: このようなノイズを解決または排除できない場合があります。現在の技術レベルでは、このような技術をノイズのない領域でのみ使用することを期待できます。もう1つの可能な解決策は、ノイズを低減できるインテリジェントマイク(ノイズキャンセルマイクと呼ばれます)を使用することです。

USBマイク/ USBサウンドカードが認識しない

ビルド10531のリリースにより、Windows IoTCoreは汎用オーディオデバイスをサポートします。ほとんどのUSBマイクまたはUSBサウンドカードにはUSB汎用ドライバーが必要です。デバイスが汎用ドライバーを使用している場合、それは機能します。

RPi2(Amazin.in)で正常に動作します 解決策: 別のUSBマイクまたはUSBサウンドカードを試してください。

私の場合、USBサウンドカードを購入しました。それは完璧に機能しました。サウンドカードのマイクジャックにマイクを取り付けました。 USBサウンドカードはAmazon.comまたは他のオンラインショッピングウェブサイトから購入できます。インド人はAmazon.inからUSBサウンドカードを購入できます。

将来の機能強化

新しいアイデアに関しては制限はありません。この記事では、音声認識の基本的な実装について説明します。さらに、解析結果を視覚的に示すことでプロジェクトを拡張できます。たとえば、音声コマンドの解析が成功した後、緑色のLEDを1秒間オンにします。それ以外の場合は、赤色のLEDを1秒間オンにします。さらに、誤ったコマンドを防ぐために、ロボットをプログラムして、いつ聞くか、いつ寝るかを指示することもできます。

気づきましたか?

プロジェクトのアニメーションタイトル画像を注意深く見た人は、私がそこで示したものをカバーしていないことを知っているでしょう。それを注意深く観察し、その隠された機能をロボットに実装してみてください。

幸運🙂

出典: 音声制御ロボット

製造プロセス

  1. Windows 10 IoT Core –心拍数パルスの読み取り
  2. Windows IoT:顔認識ドア
  3. モーションコントロールされたAWSIoTボタン
  4. Raspberry Pi2上のWindows10 IoT Core –Adafruitセンサーデータ
  5. Windows 10 IoTCoreおよびSHT15
  6. Windows 10 IoT Core for Raspberry Pi3モデルB +
  7. Bluetoothで制御されるRaspberryPi Robot
  8. RaspberryPiを使用したジェスチャー制御ロボット
  9. ANDROID SMARTPHONEから制御されるRASPBERRYPI WIFI ROBOT
  10. GoPiGo v2 with Windows IoT
  11. RaspberryPiを使用したWifi制御ロボット