25
2010-3-29 Androidでロボットを 動かしてみよう 2010/03/27 すまべん関西 catsin

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

  • Upload
    cat-sin

  • View
    9.507

  • Download
    11

Embed Size (px)

DESCRIPTION

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

Citation preview

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

2010-3-29

Androidでロボットを動かしてみよう

 2010/03/27すまべん関西

catsin

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

2010-3-29

自己紹介

catsinです。

イロイロやってます。

小物機械好きの雑食系SE。

組込みものからシステムものまでなんでもやります。

WebPage

・Android関連

 http://catsin-web.hp.infoseek.co.jp/Android/index.html

・その他

 http://www.geocities.jp/c_a_t_s_i_n/

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

2010-3-29

お題目

Androidでロボットは動くのか?

Androidが話題になって以来たびたび話題が出るこのネタですが、

あまり見かけないのでやってみました。

と言ってもロボットOSとして搭載したわけではありません。

やってる人もいるようですが、リアルタイム系の制御に直接Androidを

使うメリットはあまりなくて、実際には制御系をリアルタイム系OS、

行動計画・アルゴリズム系とUI等アプリケーション系をAndroidで実装するのが

現実的な解かなぁと思います。

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

2010-3-29

とりあえずの目標

・市販品を無改造で使用することを目標にします。       (・・・・・改造するといろいろ面倒だから)

・カスタマイズが必要な箇所は自作ハードに絞り込みます。

ホントは他のネタにも簡単に使いまわせるように

手を入れる範囲を限定しておきました。

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

2010-3-29

材料

一覧

①Android端末

②Arduino+赤外線LED

③BTシリアルボード

④RoboQ

⑤Omnibot iSobot

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

2010-3-29

①Android端末

 今回はhtc/docomo HT-03A(Android1.6)を前提とします。

 (AndroidDevPhone1でも動作はします。)

今回唯一スマートフォンらしい箇所です。

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

2010-3-29

②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

Arduinoに赤外線LEDを繋いで、Android-ロボット間の

インタフェース・ブリッジとして使用します。

・ATmega168を使用したマイコンボードです。

・デジタル/アナログI/Oが使用できます。

・PC上のIDE環境を使い、C言語で簡単にプログラムを作成し書き込み実行できます。

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

2010-3-29

③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&goods_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=

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

2010-3-29

④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

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

2010-3-29

⑤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

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

2010-3-29

やってみた

1.RoboQを動かそう

2.RoboQを無線で動かそう

3.iSobotを無線で動かそう

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

2010-3-29

1.RoboQを動かそう

  構成図

Android端末

Arduino RoboQステレオオーディオ 赤外線

UI 赤外線コマンドへ変換・送信

無改造のHT-03Aから何で信号を取り出せるかな・・?ああ、音ならそのまま取れるか。ということで。

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

2010-3-29

1.RoboQを動かそう

・Android-Arduino側の実装の内容

 Android側ではUIでの操作を監視してボタンの押下状態を検出、対応した音声を発声します。

 Arduino側ではアナログ入力を一定期間監視して閾値を超えた入力があったか判定します。

   動くけど、ステレオオーディオの音声の有無だけを使っていると、4状態しか表現できません。

   ここでは前進/右旋回/左旋回/停止を割り当てておしまい。

   (凝れば凝れるけど、メリット薄いよね)

Android端末 ArduinoAnalog2

Analog1

OFF ON

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

2010-3-29

1.RoboQを動かそう

・赤外線による制御の基本 方法はいろいろありますが、一般的な赤外線リモコン等では、赤外線を高速

に点滅させることで(だいたい)38KHzの信号を送信しています。

・Arduinoでの赤外線による制御の実装 ArduinoのDigital13ピン-GNDに接続した赤外線LEDを、タイマを使用して

38KHzの点滅をさせてシグナルの送信を行います。

Lo Hi

Arduino

GNDDigital 13

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

2010-3-29

1.RoboQを動かそう

・RoboQの制御の内容 RoboQでは赤外線を以下のように使用しています。  スタートビット:1000usのHigh  ストップビット:500usのHigh+500usのLow  ビットが1  :1000usのHigh+500usのLow  ビットが0  :500usのHigh+500usのLow これを組み合わせて以下のビット列を定期的に出力します。 今回は150ms程度の間隔にしておきます。

 コードは6ビットで定義され各ビットは以下のように使用しています。

スタートビット 1 0 ストップビット

コード=規定のビット数(RoboQでは6ビット)

0     1     2     3     4     5

歩行スピード11:高/10:中/01:低

動作前進:11

/左旋回:10/右旋回:01

バンドA:00/B:01/C:10/D:11

 でもAndroid-Arduino間で2bitしか送れないのでスピードとバンドは固定です。

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

2010-3-29

2.RoboQを無線で動かそう

  構成図

Android端末

Arduino RoboQbluetooth 赤外線

UI 赤外線コマンドへ変換・送信

なにかいい手はないかしら、とWebを廻っていると、Androdとbluetoothで何かやっている人たちが居るなぁ、と。

え?bluetoothのシリアルプロファイルってドライバ追加しなくても使えるの?じゃ使ってみようか。

BTシリアルボード

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/

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

2010-3-29

2.RoboQを無線で動かそう

・ArduinoとBTシリアルボードの接続

 配線

BTシリアルボード Arduino

VccGNDtxrx

VccGNDDigital 3Digital 4

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

2010-3-29

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します。

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

2010-3-29

2.RoboQを無線で動かそう

・操作

 ペアリング

  あらかじめAndroid側のBluetoothをONに設定し、目的のBTデバイスをペアリングしておきます。

 起動・接続

  アプリを起動し、BTデバイスを検索します。

  検出したBTデバイスから目的のものを選択し接続します。

 操作・通信

  定期的にボタンの押下状態を検出して、対応したコードをbluetooth・シリアルに送信します。

やってることはオーディオでの接続時と変わりませんが、

送受信できるデータ量が増えたので、固定にしていた速度や

バンドをAndroid側で変更できるようにしました。

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

2010-3-29

3.iSobotを無線で動かそう

  構成図

Android端末

Arduino iSobotbluetooth 赤外線

UI 赤外線コマンドへ変換・送信

BTシリアルボード

bluetoothでコマンド受信

そんなにデータ流せるんならもっと他のもの動かしちゃおうよ。

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

2010-3-29

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程度の間隔にしておきます。

スタートビットバンドAの場合3000us/バンドBの場合3500us

1 0 ストップビット

コード=規定のビット数(iSobotでは20または28ビット)

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

2010-3-29

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・シリアルに送信します。

コマンドが多すぎるので移動・キック・パンチをボタン、他をリストにしました。

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

2010-3-29

デモ

ここでは代表でiSobotの実動デモをします。

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

2010-3-29

応用

 たとえば・・・

 ・Androidの音声認識を使ってロボット制御

 ・Androidのカメラ撮影でロボットの状態推定を行い、AR的にロボット制御

 ・Arduinoの赤外線制御をもっと汎用的にしておいて家電製品の制御

 ・BTシリアルを使ってのデバイス+Androidでのプロトタイプ機製作

 などなど

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

2010-3-29

おしまい

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

catsin