43
Android へっぽこな 思考戦車を作ってみた オープンソースカンファレンス北海道 at 2012/6/16(sat) 大路 裕介 ( まいむぞう )

Androidでへっぽこ思考戦車を作ってみた

Embed Size (px)

DESCRIPTION

OSC 2012 北海道で公演した時の資料です。 内容は、Android端末を複数使って、脳波と手元のスマホで戦車のラジコンをコントロール(ADK使用)し、的を画像認識してBB弾を発射し、それをシースルー型HMDで表示するというものです。XMPPを使って拡張可能な形で作っています。

Citation preview

Page 1: Androidでへっぽこ思考戦車を作ってみた

Androidで へっぽこな思考戦車を作ってみた

オープンソースカンファレンス北海道

at 2012/6/16(sat)

大路 裕介(まいむぞう)

Page 2: Androidでへっぽこ思考戦車を作ってみた

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

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

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

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

Page 3: Androidでへっぽこ思考戦車を作ってみた

重要なお知らせ

Page 4: Androidでへっぽこ思考戦車を作ってみた

仕事、頼む!

Page 5: Androidでへっぽこ思考戦車を作ってみた

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

Page 6: Androidでへっぽこ思考戦車を作ってみた

全体構成

直流コード USB

WiFi (XMPP)

コイツしゃべるコイツ見つける

コイツ日本語わかる

コイツ動く

コイツ頭ん中わかる

コイツ見える

BlueTooth

AITankViewerAITankCommander

AITankLeader

AITankDriver

Page 7: Androidでへっぽこ思考戦車を作ってみた

お題目戦車編

戦車改造

砲身角度の読み取り

AITankLeader編

ADKとは

音声出力

画像認識

AITankCommander編

XMPP音声認識

B3BandAITankViewer編

BT-100その他

PandaboardとKinect

Page 8: Androidでへっぽこ思考戦車を作ってみた

戦車編

Page 9: Androidでへっぽこ思考戦車を作ってみた

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

ラジコンを改造しよう!

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

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

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

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

◎ 操作がラフでもOK

Page 10: Androidでへっぽこ思考戦車を作ってみた

改造方針1.でっかい戦車買う2.とりあえず遊ぶ3.バラして色々ぶった切る・捨てる4.モーター制御用の電子回路を組んでArduinoでコントロールする

5.砲塔の角度を読み取るギミックを作る

Page 11: Androidでへっぽこ思考戦車を作ってみた

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

Page 12: Androidでへっぽこ思考戦車を作ってみた

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

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

Page 13: Androidでへっぽこ思考戦車を作ってみた

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

すばらしい!!

こんなの

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

Page 14: Androidでへっぽこ思考戦車を作ってみた

砲身角度の読み取り今回購入した戦車のラジコンには、砲身を回転させるギミックが付いているが、360度回せるわけではない回し過ぎるとガガガッという嫌な音がする索敵するため砲塔を自動制御したかったので、砲塔の角度を読み取るギミックを自作した

Page 15: Androidでへっぽこ思考戦車を作ってみた

砲身角度の読み取りボリュームスイッチ(可変抵抗)を通した電圧を読み取ることで、角度を算出できるようにした

Page 16: Androidでへっぽこ思考戦車を作ってみた

戦車完成なんとかできました

Page 17: Androidでへっぽこ思考戦車を作ってみた

AITankLeader編

Page 18: Androidでへっぽこ思考戦車を作ってみた

ADKとはADKは、Open Accessory Development Kitの略規格/フレームワークの名前ですAndroid 2.3.4以降、及び3.0以降で利用可能ですADKに対応したArduinoやPICマイコンなどを、Android側からコントロールすることができます

直流コード USB

Page 19: Androidでへっぽこ思考戦車を作ってみた

ArduinoとはArduinoはAVRマイコンですプログラム可能なCPUと、専用IDEを備えたシステムの総称ですオープンソースハードウェアです単体でも動作可能ですし、Androidなどと通信して動作内容を切り替えることが可能ですデジタル・アナログ入出力が可能

Page 20: Androidでへっぽこ思考戦車を作ってみた

ADKでできることUSBを介してAndroidのアプリと、Arduinoなどのマイコンの間で、シリアル通信できる今回は、前進・左旋回・砲塔回転などのメッセージをArduinoに送っています

Page 21: Androidでへっぽこ思考戦車を作ってみた

ADKでできることADKに対応したハードをAndroidに繋いだ時、Androidにインテントを発射することができるハードとセットとなるアプリを1つ指定できる

Page 22: Androidでへっぽこ思考戦車を作ってみた

音声レスポンス

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

Page 23: Androidでへっぽこ思考戦車を作ってみた

音声レスポンス使い方

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

Page 24: Androidでへっぽこ思考戦車を作ってみた

画像認識戦車の上に固定したAndroid端末からカメラ画像を使って、ターゲット(ダンボール紙)を検出し、BB弾を発射する機能を付けた画像認識にはOpenCV 2.4.1を使用した。2.3からOpenCVのAndroid版がリリースされており、プロジェクトライブラリとして利用可能。

Page 25: Androidでへっぽこ思考戦車を作ってみた

画像認識最近のOpenCV

JNI経由の他、ラッパライブラリが用意されたためJavaだけで画像解析可能(ただし遅い)

※今回は速度重視のためJNI使ってます

Page 26: Androidでへっぽこ思考戦車を作ってみた

画像認識最近のOpenCV

OpenCVのCookBookがPDFで無料配布されている。この品質は市販の書籍レベル。これから画像解析勉強したい人はぜひ。(ただし英語)

Page 27: Androidでへっぽこ思考戦車を作ってみた

画像認識ターゲットの認識

的画像 モノクロ 特徴点抽出

カメラ画像 モノクロ 特徴点抽出

マッチング 的発見?

トレーニング画像(最初の1回のみ)

プレビュー画像(毎フレーム)

簡単に切り替え可能

Page 28: Androidでへっぽこ思考戦車を作ってみた

画像認識ターゲットの認識

SURFの場合 0.5FPSぐらいORBの場合 2.0FPSぐらいでも誤認識しちゃう

Page 29: Androidでへっぽこ思考戦車を作ってみた

コントローラ編

Page 30: Androidでへっぽこ思考戦車を作ってみた

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

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

Page 31: Androidでへっぽこ思考戦車を作ってみた

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

Page 32: Androidでへっぽこ思考戦車を作ってみた

脳波測定脳波ってナニ?ヒト・動物の脳から生じる電気活動を、電極を使って記録したもの(Wikipediaより)要はα波とかΘ波とかのアレ脳の部位毎に国際基準に従って測定し、その波形を見ることで、医療診断や脳研究などに使われている

Page 33: Androidでへっぽこ思考戦車を作ってみた

脳波測定今回は簡易脳波測定器としてB3 Bandを使用しています電極は額の1点しかないので、精度には不安があるものの、α・βなどの各生波形の他、独自に統計処理した集中度・リラックス度・睡眠度・まばたきの波形を得られる

Page 34: Androidでへっぽこ思考戦車を作ってみた

脳波測定脳波コントローラの可能性実際のところ集中度とまばたきについては、ある程度コントロールできるものの、生波形やリラックス度・睡眠度については、意志的にコントロールするのは難しい2ビットのOn/Offぐらいには使えるかな…メニューの切り替え表示On/Off今回は戦車の前進と停止に当ててみました

Page 35: Androidでへっぽこ思考戦車を作ってみた

ビューワ編

Page 36: Androidでへっぽこ思考戦車を作ってみた

自然な形でデータを見る今回はシースルー型ヘッドマウントディスプレイとしてBT-100を使用しています。BT-100はAndroid 2.2が載っているので、XMPP経由でデータを拾って表示するアプリを書いてます。

Page 37: Androidでへっぽこ思考戦車を作ってみた

エンジニア視点今回の中で一番ARぽい部分なんですが、BT-100に乗ってるAndroidはカメラやBlueToothやセンサー類がついてないし、タッチパットが死ぬほど使いづらいので、単体でおもしろいことはできません。(見るだけ)やはりGoogle Glass待ちでしょうか。今年のGoogle IOに期待!!

Page 38: Androidでへっぽこ思考戦車を作ってみた

その他

Page 39: Androidでへっぽこ思考戦車を作ってみた

PandaBoardとKinect巷ではKinectが人気ありますが、同じような機能が載ったXtion Pro Liveというセンサーもあります。できることはKinectとほぼ同じです。深度センサー画像の取得人体のスケルトントラッキング

Page 40: Androidでへっぽこ思考戦車を作ってみた

PandaBoardとKinect春のABCで、PandaBoardというボートコンピュータとXtion Pro Liveを組み合わせて使っているシステムを見たので、当初は今回の戦車に組み込む予定でした。が、最新のソフト(OpneNIとミドルウェア類)では使用できないことがわかったので、見送りに…

Page 41: Androidでへっぽこ思考戦車を作ってみた

まとめ

Page 42: Androidでへっぽこ思考戦車を作ってみた

まとめ電子工作おもしろい。画像解析おもしろい。時間足りない。もっと作りこみたい。 ハードからソフトまで通して作ると、アプリ屋さんから組込屋さんやハード屋さんまで、色んな人と共通の話題ができておもしろい。ソフトの最新技術を組み合わせることで、ハードが進化するでも、結局趣味の世界 (未だカネの匂いはしない)

Page 43: Androidでへっぽこ思考戦車を作ってみた

おしまい

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