Hatena::ブログ(Diary)

STUDIO-K PONTAの日記

2012年10月7日にサイト移転しました。
新しいアドレス: http://blog.studiok-i.net/

2012年10月07日

[]サイト移転 18:24


ブログおよびホームページを移転しました。


新しいアドレスは以下になります。(ドメインを取得しました。)

ブログ : http://blog.studiok-i.net/

HP : http://www.studiok-i.net/


ブログの内容は移転先に移しました(一部レイアウトが崩れてしまっていますが。)


はてなダイアリーは2009年1月から3年9カ月程使用させていただきました。ありがとうございました。

本サイトの内容はそのまま残しますが、今後は移転先の方のみ更新します。


今後ともよろしくお願いします。

2012年10月03日

[]mbed 23:18

f:id:studio_k:20121002225231j:image:w320


mbed NXP LPC1768を入手したので、以下を試しました。


LEDチカチカ

「Getting started」のサンプルにある、Lチカは特に問題なく動きました。

簡単!!


PCとのシリアル通信

同じく「Getting started」のサンプルにある、PCとのシリアル通信も問題なく動きました。

数行で通信できます!!


WiiリモコンとのBluetooth通信

BlueUSBというプログラムが公開されていて、そのまま動きました。

f:id:studio_k:20121003231354j:image:w200

感動!!

PS3コントローラーとのBluetooth通信

PS3_BlueUSBというプログラムが公開されていて、少しの修正で動くはずですが、、、

動きませんでした。。。


コントローラの裏に書いてある”MODEL NO. CECHZC2J”の後ろに"A1"と付いている新しいタイプはうまくいかないとのことです。

僕のコントローラにはCECHZC2JEB1と書かれています。B1なのでさらに新しいタイプということですかね。。。英語版なのも関係あるでしょうか?

惜しいところまで行っているようなのですが。

f:id:studio_k:20121003231448j:image:w200


なお、いUSBのBluetoothドングルとして、PlanexのBT-MicroEDR1XとBT-Micro3E1Xを使用しました。

2012年10月01日

[]FM3マイコンでLチカ 23:04

販売されてからだいぶ経ってしまいましたが、インターフェース誌2012年6月号付属のFM3マイコン基板 (富士通製Cortex-M3コア搭載マイコン MB9BF618T)を試してみました。


f:id:studio_k:20120929225622j:image:w320


今回のFM3マイコン(MB9BF618T)のスペックはかなりの高スペックです。

動作クロック144MHz
フラッシュROM1MB
RAM128KB


開発ツールにIARの評価版(32KB制限)を使用して、SysTickタイマを使用したLED点滅のサンプルは本に書かれている通りであっさり動きました。

しかし、フラッシュROMが1MBもあるのに32KBまでというのはつらいです。(30日間期間限定もありますが、現在の私のペースではほとんど動かさずに期限オーバーとなってしまうでしょう。)

MDK-ARMの評価版も32KBまでとのことです。


そこで、インターフェース誌2012年7月号で紹介されていた、GCC+Eclipseベースの開発ツール(Pizzafactory8 CQ版)を試してみました。

CQ版と言いつつそのまま動くようにはなっていないようでかなり苦労しましたが、ここなどを参考に、なんとかLED点滅サンプルが動きました。

2012年08月04日

[]Kinectデモ 23:16

2012年7月22日に福岡市のロボスクエアで行われたYOKAロボまつり26で、Kinectのデモをさせていただきました。

D

マグネットさん、ビデオの編集ありがとうございます。


当日は思うように動かないバージョンでしたが、その後、逆運動学の計算式を使ったプログラムに改良して、だいぶスムーズに動くようになりました。

現在、Wiiリモコンと組み合わせて、歩行モーションを指示できるように改良中です。

これでバトルもできるかも!?

2012年06月10日

[]Kinectで2足歩行ロボを操縦できるようにしてみた 20:15

前回の獅子舞ロボに引き続き、KHR-2HV(ポンタ1号)をKinectで動かせるようにしてみました。

D

少し動きが変ですが、Kinectの認識精度の問題なのか、角度計算のプログラムの問題なのかよく調べていません。

角度は各関節の座標からatan2で計算しています。Kinect1.5では関節角度をとれるようなので、そちらを使った方が正確かもしれません。

ロボットの関節は人間の関節とは似ているようでだいぶ違うので、なかなか思うようには動かせません。

今回、動かせるのは上半身と股+足首です。股と足首は同期させています。

2足歩行ロボなので歩かせたいですが、Kinectで歩かせるのは難しいです。別のコントローラーと組み合わせてモーションで歩かせたり、歩くような動き(ジェスチャ)を認識してモーションで歩かせる手はあります。

2012年06月09日

[]BeagleBoardへUbuntu12.04とOpenCV2.4のインストール 22:40

5/1にUbuntu12.04とOpenCV2.4が立て続けにリリースされたので、BeagleBoardへ入れてみました。

1.Ubuntu12.04について

以下のサイトを参考に、プレインストールイメージからインストールしました。

http://legacyos.homeip.net/beagleboard2/

http://elinux.org/BeagleBoardUbuntu

そのほかの設定もこれまでと同様の手順で、特に問題なくインストール完了しました。

試してはいませんが、12.04ではarmhf(ARM Hardware Float)版となり、浮動小数点演算のパフォーマンスが上がるのではないかと思います。


2.無線LANについて

前の記事前の記事では

・無線親機 Buffalo WZR-HP-G300NH

・無線子機 PLANEX GW-USValue-EZ

を使用していました。

その後、無線親機をNEC Aterm WR8750Nに変えたところ、どうやってもGW-USValue-EZから接続できなかったため、無線子機にはBuffalo WLI-U2-KG54を使用していました。

その際、以下のようなエラーが出て、通信も安定しませんが、

phy0 -> rt2500usb_set_device_state: Error - Device failed to enter state 3 (-16).
phy0 -> rt2x00lib_autowakeup: Error - Device failed to wakeup.

以下のコマンドでパワーマネジメントをOFFにすると直りました。(wlan2の番号は環境に合わせる必要があります。)

/sbin/iwconfig wlan2 power off

OS起動時にOFFにするために、/etc/rc.localに以下を追記しています。

(ただし、スクリプトが実行されるタイミングが遅いため少しエラーが出ます。)

/sbin/iwconfig wlan2 power off

GW-USValue-EZが11nに対応し最高150Mbpsの通信速度に対して、WLI-U2-KG54は11gで最高54Mbpsとなりますが、WLI-U2-KG54の方が電波の通りが良いようで、実質はあまり問題はありませんでした。

Ubuntu12.04でも上記と同様にGW-USValue-EZはNGで、WLI-U2-KG54もパワーマネジメントをOFFで通信ができるようになりました。


3.OpenCV2.4について

今回は2.4をインストールしましたが、6/2に既に2.4.1がリリースされています。今後は1〜2か月の短いペースでバージョンアップする予定のようです。

ビルドに必要なパッケージのインストールから、ビルドまで以下の通り。

# sudo apt-get install ffmpeg
# sudo apt-get install libgtk2.0-dev
# sudo apt-get install libavcodec-dev
# sudo apt-get install libavformat-dev
# sudo apt-get install libjpeg8-dev
# sudo apt-get install libtiff4-dev
# sudo apt-get install libgif-dev
# sudo apt-get install libv4l-dev
# sudo apt-get install cmake

# mkdir opencv
# mv OpenCV-2.4.0.tar.bz2 opencv
# cd opencv
# tar xjf OpenCV-2.4.0.tar.bz2

# mkdir release
# cd release
# cmake -DBUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_PYTHON_SUPPORT=ON ../OpenCV-2.4.0
# make -j 2
# sudo make install
# sudo ldconfig

2.3.1までは、当環境にて使用しているUSBカメラ(LOGICOOL C905m)では以下の対応が必要でした。

MJPEG形式が使用できないので、YUYV形式を使用する

カメラの画像が遅延する

2.4ではC905mでもMJPEGが使用できるようです!!

また、その結果非常にスムーズに表示され、ソースを変更しなくても遅延も少なくなりました。


Ubuntuのバージョンアップではあまり違いを感じられていませんが、USBカメラ(LOGICOOL C905m)が問題なく使えるようになったのが非常にうれしいです。

2012年05月06日

[]Kinectで獅子舞ロボをコントロール 18:00

2年前に子供が作った獅子舞ロボをKinectでコントロールできるようにしてみました。


f:id:studio_k:20120506175821j:image:w480

獅子舞ロボはArduinoとサーボ×2でできています。

PCに接続したKinectで関節(Kinectではスケルトンと呼んでいます)を認識して、PCからシリアルで接続したArduinoに前後・左右の角度を送っています。


D


2自由度ですが、思ったよりも良く動くので、人型ロボットで動かしたくなりました。

2012年04月18日

[]自走BeagleBoard(その7) 〜カメラにサーボをつけた〜 22:04

f:id:studio_k:20120418220323j:image:w480

BeagleBoard台車のカメラが上下するようにサーボをつけてみました。

これで高い位置にある熱帯魚の水槽の様子も確認できます。(笑)


また、子供のラジコンのタイヤをもらったので付けてみました。

少しの段差なら乗り越えられるようになりました。

2012年02月26日

[]自走BeagleBoard(その6) 〜テニスボール追跡〜 20:30

自走BeagleBoardでテニスボールを追いかけるようにしてみました。

D

すでに半年以上前になってしまいましたが、前の記事でボールを認識するところまでできていたので、ボールの位置を元に機体の向きを変えて、ボールが正面にある場合は前に進むようにしています。

ボールが近くにある時に自機の陰になって見えなくなってしまうため、カメラの位置を高くして、上から見下ろすようにしてみました。


また、最近購入したAndroidタブレットからでもコントロールできました。

f:id:studio_k:20120226202259j:image:w320

2011年08月14日

[]OpenCV カメラの遅延の対策 00:13

うちの環境(BeagleBoard-xM + Ubuntu11.04 + OpenCV2.3.0)だけの問題かも知れませんが、重い画像処理を行うと、カメラの映像がひどく遅延してしまう現象が発生しています。

例えば、BeagleBoardで顔認識を行うと3FPSぐらいになります。3FPSであれば0.3秒程度遅延するのは分かりますが、実際には2〜3秒ぐらい遅延してしまいます。3秒も遅延すると画像認識した結果でロボットを制御するのは難しいと思います。


対策として、

    frame = cvQueryFrame (capture);

を数回繰り返して取得したイメージを捨てると遅延は少なくなります。しかし、無駄な処理を行っているようで納得できません。(実際、FPSも下がります。)

これで改善されることから、バッファリング関係の処理が影響していることは分かりました。


OpenCVのcvSetCapturePropertyで設定する、CV_CAP_PROP_POS_FRAMESやCV_CAP_PROP_FPSあたりのパラメータで回避できないかいろいろ試してみましたが、うまくいかず。OpenCVのソースを調べてみると、実装されていませんでした。。。


そこで、最後の手段で、OpenCVのソースを変更してみました。(これが正しい対応方法かどうかはわかりませんし、何か副作用がある可能性は高いです。)


OpenCV-2.3.0\modules\highgui\src\cap_libv4l.cpp の

#define MAX_V4L_BUFFERS 10
#define DEFAULT_V4L_BUFFERS 4

のところを

#define MAX_V4L_BUFFERS 1
#define DEFAULT_V4L_BUFFERS 1

のように変更して、OpenCVをコンパイルしなおしました。


この方法で、FPSは下がらずに、遅延もFPS相当程度(3FPSなら0.3秒ぐらい)になりました。

しかし、処理が速い場合にはFPSが上がらなかったりする副作用があるかもしれません。

SpiralRaySpiralRay 2011/08/15 19:41 こんにちは。ロボカップジュニアに参加していた高三です。
私もBeagleBoard-xMを購入していてOpenCVを使っていたのですが、同様に延髄に悩まされていました。
ジュニアサッカーのゴール認識ではすごい延髄で(http://www.youtube.com/watch?v=EORBC2BP5A4)マイコンで作ったやつのほうが15fps近くでていて実用的だなと思っていたのですが、これで解決できそうです。早速試してみたいと思います。
BeagleBoard開発お互いがんばりましょう!

PONTAPONTA 2011/08/15 22:29 SpiralRayさん、こんにちは
YouTubeおよびBlogを拝見しました。
SH-2AとかSTBeeとか、やりたいことがかなりかぶっていますが、だいぶ先に行かれている感じです。こちらはこれからジュニアサッカーのゴール認識をやってみる予定ですし(笑)
頑張って追いつきます!