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

3,893 views
3,778 views

Published on

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

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,893
On SlideShare
0
From Embeds
0
Number of Embeds
1,527
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

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

×