ケース、電源、無線LANを一緒に買ったので、結局 $70 くらいの買い物になったが。
この上でコンパイルするととてつもなく遅いので、CentOS 6.4 上でクロス開発環境を
構築してみた。(ぐぐっても CentOS 上でクロス環境を作った記事は少ないようだ)
例によって、
https://github.com/raspberry/tools
からクロスコンパイラを落としてくる。
CentOS の gcc は 4.4.7 と古く、上記のクロスコンパイラを動かすと
libstdc++.so.6 がないと怒られるので、Fedora の libstdc++ を入れてみた。
ネイティブは 64 ビット環境しか使わない予定なので、これでも特に困らないので
よしとした。
次に、眠っていた PS2(!) のアイトーイカメラを接続することを思い立ち、OpenCV を
インストールする。libX11-dev, libX11-doc のインストールに失敗して先に進めない
ので、Debian のホームページから gnulibaebhf 用のバイナリを落としてインストール
を完了。
この時点で Raspberry Pi 上にある /lib, /usr/lib を吸い出してクロス環境の
$(CROSS_HOME)/lib 以下にぶち込む。
試しにカメラからフレームを読みだして GTK+ のウィンドウに表示させるプログラムを
コンパイルしてみる。オブジェクトファイルを作成するところは成功するが、ライブラリを
リンクするところで失敗する。これは全てのライブラリをリンクできていないため
なので、付属の ldd を使って必要なファイルをすべて抽出する perl プログラムを作った。
巨大な LIBS 行が出来上がるのでこれを Makefile に追加してコンパイルを実行すると
うまくリンクできた。
あとは scp で Raspberry Pi に転送し、プログラムを起動すると、カメラ画像が
ウィンドウに表示される。320x240 ドットカラーで 5fps が限界のようだ。
motion のようにカメラの前を何かが横切ったら画像を保存するプログラムも書いてみた。
フレーム差分法と(「詳解 OpenCV」に記述されている)コードブック法を比較してみたが、
erode 処理をかませるとフレーム差分法で十分な精度が得られそうだったので、こちらを
採用(処理が幾分軽い)。
次の休みにはjpegファイルをネットワークでサーバに送り付けるプログラムを書こうかな。
/tmp, /var/tmp はデフォルトで SD メモリに取るようになっていますが tmpfs に取るように変更した方が
よいと思います。できれば /var/log もそうしたかったのですが、起動時のログを残したかったので今回は
SD メモリ上に設定しました。また、コンソールをつながない場合は IP アドレス固定した方が便利なので
dhcp から取得することをせず、static にネットワークを設定しました。
やり方はぐぐるといろいろ出てきます。
タグ:電子工作
まあ、ちょんプロなんですが。