Upload
yusuke-ohmichi
View
3.016
Download
8
Embed Size (px)
DESCRIPTION
OSC 2012 北海道で公演した時の資料です。 内容は、Android端末を複数使って、脳波と手元のスマホで戦車のラジコンをコントロール(ADK使用)し、的を画像認識してBB弾を発射し、それをシースルー型HMDで表示するというものです。XMPPを使って拡張可能な形で作っています。
Citation preview
Androidで へっぽこな思考戦車を作ってみた
オープンソースカンファレンス北海道
at 2012/6/16(sat)
大路 裕介(まいむぞう)
あばうと・みー札幌のWeb/スマートフォン系フリーランサーです。最近はAndroid専業になってます。
元々Web系プログラマーです。単独のサーバからAmazon EC2やGAEを使ったクラウドまで、サーバ構築からシステム開発まで一人でやってます。
最近はOpenCVやKinectや電子工作やってます。
日本Androidの会の北海道支部長をしています。
重要なお知らせ
仕事、頼む!
まずはどんなもんか動かしてみましょう
全体構成
直流コード USB
WiFi (XMPP)
コイツしゃべるコイツ見つける
コイツ日本語わかる
コイツ動く
コイツ頭ん中わかる
コイツ見える
BlueTooth
AITankViewerAITankCommander
AITankLeader
AITankDriver
お題目戦車編
戦車改造
砲身角度の読み取り
AITankLeader編
ADKとは
音声出力
画像認識
AITankCommander編
XMPP音声認識
B3BandAITankViewer編
BT-100その他
PandaboardとKinect
戦車編
何を作ろう?せっかくなので、動くものがいい
ラジコンを改造しよう!
どんなラジコンを改造しよう?
ヘリコプター → × 操縦が繊細過ぎる
車 → × 速度が早すぎてハンドル操作が難しそう
戦車 → 鈍いし、キャタピラなので安定してる
◎ 操作がラフでもOK
改造方針1.でっかい戦車買う2.とりあえず遊ぶ3.バラして色々ぶった切る・捨てる4.モーター制御用の電子回路を組んでArduinoでコントロールする
5.砲塔の角度を読み取るギミックを作る
戦車ラジコンの構造基本的に、左右のキャタピラそれぞれにモーターが付いている両方回せば前進、右だけ回せば左旋回、両方逆回転すればバック
モーターを逆回転させる方法ソフトならif文でできることが、電子工作だと意外に面倒らしいググってみたら、Hブリッジという回路が必要らしい
こうしたい Hブリッジ概念 実際の回路図
モーターを逆回転させる方法さらに調べると、Hブリッジ回路を内蔵したドライバ(IC?)があるらしい使い方は単純に結線するだけ!
すばらしい!!
こんなの
前進・後退・停止はデジタル出力でコントロール。PWMを使ってアクセルコントロールも出来る。モーター駆動は別電源を使える
砲身角度の読み取り今回購入した戦車のラジコンには、砲身を回転させるギミックが付いているが、360度回せるわけではない回し過ぎるとガガガッという嫌な音がする索敵するため砲塔を自動制御したかったので、砲塔の角度を読み取るギミックを自作した
砲身角度の読み取りボリュームスイッチ(可変抵抗)を通した電圧を読み取ることで、角度を算出できるようにした
戦車完成なんとかできました
AITankLeader編
ADKとはADKは、Open Accessory Development Kitの略規格/フレームワークの名前ですAndroid 2.3.4以降、及び3.0以降で利用可能ですADKに対応したArduinoやPICマイコンなどを、Android側からコントロールすることができます
直流コード USB
ArduinoとはArduinoはAVRマイコンですプログラム可能なCPUと、専用IDEを備えたシステムの総称ですオープンソースハードウェアです単体でも動作可能ですし、Androidなどと通信して動作内容を切り替えることが可能ですデジタル・アナログ入出力が可能
ADKでできることUSBを介してAndroidのアプリと、Arduinoなどのマイコンの間で、シリアル通信できる今回は、前進・左旋回・砲塔回転などのメッセージをArduinoに送っています
ADKでできることADKに対応したハードをAndroidに繋いだ時、Androidにインテントを発射することができるハードとセットとなるアプリを1つ指定できる
音声レスポンス
本当は映画などから必要な音源をピックアップしたかったけど、あまりに語彙が少なくて断念。AndroidにしゃべらせることにしたAndroid標準のテキスト読み上げシステムText to Speach(TTS)は、日本語をサポートしていない2011年9月にKDDI研究所よりN2 TTSという、標準フレームワーク互換の日本語読み上げシステムが提供された。現在はPlayストアからN2 TTSを無料でダウンロードでき、TTSとして登録した後、日本語を渡すと読み上げることができる
音声レスポンス使い方
APIDemosと同じコードで十分動きますLocale.JAPANを指定するだけ
画像認識戦車の上に固定したAndroid端末からカメラ画像を使って、ターゲット(ダンボール紙)を検出し、BB弾を発射する機能を付けた画像認識にはOpenCV 2.4.1を使用した。2.3からOpenCVのAndroid版がリリースされており、プロジェクトライブラリとして利用可能。
画像認識最近のOpenCV
JNI経由の他、ラッパライブラリが用意されたためJavaだけで画像解析可能(ただし遅い)
※今回は速度重視のためJNI使ってます
画像認識最近のOpenCV
OpenCVのCookBookがPDFで無料配布されている。この品質は市販の書籍レベル。これから画像解析勉強したい人はぜひ。(ただし英語)
画像認識ターゲットの認識
的画像 モノクロ 特徴点抽出
カメラ画像 モノクロ 特徴点抽出
マッチング 的発見?
トレーニング画像(最初の1回のみ)
プレビュー画像(毎フレーム)
簡単に切り替え可能
画像認識ターゲットの認識
SURFの場合 0.5FPSぐらいORBの場合 2.0FPSぐらいでも誤認識しちゃう
コントローラ編
リモートコントロール今回はXMPPを使う
GTalkとかJabberに使われてるプロトコル。要はIMとして必要な機能のためのプロトコル今回は、手元のAndroidからラジコンに乗ってるAndroidに、テキストメッセージを渡してコントロールする(複雑なデータならJSONでもOK)でも最近XMPPは下火で、ちゃんとメンテナンスされているAndroid用XMPPライブラリが少ない今回はasmack-android-7というライブラリを使用する。コードはステップ数が結構あるので割愛
音声コマンドの実装android.speech.SpeechRecognizerというクラスを使うと、音声認識した結果の文字列を取得できる
脳波測定脳波ってナニ?ヒト・動物の脳から生じる電気活動を、電極を使って記録したもの(Wikipediaより)要はα波とかΘ波とかのアレ脳の部位毎に国際基準に従って測定し、その波形を見ることで、医療診断や脳研究などに使われている
脳波測定今回は簡易脳波測定器としてB3 Bandを使用しています電極は額の1点しかないので、精度には不安があるものの、α・βなどの各生波形の他、独自に統計処理した集中度・リラックス度・睡眠度・まばたきの波形を得られる
脳波測定脳波コントローラの可能性実際のところ集中度とまばたきについては、ある程度コントロールできるものの、生波形やリラックス度・睡眠度については、意志的にコントロールするのは難しい2ビットのOn/Offぐらいには使えるかな…メニューの切り替え表示On/Off今回は戦車の前進と停止に当ててみました
ビューワ編
自然な形でデータを見る今回はシースルー型ヘッドマウントディスプレイとしてBT-100を使用しています。BT-100はAndroid 2.2が載っているので、XMPP経由でデータを拾って表示するアプリを書いてます。
エンジニア視点今回の中で一番ARぽい部分なんですが、BT-100に乗ってるAndroidはカメラやBlueToothやセンサー類がついてないし、タッチパットが死ぬほど使いづらいので、単体でおもしろいことはできません。(見るだけ)やはりGoogle Glass待ちでしょうか。今年のGoogle IOに期待!!
その他
PandaBoardとKinect巷ではKinectが人気ありますが、同じような機能が載ったXtion Pro Liveというセンサーもあります。できることはKinectとほぼ同じです。深度センサー画像の取得人体のスケルトントラッキング
PandaBoardとKinect春のABCで、PandaBoardというボートコンピュータとXtion Pro Liveを組み合わせて使っているシステムを見たので、当初は今回の戦車に組み込む予定でした。が、最新のソフト(OpneNIとミドルウェア類)では使用できないことがわかったので、見送りに…
まとめ
まとめ電子工作おもしろい。画像解析おもしろい。時間足りない。もっと作りこみたい。 ハードからソフトまで通して作ると、アプリ屋さんから組込屋さんやハード屋さんまで、色んな人と共通の話題ができておもしろい。ソフトの最新技術を組み合わせることで、ハードが進化するでも、結局趣味の世界 (未だカネの匂いはしない)
おしまい
ご清聴ありがとうございました