So-net無料ブログ作成

クラウドを利用したVoice Controlled Carの製作 GR-SAKURAとスマートアナログでやるよ [RX&SH&H8]

voice_ctrl_car_03.png


voice_ctrl_car_04.png
CQ出版のInterface誌2012年11月号に掲載されているAndroidアプリケーションの
Wi-Fi Text Playを利用して音声でコントロールする車の製作です。
この工作、Wi-Fi Text PlayとXBee Wi-Fiを用意すればできたも同然で、相変わらず
他力本願ですいません。



この作品は、複数の要素技術を組み合わせて作成しています。使った要素技術は以下
の通りです。

1.クラウドを使って複雑な処理を簡単に

2.アナログセンシング

3.マルチタスクシステムを使って柔軟なシステムの構成

※1でWi-Fi Text Playを利用します。Wi-Fi Text PlayはGoogle Playから入手で
きます。Wi-Fi Text Playの詳細はInterface誌2012年11月号を読んで下さい。

1.クラウドを使って複雑な処理を簡単に
Wi-Fi Text Playに喋った言葉がクラウドサーバーで処理されて文字列(ローマ字及び数字)
としてAndroid端末に届き、Android端末からこのリモコンカーに無線LANを通して届く
物です。

リモコンカーの頭脳であるGR-SAKURA上で届いた文字列の解釈を行い、その内容によっ
て車体を転回させたり、前進、後退、停止をすると言ったごく単純な作品です。

まあ難しい事はWi-Fi Text Playとクラウドサーバーがみんな処理してくれますから、
GR-SAKURA側は比較的簡単な処理で済みます。
Wi-Fi Text PlayとXBee Wi-Fiさえあれば、誰でも音声リモコンが即!作れます。

システムの構成は以下の様になります。
voice_ctrl_car_01.png


Android端末に喋った音声はGoogleのサーバーに送られ、日本語に変換されて返ってきます。

変換された日本語は今度はYahooのサーバーに送られ、ローマ字と数字に変換されて来ます。

本来はXBee Wi-Fiに直接接続された音声合成ICに音声データパターンを送る為のアプリケーション
なので、ローマ字や数字以外に若干の制御コードが入って来ますが、単に文字列の比較を
行うだけなのでここからの文字列処理はとても簡単です。

Android端末とVoice Controled Car間は無線LANで通信します。図では直接赤線を引いて
いますが、実際は直接この間で通信はできないので、必ずアクセスポイントか、
無線LANルーターを経由する事となります。

2.アナログセンシング
クラウドサーバーへ2往復もしている関係上、音声を入力しても実際にGR-SAKURAに届くまで
2~3秒程度掛かっています。人が車両の状況を見ながら進行停止や回転停止の指示を行
っても、オーバーランしてしまったり、クルクルその場で回ってしまいます。
その為、移動距離や回転角度等はVoice Controled Car自身が判断する必要があります。

ただし移動距離に関してはスマートアナログシールドにはセンサーが搭載されていないの
で今のところ計り様がありません。適当な時間でやっています。
回転角度は前回の書込みで電子分度器を作りましたので、これを実装してみます。

http://hamayan.blog.so-net.ne.jp/2012-12-24-1

3.マルチタスクシステムを使って柔軟なシステムの構成

Voice Controled Carの構成を以下に示します。
voice_ctrl_car_02.png


(1)SAシールド(スマートアナログシールド)はGYROを搭載しているので、角度の検出に
利用します。

(2)XBee Wi-FiはAndroid端末から無線LANで音声制御を受ける為に用意します。

(3)BluetoothモジュールはPCと接続し、現在の状況をモニターしたり、PC側からの直接
制御を受けます。

(4)Voice Controled Carは履帯で進行したり方向転換を行いますので、2つのモーター
を制御する必要があります。

(5)電源にはモバイルバッテリーパックを利用しました。

主なソフトウエアの構成は以下の様になっています。
3つのタスクを立て、それぞれが独立に動いています。それそれのタスク間で依存性が低い
為、例えばどれかのタスクが何かの待ち状態になったとしても、それ以外のタスクの動作は
影響を受けず、今まで通り動きます。
voice_ctrl_car_05.png


それぞれのタスクの役割は、

(1)SAシールドからGYROの出力を受け取っているタスクは、一定周期毎(10ms)のA/D変換
結果を受け取り、アンプのゲインやGYROの係数を元に各サンプリング毎の出力値を時
間積分しています。
この値は大域変数に保存され、他のタスクから利用されます。

(2)Android端末から無線LAN経由で送られて来る制御文字列を受けるタスクは、アルファ
ベットと数字で表記された文字列を解釈し、数字であれば車体を転回させ、前進、後退、
停止の文字列であればそれに応じた動作を行います。

但し、必ずしも期待された文字列ばかりが送られて来る訳では無く、文字にブレが生
じていますので、簡単なフィルター処理を行っています。

車体の転回は、(1)のタスクが更新を行っている角度の積分値と、上位から受け取った
角度の値を比較し、その値に一致するまで車体を回転させ続けます。

前進や後退の場合は、10秒間モーターをその方向に動かし続けます。
停止の場合は、現在前進または後退中であればその動作を止めさせます。

(3)BluetoothでPCと通信しているタスクは、車体の動作モニター(設定角度と積分値の表示)
や、PC側からのコマンドに拠る車体の制御を行っています。
この処理自体はデバック以外の状況で必ずしも必要とされない処理であり、Bluetoothで
回線が開かれるまでは有意な動作を何もしません。

実際に組み立ててみて判った事

(1)回転の中心とGYROの実装位置の問題なのか、左回転と右回転で補正値に差が有り、時間と
ゲイン、GYROの出力の計算でスパッと角度を算出できなかった。
バッテリーの重量が大きいので設置位置で車体の回転する中心がずれてしまう。

その為、実際に動かしてBluetoothでモニターしながら補正値のトリミングを行っている。

しかし必ずしもうまい方法とは言えず、今は90度の回転で精度が最大となるような値とな
っている。

(2)モーターを動かすと車体が回転していないにも係わらずGYROの出力が乗ってしまう。
原因は振動の可能性も有るし、電気的なノイズの可能性も有る、、、気がする。
モーター側とはシールド処理が必要になるのかもしれない。

以下のリンク先にサンプルのプロジェクトを置いて置きます。

https://dl.dropbox.com/u/60463387/grsakura/voice_controled_car.zip

ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

  • 作者: 濱原 和明
  • 出版社/メーカー: オーム社
  • 発売日: 2005/04/25
  • メディア: 単行本



nice!(1)  コメント(0)  トラックバック(0) 

nice! 1

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。