37
ADK を使って 音声コマンドで操作する 戦車を作ってみた 13 Android 勉強会 in 札幌 at 2012/6/2(sat) 大路 裕介 ( まいむぞう ) 1262日土曜日

Adkを使って音声コマンドで操作する戦車を作ってみた

Embed Size (px)

DESCRIPTION

第13回Android勉強会in札幌にて「ADKを使って音声コマンドで操作する戦車を作ってみた」として講演した時の資料です

Citation preview

Page 1: Adkを使って音声コマンドで操作する戦車を作ってみた

ADKを使って音声コマンドで操作する戦車を作ってみた

第13回Android勉強会in札幌

at 2012/6/2(sat)

大路 裕介(まいむぞう)12年6月2日土曜日

Page 2: Adkを使って音声コマンドで操作する戦車を作ってみた

あばうと・みー札幌のWeb/スマートフォン系フリーランサーです。最近はAndroid専業になってます。

元々Web系プログラマーです。単独のサーバからAmazon EC2やGAEを使ったクラウドまで、サーバ構築からシステム開発まで一人でやってます。

最近はOpenCVやKinectや電子工作やってます。

日本Androidの会の北海道支部長をしています。

12年6月2日土曜日

Page 3: Adkを使って音声コマンドで操作する戦車を作ってみた

あばうと・みー

ラジコンは好きです。

元々電子工作には興味がありました。

でも最後にハンダゴテを触ったのは、高校の工作の時間だった気がします。

電気の小難しい理論はわかりません。直列繋ぎと並列繋ぎはわかります。(えっへん)

一方、電子工作に関しては...

12年6月2日土曜日

Page 4: Adkを使って音声コマンドで操作する戦車を作ってみた

こんな僕でも、音声コマンドで動く戦車を作ることができたので、

その過程をお伝えしようと思います

12年6月2日土曜日

Page 5: Adkを使って音声コマンドで操作する戦車を作ってみた

まずはどんなもんか動かしてみましょう

12年6月2日土曜日

Page 6: Adkを使って音声コマンドで操作する戦車を作ってみた

全体構成

ADK Android

Android

直流コード USB

WiFi (XMPP)

コイツしゃべる

コイツ日本語わかる

コイツ動く

12年6月2日土曜日

Page 7: Adkを使って音声コマンドで操作する戦車を作ってみた

何を作ろう?せっかくなので、動くものがいい

ラジコンを改造しよう!

どんなラジコンを改造しよう?

ヘリコプター → × 操縦が繊細過ぎる

車 → × 速度が早すぎてハンドル操作が難しそう

戦車 → 鈍いし、キャタピラなので安定してる

◎ 操作がラフでもOK12年6月2日土曜日

Page 8: Adkを使って音声コマンドで操作する戦車を作ってみた

戦車を買うヤフオクでジャンク扱いのものを買いました

基盤は死んでてもどうせ捨てるので

挫ける可能性を考慮し最初は安いやつを狙う

12年6月2日土曜日

Page 9: Adkを使って音声コマンドで操作する戦車を作ってみた

まずは戦車を動かしてみるマジにゴミだと困るので、一応動くことを確認多少壊れてるけど一応ひと通り動くようだ

12年6月2日土曜日

Page 10: Adkを使って音声コマンドで操作する戦車を作ってみた

戦車ラジコンの構造基本的に、左右のキャタピラそれぞれにモーターが付いている両方回せば前進、右だけ回せば左旋回、両方逆回転すればバック

12年6月2日土曜日

Page 11: Adkを使って音声コマンドで操作する戦車を作ってみた

立止マッテ考エルこのプロポ、左右ともに上下しかついて無いよねでも、戦車にはBB弾を発射する機能ついてるよね

12年6月2日土曜日

Page 12: Adkを使って音声コマンドで操作する戦車を作ってみた

はい、変なの引いたー( ´_ゝ`)

12年6月2日土曜日

Page 13: Adkを使って音声コマンドで操作する戦車を作ってみた

戦車をバラすそうは言っても買ってしまったのでしょうが無いバラして構造を確かめ、テスターを使って電圧を計測する

戦車が届いて5分後の状況

12年6月2日土曜日

Page 14: Adkを使って音声コマンドで操作する戦車を作ってみた

どうやら、右キャタピラを逆回転させると、

BB弾を発射するらしい。変なの。

(そういうギヤボックスになってる)

12年6月2日土曜日

Page 15: Adkを使って音声コマンドで操作する戦車を作ってみた

調査結果

搭載しているバッテリーはマンガン電池単三4本直列(1.5V×4本=6.0V)モーター2つだけで動いているモーターはそれぞれ6.0Vで動いているらしい左キャタピラは前後に動くが、右キャタピラはバックさせるとBB弾を発射するモーターを逆回転させるには、+と-を入れ替えれば良い(一般的にそういう構造)

12年6月2日土曜日

Page 16: Adkを使って音声コマンドで操作する戦車を作ってみた

基本方針を考える

Arduinoには5V電源が必要、かつモーターを回すと電圧が下がり5Vをキープできないので、別途バッテリーを積む必要がある

とりあえず最初はブレッドボードで回路を組んでみて、動いてから細部を考える(というか、最初から細部まで想像できない)

12年6月2日土曜日

Page 17: Adkを使って音声コマンドで操作する戦車を作ってみた

モーターを逆回転させる方法ソフトならif文でできることが、電子工作だと意外に面倒らしいググってみたら、Hブリッジという回路が必要らしい

こうしたい Hブリッジ概念 実際の回路図

12年6月2日土曜日

Page 18: Adkを使って音声コマンドで操作する戦車を作ってみた

ごめん、いろいろ無理!(>_<)

12年6月2日土曜日

Page 19: Adkを使って音声コマンドで操作する戦車を作ってみた

モーターを逆回転させる方法さらに調べると、Hブリッジ回路を内蔵したドライバ(IC?)があるらしい使い方は単純に結線するだけ!

すばらしい!!

こんなの

前進・後退・停止はデジタル出力でコントロール。PWMを使ってアクセルコントロールも出来る。モーター駆動は別電源を使える

12年6月2日土曜日

Page 20: Adkを使って音声コマンドで操作する戦車を作ってみた

ブレッドボードで組むそんなこんなで、一旦できました!でも問題点山積み...頭でっかち!そして重い戦車に載り切らない...動かない...電流は来てるっぽい

12年6月2日土曜日

Page 21: Adkを使って音声コマンドで操作する戦車を作ってみた

対策を考える(その1)そもそも何故動かんのだ?逆さにするとキャタピラは動く。でもトルクがないので走ることはできない。9V電池を4個直列繋ぎ(=36v)にしてみる → 煙が出るそもそも、単三電池4本(=6v)で動いていたはず!単三電池6本(=9v)のケースを見つけた。これならいけるんじゃね? → 動いたよくわからんけど、9v電池だと出力できる電流が足りないとかなのかな?動く要素は電圧だけじゃないんだ。へー

12年6月2日土曜日

Page 22: Adkを使って音声コマンドで操作する戦車を作ってみた

対策を考える(その2)USB給電用のバッテリーでかすぎ!コレはラジコンのバッテリーボックス(単三電池4本)から取るように変更接続用のコネクタはハンダ付けして自作電圧がちょっとぐらい変わっても動くはず!

12年6月2日土曜日

Page 23: Adkを使って音声コマンドで操作する戦車を作ってみた

対策を考える(その3)Arduino Mega-ADKでかすぎ!使ってないポートが多すぎる! むだムダ無駄!!最近発売されたHarpy-Nanoってのが、ちっちゃくて安くて良い感じ!

ADK互換Arduino互換

デジタル入出力6ポートアナログ入力7ポートこれで¥2880!!

(HarpyNano単体の場合)参照:harpyhack.com

12年6月2日土曜日

Page 24: Adkを使って音声コマンドで操作する戦車を作ってみた

対策を考える(その4)そもそもブレッドボードでかすぎ!ユニバーサル基板を使えば、小さくできるかも!?部品をはんだで固定し、自分で配線するおれのハンダゴテが火を噴くぜ!

ユニバーサル基板の例

12年6月2日土曜日

Page 25: Adkを使って音声コマンドで操作する戦車を作ってみた

ユニバーサル基板で組むホントに火を吹いた実際に部品がハンダゴテに焼かれてしまった!!でも、なんとかできたすごく小さくなった!でも、収まりが悪い作り直しだ…

12年6月2日土曜日

Page 26: Adkを使って音声コマンドで操作する戦車を作ってみた

ハード部分完成今度こそ完成!

HarpyNanoとユニバーサル基板をソケットで接続した。収まり良いのでオススメ!ケースは名刺入れのプラケースを削った

12年6月2日土曜日

Page 27: Adkを使って音声コマンドで操作する戦車を作ってみた

さて、いよいよソフトウェア実装です

12年6月2日土曜日

Page 28: Adkを使って音声コマンドで操作する戦車を作ってみた

ADKの制御

ADKのリファレンス実装を理解することは大切だけど、あれを毎回書くのは大変

Javaコード部分は、要はシリアル通信なので、送信と受信をシンプルに実装した汎用クラスを使い回せば良いと思う

12年6月2日土曜日

Page 29: Adkを使って音声コマンドで操作する戦車を作ってみた

ADKCore(自作クラス)ADK制御用自作クラスADKCoreを作ったインスタンスを作って

面倒な処理は全部移譲

12年6月2日土曜日

Page 30: Adkを使って音声コマンドで操作する戦車を作ってみた

ADKCore(自作クラス)ADKへのメッセージ送信はsendCommand()

メッセージ受信はReceiveListenerを使う

これだけ。

12年6月2日土曜日

Page 31: Adkを使って音声コマンドで操作する戦車を作ってみた

音声コマンドの実装android.speech.SpeechRecognizerというクラスを使うと、音声認識した結果の文字列を取得できる

12年6月2日土曜日

Page 32: Adkを使って音声コマンドで操作する戦車を作ってみた

音声レスポンス

本当は映画などから必要な音源をピックアップしたかったけど、あまりに語彙が少なくて断念。AndroidにしゃべらせることにしたAndroid標準のテキスト読み上げシステムText to Speach(TTS)は、日本語をサポートしていない2011年9月にKDDI研究所よりN2 TTSという、標準フレームワーク互換の日本語読み上げシステムが提供された。現在はPlayストアからN2 TTSを無料でダウンロードでき、TTSとして登録した後、日本語を渡すと読み上げることができる

12年6月2日土曜日

Page 33: Adkを使って音声コマンドで操作する戦車を作ってみた

音声レスポンス使い方

APIDemosと同じコードで十分動きますLocale.JAPANを指定するだけ

12年6月2日土曜日

Page 34: Adkを使って音声コマンドで操作する戦車を作ってみた

リモートコントロール

やっぱ人として、手元のAndroidを使って、ラジコンを操作したくなりますよね?

せっかくアンテナ取ったのにね。

IP指定でソケット通信してもいいけど、将来的に複数の端末を協調動作させたいので、ちゃんとしたプロトコルを使いたい

12年6月2日土曜日

Page 35: Adkを使って音声コマンドで操作する戦車を作ってみた

リモートコントロール今回はXMPPを使う

GTalkとかJabberに使われてるプロトコル。要はIMとして必要な機能のためのプロトコル今回は、手元のAndroidからラジコンに乗ってるAndroidに、テキストメッセージを渡してコントロールする(複雑なデータならJSONでもOK)でも最近XMPPは下火で、ちゃんとメンテナンスされているAndroid用XMPPライブラリが少ない今回はasmack-android-7というライブラリを使用する。コードはステップ数が結構あるので割愛

12年6月2日土曜日

Page 36: Adkを使って音声コマンドで操作する戦車を作ってみた

まとめ

電子工作おもしろい。

みんな手を付けてない(=比較的簡単に解決できる問題が身近にたくさん残っている=ビジネスチャンス!?)

タブレット型Android+ADKを使った自作デバイス+自作アプリ(+サーバ)の組み合わせで、業務用システムを作る機会が増えてくるのでは?

12年6月2日土曜日

Page 37: Adkを使って音声コマンドで操作する戦車を作ってみた

おしまい

ご清聴ありがとうございました

12年6月2日土曜日