Robot No.8080のブログ

ロボットや電子工作など。

mbed + トラ技カメラBの実験。(その2)

2012年03月04日 | mbed

カメラの動作確認は一通り終わったので、今度はサーボモータと組み合わせて物体追跡をやってみたい。

mbed内で画像処理―>サーボ制御まで完結できるか試す。

 

 

まず、カラートラッキングをやってみた。画像処理もmbedでやっている。

 

画像処理に関しては以下を参考にさせていただいた。

Processing Webカメラ/カラートラッキング

テニスボールを認識する移動ロボット

 

mbedの画像処理を少し改良。ノイズの影響を受けにくくした。

 

 

mbedだけでカメラ画像取得、画像処理、画像表示までやって、そこそこ動くことが分かった。

表示をやめればもう少し速くなる。動画はこちら。

mbed + トラ技カメラBでColorTrackingの実験。

 

次はいよいよサーボモータと組み合わせて物体追跡。

サーボモータは、双葉電子のロボット用サーボモータRS304MD-FF使用。

TTLコマンド(シリアル)方式でmbedと通信している。

  

 

 

mbedだけでカメラ画像取得、画像処理、サーボ指令値計算までやってみた。一応追従している。

動画はこちら。

mbed + トラ技カメラB + サーボモータでボール追跡の実験。

 

―以上―

 

 

 

コメント (0) |  トラックバック (0) | 

Android端末とmbedをBluetooth SPPで接続する実験

2012年03月04日 | mbed

  Android端末とmbedをBluetooth SPPで接続する実験をしましたので、その手順をまとめてみました。

 ここで使用しているmbedでBluetooth SPP接続がつかえるようにするプログラム”myBlueUSB”は、まだ開発中で時々更新されているようです。

 したがって、この通りやってもうまくいかない場合があるかもしれませんのでご承知おきください。

 またこの記事は、ある程度Androidやmbedの開発経験がある方を対象にしていますので、ツール類の操作方法の細かい説明は省略しています。

 ”5.補足1 Window PCと接続したい場合”を追記しました。 2011.11.7

 ”6.捕足2 btserialクラスを使って通信する場合”を追記しました。2012.3.4

 1.必要なもの

 ・mbed側

(1)mbed NXP LPC1768

  

(2)StarBoard Orange または、USBコネクタ(Aタイプ メス )

 StarBoard Orangeではなく、USBコネクタ(Aタイプ メス )だけでも良いです。こちらで詳細に解説されていますので参考にしてください。

   

    

(3)myBlueUSB 

 mbedでBluetooth SPP接続がつかえるようにするプログラム。

(4)Windows serial port driver

 mbed側の動作確認をするのに便利です。

(5)USB Bluetoothドングル

 私が動作確認したのは、次の二つです。

  PLANEX Bluetooth ver2.1+EDR BTMICROEDR1XZ

  PLANEX Bluetooth Ver3.0+EDR  BT-Micro3E1XZ

  

 ・Android端末側

(1)Android端末

 私が動作確認したのは以下の二つです。

  au IS05

  acer ICONIA TAB A500

(2)Android開発環境

(3)GetBlue

 Android開発環境を作るのが面倒なときは、これの無料版でも実験できます。

2.mbed側の準備

(1)Windows serial port driverをインストールし、シリアル端末が使えるようにしておきます。

(2)myBlueUSBのインポート

 myBlueUSBをコンパイラにインポートします。

 myBlueUSBは開発中のようなので、色々なバージョンが公開されているようです。

 必ずしも最新版でうまくいくとは限りません。自分がちゃんと接続ができることを確認できたのはこれです。

 注意:2011.08.10現在確認した範囲では、上記リンクではなく、このバージョンをインポートすればうまくいくようです。(2)のライブラリ更新も不要でした。(3)のコンパイルエラーも出ませんでした。(2011.08.10追記)

(2)ライブラリを更新

 次に、以下のライブラリを最新に更新します。myBlueUSB, myUSBHost, rfcomm, sdp

 ライブラリの更新は、コンパイラ画面左の対象ライブラリをマウスで選択して画面右側に出てくる"Update to the latest revision"ボタンを押します。

(3)コンパイル&ダウンロード

 コンパイルすると、1箇所コンパイルエラーが出るので、"TestShell.cpp"の58行目に"extern"を追加します。

 また、"TestShell.cpp"の259行目と283行目のコメントを外して、受信データを送信側にエコーバックするようにします。(2011.08.10追記)

 コンパイルが成功したらmbedにダウンロードしておきます。

 3.Android端末側の準備

 ・Android開発環境を使う場合。

  Android SDK付属のBluetoothChatを使用します。

 ここを参考に"BluetoothChatService.java"のUUIDを書き換えてから端末にダウンロードしておきます。

 私が使ったBluetoothChatはAndroid2.2用です。

 A500はAndroid3.0ですが、Android3.0用BluetoothChatは、UUIDの定義部分がちょっと異なっているのでAndroid2.2用を使いました。

 ・GetBlueを使う場合。

  GetBlueを端末にダウンロード&インストールしておきます。

 

 4.接続実験

 注意:私が実験した範囲ではなかなか一発では繋がりません。何度かmbedのリセットとペアリングをしているうちに繋がるという状態で、今は確実に繋がる手順を模索している所です。

  複数のBluetooth機器を使用している環境では、この対策をすると改善するかもしれません。(2011.08.17追記)

 ペアリング、SPP接続する前に、Android端末のBluetooth設定で”検出可能”にしておきます。(2011.11.27追記)

 

 

 ・Android開発環境を使う場合。

(1)まずAndroid端末とmbedをペアリングします。

 PINコードは”1234”です。

(2)つぎにBluetoothChatを起動します。

(3)メニューボタンを押すと、”connect a device”と表示されるのでこれを選択し、先ほどペアリングしたmbedを指定します。これでmbedと接続できるはずです。

(4)mbedとの接続がうまくいっていれば、Android端末から送信したものがエコーバックされてきます。

 ・GetBlueを使う場合。

(1)まずAndroid端末とmbedをペアリングします。

 PINコードは”1234”です。

(2)つぎにGetBlueを起動します。

(3)メニューボタン->settings->Datasource(Input)->Bluetoothを選択し、先ほどペアリングしたmbedを指定します。メニュー画面を抜けてスタートボタンを押すとmbedに接続できるはずです。

 注意:Datasink(Output)には何も設定しません。

(4)mbedとの接続がうまくいっていれば、Android端末から送信したものがエコーバックされてきます。

 

5.補足1

Window PCと接続したい場合。

mbedとPCをペアリングするとPC側にCOMポートが割り当てられるので、あとはそれを普通にシリアルポートとして”Tera Term”等で開けは良い。

 

6.捕足2

btserialクラスを使って通信する場合。

TestShell()関数を下図青枠のように修正して使う。

ただし、下図赤枠のように”else if(){.....}”の部分はコメントのままにしておいたほうが良い。

そうしないと、接続が確立する前に終了してしまう可能性があり動作が不安定になる。

(または、接続が確立したのを確認してから終了チェックするように改造する。)

あと、btserialのputc()は、改行コードが来るまではバッファにためるだけで、実際の送信をしないので注意が必要。

 

 ― 以上 −

コメント (0) |  トラックバック (0) | 

mbed + トラ技カメラBの実験。(その1)

2012年02月22日 | mbed

トランジスタ技術2012年3月号の特集で使っていたカメラモジュールが面白そうだったので、mbedでも使えないか実験してみた。

特集で使っているカメラモジュールには頒布カメラAと、頒布カメラBの2種類ある。

カメラAは動作電圧が3.0Vまでで、外部から24MHzクロックを入れてやる必要がある。

カメラBは動作電圧3.3Vでクロック内蔵だから、外付け部品なしでmbedに直結出来そうだ。

さっそくトラ技カメラBを入手して配線。

  

 

色々調べてみたら、すでにmbed + トラ技カメラBを動かしてプログラムを公開している方がいたので、ありがたく使わせていただくことにした。

ここのプログラムをインポートして試してみたらすんなり動いた。

OV7670_with_AL422B_QQVGA_test

mbedとカメラBの配線は直結で良かったが、SCL端子は2.2Kの抵抗で3.3Vにプルアップが必要だった。

 

 

これで、とりあえずカメラから何らかのデータを取る所までは出来た。

今度はこれを表示してデータが正しいか確認してみる。

  

 

画像データをUSBシリアルモジュールでPCに送り、Processingで表示してみた。

 

 

動いた!!ちゃんとカメラ画像が表示された。(左はちょっと手振れ)

    

 

カメラ画像が取れるようになったので、今度はMARY OB基板(OLED)に表示してみる。

配線がすごいことになってる。(^_^;)

  

 

MARMEX_OB基板もライブラリが公開されているので使わせていただく。 

MARMEX_OB基板OLEDライブラリ (MARMEX_OB_oled)

なぜかMARMEX_OB基板OLEDライブラリは、mbedライブラリを最新版(Revision39)にすると動かない... 

以前使ったRevision28があったので入れ替えてみたら動いた。

(@nxpfanさんのところではRevision39でも問題なく動作するという報告を頂いたので、これは自分の環境だけの問題かもしれない。)

 

 

やっと、MARMEX_OB基板OLEDライブラリが動くようになったので、カメラ画像を表示してみた。

  

 

参考までに、私が実験した手順をメモしておきます。

【手順1】

mbedとトラ技カメラB、MARMEX_OB基板の配線。

ピン配置等は、トラ技の記事やカメラBの資料、MARMEX_OB基板の資料、後で出てくるソースファイルを参照してください。(手抜きですみません。)

カメラと接続するSCL端子を2.2Kの抵抗で3.3Vにプルアップする以外は直結でOKでした。

【手順2】以下の2つのプログラムをインポートする。

OV7670_with_AL422B_QQVGA_test

MARMEX_OB基板OLEDライブラリ (MARMEX_OB_oled)

 【手順3】

”OV7670_with_AL422B_QQVGA_test”を改造ベースにするので、必要に応じてプログラム名を変更しておく。

次に、”MARMEX_OB_oled__HelloWorld”から下図のように2つのファイルをコピーする。(Ctrlキーを押しながらドラッグ&ドロップ)

 

 【手順4】"main.cpp"へ下図赤枠のように追加する。

 

  【手順5】"main.cpp"へ下図赤枠のように追加する。

 

 

【手順6】

プログラムをコンパイルして実行ファイルをmbedへダウンロードし、mbedをリセットする。

シリアルターミナルから何かキーを入力すると、このようにMARMEX_OB基板にカメラ画像が表示される。

 

 

表示速度を調べるために、カメラ画像取得−>OLED表示、を連続でやるように改造してみた。

表示速度は1fpsぐらいかな。OLEDへの表示をやらずに、カメラ画像取得だけなら2〜3fpsぐらい(LEDの点滅を見た感じ)。

 

(その2)へつづく... 

コメント (0) |  トラックバック (0) | 

小型無線LANカメラとmbedで物体追跡をやってみた。(サーボ2軸版)

2011年10月24日 | mbed

小型無線LANカメラとmbedで物体追跡をやってみた。(サーボ2軸版)

詳細はこちら

製作中の画像。

 

 

カメラもRCサーボモータも両面テープで固定している。(^_^;)

 

 

動画はこちら。

 

コメント (0) |  トラックバック (0) | 

小型無線LANカメラCS-W07G-CYとmbedで物体追跡をやってみた。

2011年10月03日 | mbed

小型無線LANカメラとmbedで物体追跡をやってみた。

無線LANカメラはPLANEXのCS-W07G-CY使用。小さく扱いやすくてなかなか良いのだが、結構熱くなる。

 

カメラ画像はPC(Windows 7)上のOpenCVで処理している。

OpenCVのサンプル”CamShiftDemo”をベースに、C#(OpenCvSharp)に移植して使用。

 

PCとmbed間はBluetooth接続。サーボ指令値だけをmbedに送っている。

無線LANカメラ−>無線LAN−>PC(OpenCVで画像処理)−>Bluetooth(サーボ指令値)−>mbed−>RCサーボ、という流れ。

 

物体追跡時の動画はこちら。

 

物体追跡時のPC側画面はこちら。
画像の動きがぎこちなく見えるのは、動画を作るための画面キャプチャがコマ落ちしているため。^ ^;)

 

今わかっている問題点。

1.物体の動きが速いと物体の画像がブレて、物体を認識できなくなる。

2.カメラを早く動かすとカメラ画像全体がブレて、上記と同様物体を認識できなくなる。

3.一度追跡を始めた物体がカメラの画面から外れると、画像処理で例外が発生する。<−時間あったら調べる。当面放置中。

 

苦労の割にいろいろ問題が多いのでOpenCvSharp版の物体追跡は開発凍結。

もっとシンプルでOpenCVを使わないProcessing版に移行することにした。(2011.12.24追記)

 

おまけ。

CS-W07G-CYを、SANWAのUSB出力付ポータブルバッテリー電源BTN-DC2Wで動かしてみた。単三エネループが使えるので電池代安上がり。

 

ここを参考にさせて頂いた。

・OpenCVのサンプルプログラム”camshiftdemo.cpp”

OpenCvSharp

電池で動くWi-FiカメラCS-W07G-CY(やっと)到着

プラネックスのネットカメラも試してみる

GAINER Mini と OpenCV で遊んでみよう

OpenCVからネットワークカメラのVideoAPIを利用 <−残念ながらCS-W07G-CYではうまく行かなかった。同じメーカのCS-WMV04NではOK。

―以上―

コメント (5) |  トラックバック (0) |