Your SlideShare is downloading. ×
Androidでロボットを動かそう・すまべん関西201003
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Androidでロボットを動かそう・すまべん関西201003

9,371
views

Published on

Androidでロボットを動かそう・すまべん関西201003/catsin

Androidでロボットを動かそう・すまべん関西201003/catsin

Published in: Technology

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
9,371
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
22
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Androidでロボットを  2010/03/27 動かしてみよう すまべん関西 catsin 2010-3-29
  • 2. 自己紹介 catsinです。 イロイロやってます。 小物機械好きの雑食系SE。 組込みものからシステムものまでなんでもやります。 WebPage ・Android関連  http://catsin-web.hp.infoseek.co.jp/Android/index.html ・その他  http://www.geocities.jp/c_a_t_s_i_n/ 2010-3-29
  • 3. お題目 Androidでロボットは動くのか? Androidが話題になって以来たびたび話題が出るこのネタですが、 あまり見かけないのでやってみました。 と言ってもロボットOSとして搭載したわけではありません。 やってる人もいるようですが、リアルタイム系の制御に直接Androidを 使うメリットはあまりなくて、実際には制御系をリアルタイム系OS、 行動計画・アルゴリズム系とUI等アプリケーション系をAndroidで実装するのが 現実的な解かなぁと思います。 2010-3-29
  • 4. とりあえずの目標 ・市販品を無改造で使用することを目標にします。        (・・・・・改造するといろいろ面倒だから) ・カスタマイズが必要な箇所は自作ハードに絞り込みます。 ホントは他のネタにも簡単に使いまわせるように 手を入れる範囲を限定しておきました。 2010-3-29
  • 5. 材料 一覧 ①Android端末 ②Arduino+赤外線LED ③BTシリアルボード ④RoboQ ⑤Omnibot iSobot 2010-3-29
  • 6. ①Android端末  今回はhtc/docomo HT-03A(Android1.6)を前提とします。  (AndroidDevPhone1でも動作はします。) 今回唯一スマートフォンらしい箇所です。 2010-3-29
  • 7. ②Arduino 今回はArduino Duemilanove 328を使用します。 アマゾンで3200くらいで売ってます。 http://www.amazon.co.jp /Arduino-Duemilanove-328/dp/B001VG2RYO /ref=sr_1_1 ?ie=UTF8&s=electronics&qid=1266669553&sr=8-1 ・ATmega168を使用したマイコンボードです。 ・デジタル/アナログI/Oが使用できます。 ・PC上のIDE環境を使い、C言語で簡単にプログラム を作成し書き込み実行できます。 Arduinoに赤外線LEDを繋いで、Android-ロボット間の インタフェース・ブリッジとして使用します。 2010-3-29
  • 8. ③BTシリアルボード bluetoothシリアルプロファイルとシリアルを繋ぎます。 以下のサイトで通販で購入できます。 合計8000-程しましたが、技適認証済みです。 簡単!Bluetooth-シリアル(UART)モジュール [BT-MOD100R]」  ・BT-MOD100R http://park11.wakwak.com/~microtechnica/cgi- bin/goodslist.cgi?mode=view_detail&this_num_genre=&this_num_goods=&genre_id=00000028&g oods_id=00000001&sort=  ・BT-MOD100R用 拡張アダプタ基板 http://park11.wakwak.com/~microtechnica/cgi- bin/goodslist.cgi?mode=view_detail&this_num_genre=2&this_num_goods=&genre_id=00000028& goods_id=00000002&sort= 2010-3-29
  • 9. ④RoboQ 今回動かすロボットその1、です。  ・アマゾンだと1300くらいで売ってます。  ・超小型の二足歩行ロボットです。  ・通常は赤外線を使ったコントローラで操作します。  http://www.amazon.co.jp/%E3%82%BF%E3%82%AB%E3%83%A9%E3%83%88%E3%83%9F%E3%83%BC-ROBO-Q- RQ- 04%E3%83%AC%E3%83%88%E3%83%AD%E3%82%B7%E3%83%AB%E3%83%90%E3%83%BC/dp/B001I903PO/ref=sr _1_1/378-1095935-5540239?ie=UTF8&s=toys&qid=1266668536&sr=8-1 2010-3-29
  • 10. ⑤Omnibot iSobot 今回動かすロボットその2、です。  ・アマゾンだと22000くらいで売ってます。  ・サーボが17個載っていて二足歩行や両手足を使ったアクションが可能です。  ・通常は赤外線を使ったコントローラで操作します。  http://www.amazon.co.jp/%E3%82%BF%E3%82%AB%E3%83%A9%E3%83%88%E3%83%9F%E3%83%BC-Omnibot- 17%E3%83%9F%E3%83%A5%E3%83%BC-i-SOBOT- BLACKversion/dp/B0012AVSBW/ref=sr_1_1?ie=UTF8&s=toys&qid=1266668682&sr=1-1 2010-3-29
  • 11. やってみた 1.RoboQを動かそう 2.RoboQを無線で動かそう 3.iSobotを無線で動かそう 2010-3-29
  • 12. 1.RoboQを動かそう   構成図 Android ステレオオーディオ 赤外線 Arduino RoboQ 端末 UI 赤外線コマンドへ変換・送信 無改造のHT-03Aから何で信号を取り出せるかな・・? ああ、音ならそのまま取れるか。ということで。 2010-3-29
  • 13. 1.RoboQを動かそう ・Android-Arduino側の実装の内容  Android側ではUIでの操作を監視してボタンの押下状態を検出、対応した音声 を発声します。  Arduino側ではアナログ入力を一定期間監視して閾値を超えた入力があったか 判定します。    動くけど、ステレオオーディオの音声の有無だけを使っていると、4状態しか表現できません。    ここでは前進/右旋回/左旋回/停止を割り当てておしまい。    (凝れば凝れるけど、メリット薄いよね) Analog1 Android 端末 Analog2 Arduino OFF ON 2010-3-29
  • 14. 1.RoboQを動かそう ・赤外線による制御の基本  方法はいろいろありますが、一般的な赤外線リモコン等では、赤外線を高速 に点滅させることで(だいたい)38KHzの信号を送信しています。 Lo Hi ・Arduinoでの赤外線による制御の実装  ArduinoのDigital13ピン-GNDに接続した赤外線LEDを、タイマを使用して 38KHzの点滅をさせてシグナルの送信を行います。 Arduino GND Digital 13 2010-3-29
  • 15. 1.RoboQを動かそう ・RoboQの制御の内容  RoboQでは赤外線を以下のように使用しています。   スタートビット:1000usのHigh   ストップビット:500usのHigh+500usのLow   ビットが1  :1000usのHigh+500usのLow   ビットが0  :500usのHigh+500usのLow  これを組み合わせて以下のビット列を定期的に出力します。  今回は150ms程度の間隔にしておきます。 スタートビット 1 0 ストップビット コード=規定のビット数(RoboQでは6ビット)  コードは6ビットで定義され各ビットは以下のように使用しています。 0     1     2     3     4     5 動作 バンド 歩行スピード 前進:11 A:00/B:01 11:高/10:中/01:低 /左旋回:10/右旋回:01 /C:10/D:11 2010-3-29  でもAndroid-Arduino間で2bitしか送れないのでスピードとバンドは固定です。
  • 16. 2.RoboQを無線で動かそう   構成図 Android bluetooth BTシリアル 赤外線 Arduino RoboQ 端末 ボード bluetoothでコマンド受信 UI 赤外線コマンドへ変換・送信 なにかいい手はないかしら、とWebを廻っていると、 Androdとbluetoothで何かやっている人たちが居るなぁ、と。 え?bluetoothのシリアルプロファイルって ドライバ追加しなくても使えるの?じゃ使ってみようか。 ・backport-android-bluetooth/emasuiさん     http://code.google.com/p/backport-android-bluetooth/  ・Android + Arduino BT (なんとなく実験 with SIProp開発記)     http://www.noritsuna.com/archives/2009/12/android_arduino.html ・side2 アンドロイドネタ(About Android)/カリーマンさん     http://side2.256byte.com/2009/12/aba/ 2010-3-29
  • 17. 2.RoboQを無線で動かそう ・ArduinoとBTシリアルボードの接続  配線 BTシリアルボード Arduino Vcc Vcc GND GND tx Digital 3 rx Digital 4 2010-3-29
  • 18. 2.RoboQを無線で動かそう ・Android1.6でのbluetooth-SPPの実装  作成するAndroidのプロジェクトにbackport-android-bluetoothを導入   ・jarファイルの配置   ・backport_android_bluetooth.propertiesの配置   ・AndroidManifest.xmlの編集(パーミッションとインテントフィルタの追加)  BTデバイスの検索   ・ブロードキャストレシーバを用意してBTの状態のインテントを受信できるようにしておく。   ・BluetoothAdapterにstartDiscoveryを発行する。   ・検出したBluetoothDeviceをリストアップして、選択する。  接続   ・検出・選択したBluetoothDeviceからcreateRfcommSocketToServiceRecordを使用して    BluetoothSocketを取得、connectする。  送信   ・BluetoothSocketからgetOutputStreamを使用してOutputStreamを取得、writeします。  受信   ・BluetoothSocketからgetInputStreamを使用してInputStreamを取得、readします。  切断   ・BluetoothSocketをcloseします。 2010-3-29
  • 19. 2.RoboQを無線で動かそう ・操作  ペアリング   あらかじめAndroid側のBluetoothをONに設定し、目的のBTデバイスをペア リングしておきます。  起動・接続   アプリを起動し、BTデバイスを検索します。   検出したBTデバイスから目的のものを選択し接続します。  操作・通信   定期的にボタンの押下状態を検出して、対応したコードをbluetooth・シ リアルに送信します。 やってることはオーディオでの接続時と変わりませんが、 送受信できるデータ量が増えたので、固定にしていた速度や バンドをAndroid側で変更できるようにしました。 2010-3-29
  • 20. 3.iSobotを無線で動かそう   構成図 Android bluetooth BTシリアル 赤外線 Arduino iSobot 端末 ボード bluetoothでコマンド受信 UI 赤外線コマンドへ変換・送信 そんなにデータ流せるんなら もっと他のもの動かしちゃおうよ。 2010-3-29
  • 21. 3.iSobotを無線で動かそう ・iSobotの制御の内容   スタートビット:バンドA:2500usのHigh+500usのLow           バンドB:2500usのHigh+1000usのLow   ストップビット:500usのHigh+500usのLow   ビットが1  :500usのHigh+1000usのLow   ビットが0  :500usのHigh+2000usのLow  これを組み合わせて以下のビット列を定期的に出力します。  今回は150ms程度の間隔にしておきます。 1 0 ストップビット スタートビット バンドAの場合3000us コード=規定のビット数(iSobotでは20または28ビット) /バンドBの場合3500us 2010-3-29
  • 22. 3.iSobotを無線で動かそう ・コード内の各ビットは以下のように使用しています。  20~28ビットのコード内には多数のコマンドが定義されています。   ・前進  6D B8 18   ・左旋回 7D C8 18   ・右旋回 45 D0 18     :           i-SOBOTをPCからコントロール               http://akiba.geocities.jp/hyperstone_apple3/iSobot/iSobot.htm  バンドの切り替えはスタートビットのLoの長さと、先頭からの3ビット目を反転させることで切り 替えられます。 ・Android側の実装の内容  定期的にボタンの押下状態を検出して、対応したコードをbluetooth・シリ アルに送信します。 コマンドが多すぎるので移動・キック・パンチをボタン、他をリストにしました。 2010-3-29
  • 23. デモ ここでは代表でiSobotの実動デモをします。 2010-3-29
  • 24. 応用  たとえば・・・  ・Androidの音声認識を使ってロボット制御  ・Androidのカメラ撮影でロボットの状態推定を行い、AR的にロボット制御  ・Arduinoの赤外線制御をもっと汎用的にしておいて家電製品の制御  ・BTシリアルを使ってのデバイス+Androidでのプロトタイプ機製作  などなど 2010-3-29
  • 25. おしまい 以上ご清聴ありがとうございました。 catsin 2010-3-29