カテゴリー別アーカイブ: BeagleBoard

BeagleBoardへUbuntu12.04とOpenCV2.4のインストール

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を使用していました。

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

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

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

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

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か月の短いペースでバージョンアップする予定のようです。

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

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

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

カメラの画像が遅延する

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

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

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


OpenCV カメラの遅延の対策

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

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

対策として、

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

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

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

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

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

のところを

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

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

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


自走BeagleBoard(その5:OpenCVで顔画像認識2)

前々回の笑い男ハッキングの画像を変更して、メガネにしてみました。(プログラムの変更はしていません。)

顔の位置に自動的にメガネを描画します。

メガネの通販サイトに売り込みできるかも!(笑)

髪型も同じようにできますね。美容院に売り込みできるかも!(笑)

f:id:studio_k:20110813094915j:image


自走BeagleBoard(その3:OpenCVで顔画像認識)

前回の自走BeagleBoardはカメラの画像をOpenCVを通してからブラウザに送っていて、OpenCVを使って画像処理ができるようにしていました。
今回はOpenCVで定番の顔画像認識に挑戦してみました。
プログラムはBeagleBoard上で動いてはいますが、このあたりはOpenCVの世界でWindowsやLinuxでも同じように動作しますのでBeagleBoardだけの話でもないです。

下の映像はROBOCON Magazine No.29(だいぶ古いです)の表紙を映してみたところです。
顔と認識した領域を赤枠で囲っています。
ここまでできれば人の顔を追跡するロボットはすぐにできそうです。
f:id:studio_k:20110806184948j:image

おまけで、笑い男ハッキング機能を搭載しました。(笑)
f:id:studio_k:20110806184945j:image