「ロボット・電子工作・マイコン」カテゴリーアーカイブ

BeagleBoard-xMでUSBカメラ(その2)

前回、有線LANでUSBカメラ LOGICOOL C905m での動画配信の実験をしましたが、無線LANが使えるようになったので、無線LANで試してみました。

f:id:studio_k:20110529191608j:image
キーボード・マウス・ディスプレイは外し、PCからはsshで接続します。
ケーブルは5Vの電源ケーブルがつながっているのみです。こうなると早くバッテリで動かしたくなります。

前回と同じくmjpg-streamerで配信します。
当たり前ですが、特に問題なく動きました。スピードも有線LANと大きな違いはなさそうです(無線親機と1mぐらいしか離れていませんが。)

バッテリーで動くようになれば、とりあえずロボットに搭載して、PCから動画を見るのはすぐにでもできますね。

BeagleBoard-xM + Ubuntuで無線LAN

BeagleBoard xM rev.C + Ubuntu10.10に無線LAN子機「Planex GW-USValue-EZ」を導入し、ようやく(WPAで)接続ができました。

なお、無線親機にはBuffalo WZR-HP-G300NHを使用しています。

f:id:studio_k:20110529190549j:image

BeagleBoard xM にGW-USValue-EZを取り付けたところ。小さい!!!

GW-USValue-EZのドライバはUbuntu10.10には含まれていないため、USBに挿しただけでは認識しませんでした。

GW-USValue-EZにはRTL8192CUが使われており、メーカー(realtek)のサイトからLinux用のドライバーがダウンロードできます。ただし、ソースなので、コンパイルが必要です。

以下に手順メモを記載します。

(2012/6/9追記 Ubuntu11.04以降にはドライバが含まれていましたので、コンパイルは不要です。)

【ドライバーのインストール】

  • ドライバーソースをダウンロード

http://www.realtek.com/downloads/downloadsView.aspx?Langid=4&PNid=21&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false&Downloads=true

今回はRTL8192CU_linux_v2.0.1502.20110402.zip をダウンロードしたが、5/28時点で新しいドライバが公開されている。

  • ソースを解凍するためUNZIPをインストール

$ sudo apt-get install unzip

  • ソースの解凍

$ unzip RTL8192CU_linux_v2.0.1502.20110402.zip

  • ドライバーのビルドとインストール

$ cd RTL8192CU_8188CUS_8188CE-VAU_linux_v2.0.1502.20110402
$ sudo sh install.sh

以下のエラーで止まった。

/lib/modules/2.6.38.4-x3/build: No such file or directory.  Stop.

/lib/modules/2.6.38.4-x3

build -> /build/buildd/linux-2.6.38 へハードリンクが張られているが、リンク先が存在しない。

カーネルのビルドを行った。


★カーネルのビルド

$ sudo apt-get install bzr
$ cd
$ sudo bzr branch lp:~beagleboard-kernel/+junk/2.6-stable
$ cd 2.6-stable/
$ cp system.sh.sample system.sh
$ sudo ./build_kernel.sh

なんか聞いてくるが、デフォルトで。

(ビルドするのに8時間ほどかかった。)

※今回はカーネルをビルドしたが、以下でよかったかも。

$ sudo apt-get install kernel-devel


以上で、カーネルのビルドができたので、ドライバーのビルドに戻って、、、

$ cd /lib/modules/2.6.38.4-x3
$ sudo rm build
$ sudo ln -s /home/ubuntu/2.6-stable/KERNEL build

なぜかアーキテクチャ(arm)がうまく取れないので、セットするように修正

$ sudo vi /home/ubuntu/2.6-stable/KERNEL/Makefile

SRCARCH         := $(ARCH)  の下に
SRCARCH         := arm      を追加

$ sudo sh install.sh

コンパイルが進むが、usb_intf.cでエラー

http://blog.livedoor.jp/mtk_sugi/ を参考に、以下のように修正

$ sudo vi driver/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/usb_intf.c

コメントアウト://pdvobjpriv->pusbdev->autosuspend_delay = 0 * HZ;//15 * HZ; idle-delay time
追加:pm_runtime_set_autosuspend_delay(&pdvobjpriv->pusbdev->dev, 0 * HZ);

install.shがdriverディレクトリを解凍してusb_intf.cを上書きしないように、tarしているところをコメントアウト

$ sudo vi install.sh

#tar zxvf $Drvfoulder

$ sudo sh install.sh

無線子機(GW-USValue-EZ)をUSBに指して、

$ lsmod

で、8192cuができていればOK。また、

$ ifconfig

で、wlan0ができていればOK

ここまでできれば、後はBeagleBoardというよりはUbuntuでの無線LANの設定の問題となる。

【無線LAN親機の設定】

今回使用した、Buffalo WZR-HP-G300NHでは無線の認証方式が「WPA/WPA2 mixedmode – PSK」となっており、この設定だとうまくいかないとの書き込みがネット上にあったので、「WPA-PSK」の固定に変更した。(この設定を変更するとつながらなくなるかは当方では未確認です。)

★設定手順

  • WEB設定画面にログインし、「無線設定」-「基本(11n/g/b)」を開く

無線の認証を「WPA-PSK」、無線の暗号化を「AES」に変更

  • 「無線設定」-「AOSS」を開く

暗号化レベル拡張機能を「無効」に変更

【無線LAN設定】

  • network-managerが動いているとうまくいかないので、停止させる。

デフォルトでは入っていないかも。入っていない場合は不要。

$ sudo stop network-manager

  • アクセスポイントのスキャン

$ iwlist wlan0 scan

で、無線親機のSSID等が表示されれば無線のドライバやハードは動いていると判断できる。(無線親機のSSIDがステルスモードの場合は表示されないと思われる。)

  • /etc/network/interfacesを以下のようにする

auto lo
iface lo inet loopback
auto wlan0
iface wlan0 inet static
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1
broadcast 192.168.0.255
wpa-driver wext
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

※なお、有線LANの設定は消しています。

※IPはDHCPではなく、固定としています。IPアドレスはネットワークに合うように適当に変更してください。

  • 暗号キーをwpa_passphraseコマンドで暗号化する

$ wpa_passphrase SSIDを記入 暗号化キーを記入

以下のような結果が表示される。

network={
ssid="指定したSSID"
#psk="指定した暗号キー"
psk=暗号化された暗号キー
}

  • /etc/wpa_supplicant/wpa_supplicant.confを編集

network={
ssid="無線親機のSSIDを書く"
proto=WPA WPA2
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk=wpa_passphraseの暗号化された暗号キーを指定
}

  • confファイルの確認

$ sudo wpa_supplicant -iwlan1 -c /etc/wpa_supplicant/wpa_supplicant.conf -Dwext

  • 無線設定確認

$ iwconfig

で、ESSID等が表示されていればうまくいっている。

wlan0     IEEE 802.11bgn  ESSID:"指定したSSID"  Nickname:"<WIFI@REALTEK>"
Mode:Managed  Frequency:2.422 GHz  Access Point: XX:XX:XX:XX:XX:XX
Bit Rate:150 Mb/s   Sensitivity:45/0
Retry:off   RTS thr:off   Fragment thr:off
Power Management:off
Link Quality=99/100  Signal level=-45 dBm
Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
Tx excessive retries:0  Invalid misc:0   Missed beacon:0

  • 設定を変更した時は以下でインタフェースを再起動させる。

$ sudo ifdown wlan0
$ sudo ifup wlan0

  • NetworkManagerをOS起動時に起動しないようにする

NetworkManagerが起動していると、うまくいかないため、停止させる。

※NetworkManagerはもともとは入っていなかったかも。

ランレベル毎に起動設定ができるはずだが、sysv-rc-confやupdate-rc.dを試してみたがうまくいかない(良く分からない)ので、/etc/init以下のファイルの拡張子を.conf以外にしてすべてのランレベルで起動しなくなるようにする。

※redhat系のchkconfigとは設定方法が違っていて良く分からない

$ cd /etc/init
$ sudo mv network-manager.conf network-manager.conf.bak

OSを再起動して、ping等で通信できればOK。

YOKAロボまつり20

f:id:studio_k:20110529170206j:image:w640
本日ROBOSQUAREにて開催されたYOKAロボまつり20バトル大会に親子で参加してきました。運営の皆様、参加者の皆様、お疲れ様でした。
前回参加したYOKAロボまつり16から約半年ぶりの参加です。
(我々の機体「ポンタ1号」は写真の左端です。)

【前回からの変更点】

  • 腕を伸ばしました。
  • モーションを改良しました。
  • 急速充電器を導入しました。(ラジコン用のPERFECT5000です。)
  • モーションの作成時に使用する電源は前回は単3のeneloopをケーブルでつないで使っていましたが、PCのATX電源の12Vを使用するようにしました。
  • 前回はeneloop単4×9本を電池ボックスに入れたものを使っていましたが、バトル中に電池が外れてしまうトラブルがあったので、はんだ付けしてパッキングしました。パッキングは物干し竿用の熱収縮チューブ(太さ3.8cm~4.2cm用)を使いました。

f:id:studio_k:20110529171732j:image:w200
f:id:studio_k:20110529171723j:image:w200
※電池のはんだ付けは危険なのでお勧めしません。自己責任でお願いします。

ポンタ1号の結果は、、、
[予選1戦目]拓歩
今回優勝した拓歩との対戦。
ロボットのスピードと安定感が全く違いますね。。。負けました。

[予選2戦目]impulseRB
途中までは良い試合でしたが、前回に引き続いてまたもや電源のトラブルで起き上がれず。負けました。

今回も1勝もできず、予選2敗でした。残念。
初勝利を目指して頑張ります。

バキューム成形

f:id:studio_k:20100904223256j:image:w200:left

KHR-2HVのフロントカウルをなぜかなくしてしまい(笑)、
↑こんな電池カバーをつけていましたが、ねじでとめていたので電池の交換に時間がかかるのと、電池の固定が甘く接触不良の原因になっていました。
完成品を買うことも考えましたが、今後その他の外装等も作りたいと思い、バキューム成形に挑戦してみました。
成型機は「桃象」のような既製品もありますが、今回は自作してみました。

まず、型を乗せる台を作りました。虫かごか、魚をとる罠のようなものができました(笑) 150mm×200mmの大きさですので、あまり大きなものは作れません。しかし、大きくすると、板の無駄も多くなるのでこの大きさにしました。

写真のパイプは掃除機をつなぐためのものです。
空気が漏れないように隙間はホットボンドでふさぎました。
f:id:studio_k:20110529153618j:image:w320

型の素材には¥100均の発泡スチロールブロックを使用してみました。
<メリット>

  • 安価
  • カッターや電熱線でらくらく切れる(↓こんなものを自作しました)

f:id:studio_k:20110529154539j:image:w160

<デメリット>

  • なんとなく想像はしていましたが、熱いPP板を乗せてバキュームした際に発泡スチロールが溶けてくっついてしまう。このために、1回しか使用できない(笑)
  • 表面が溶けてしまい、成形した板の表面が鳥肌のようにざらざらになる

やはりバルサ材が良さそうですが、コストがかかるのが難点です。また、削るのも大変そうです。バルサ材は近くのホームセンターには10mmぐらいの厚さのものしか置いていませんでした。型の材料は今後の課題です。
なお、今回はオリジナルのフロントカウルと似たような型にしました。

板の素材は¥100均のPP板(A4サイズ3枚入り)を使用しました。
ネット上の情報では塩ビ版が冷めにくくて良いとのことでしたが、近くのホームセンターには売っていませんでした。塩ビ板を試していませんので比較はできませんが、このPPシートでは冷めるのが早いような気がしました。
次回も塩ビ板を入手できなかった場合は白いプラ板を試してみようと思います。(透明なプラ板は熱すると縮んでしまうためだめらしいです。)
f:id:studio_k:20110529153617j:image:w320
材料のPP板を枠ではさんでねじでとめるようにしました。

板の加熱にはオーブントースターを使用しました。オーブントースターをある程度余熱してから枠ごと投入しました。最初、波打つように変形し、その後、だらーんとなったタイミングで取り出しました。
電熱器がなかったのでオーブントースターを使いましたが、オーブントースターは意外にも全体が温められてやりやすかったです。(今回のサイズより大きくなると入りませんが。)

掃除機のスイッチを入れ、一息に型に押しつけました。枠と台の隙間からかなり空気を吸い込んでいましたので、目張りをする等の工夫が必要です。

↓成型後の様子。結果的には初めてにしてはまあまあのものができたと思います。(これだけで丸1日かかってしまいましたが。。。)
f:id:studio_k:20110529153619j:image:w320

↓塗装して、ロボットに取り付けたところ。(割りピンも無かった(笑)ので、クリップを曲げて作りました。)
f:id:studio_k:20110529153620j:image:w320

この機体で明日のYOKAロボまつり20に参加します。

BeagleBoard-xMでUSBカメラ

購入していたUSBカメラ LOGICOOL C905m を試しました。
f:id:studio_k:20110507162723j:image:w320

まずはluvcviewを使用してローカルのコンソールにカメラの映像を表示します。

luvcviewを取得して、インストールします。

sudo apt-get install luvcview

USBにカメラをつないで、以下のコマンドで実行します。

luvcview -i 15 -f yuv -w

「-f yuv」をつけないと画面がちらついてきれいに表示されませんでした。このカメラのmotion-jpegの品質が良くないのかもしれません。

f:id:studio_k:20110507162724j:image:w320
写真右側のカメラでとったぬいぐるみが画面に表示されています。やった!!!(なお、ディスプレイはBeagleBoardのHDMI端子に接続されています。)

次に、http://nobotronics.blogspot.com/2011/02/beagleboard10uvcstream.html を参考にuvc-streamerの環境を構築しました。
しかし、PC側のFireFoxで表示したところでは一瞬表示されるものの、すぐにサーバ側がSegmentationFaultで落ちてしまいます。
FireFoxが悪いのか、カメラのmotion-jpegが悪いかどちらかだと思います。

上記サイトのhttp://nobotronics.blogspot.com/2011/02/beagleboard11uvcstream.html にて紹介されているmjpg-streamerの方を試したところ、こちらはうまく行きました。
ただ、タイムラグが2~3秒程度発生します。(タイムラグは解像度を下げれば若干改善するかもしれません。)(5/28追記 解像度をVGA(640×480)にしていましたが、QVGA(320×240)ではタイムラグは1秒弱になりました。)