「お父さんだって夏休みの自由研究がしたい!」第一弾です。すみませんが、長文です。
ちなみに第二弾は多分ありません。だって一人で自由になれる夏休みはあと1日もないんだもん(笑)。
8bitマイコンと廉価なカメラモジュールによるサッカーゴール認識が出来るかも ? というモジュールをやっと見つけましたのでテストしてみました。
モジュールを作成された fenrir 様のご厚意により、こちらをお借りすることが出来ましたので、RCJ サッカーに使えるか Arduino を使ってちょっとやってみました。
モジュールの本来の目的は「猫カメラ」だそうで MicroSD・GPS・Bluetooth・加速度センサ等も搭載出来るようです。sparkfunのTCM8240MDと Altera の FPGA を使用して実装されたようですが、「私も人生で一回で良いからこういうものが自作出来るようになりたい!!!」という素晴らしい出来のモジュールです。またも FPGA に対する興味がフツフツと...私は多分スキル的に死ぬまで無理でしょうけど(泣)。
で、本題に入ります。モジュール自体は 15fps で画像をサンプリング出来ますので、画像の品質と言う意味ではロボットのスピードへの追従はまずまずいけるレベルかと思います。問題は I2C による転送時間ですが、fenrir 様作成の WireExt を使用すると 1Mbps(beginReception(hoge,0)) まで転送レートを上げることが出来ます。
CCD の性能から見るとひどく贅沢な使い方ですが、転送時間を短縮するために最低の解像度である subCIF(128 x 96) でやって見ましたが、ケーブル長やいい加減な試行環境によるものか、667Kbps (beginReception(hoge,1)) が精一杯でした。これでも 1.4 fps 程度の転送が可能でしたので、1Mbps出来れば 2fps くらいはいけるかも知れませんし、もっと解像度落とせればより高速な転送できるはずです。。
現時点で達成できている転送レートだと、フルスピードで走行しながらの姿勢制御は無理で、ボールを確実に捕捉した後の動作等に適しているレベルと思います。ただし、カラーセンサーと違って一発読めばゴール中心を割り出せますので、対象と出来る用途は広がるはずです。
あと、この CCD はかなり厄介者で、データシートを見ても設定パラメータに何を設定したら良いのか分からないという問題があります。sparkfun さんのこちらの掲示板をじっくり読んでみましたが、皆苦労しているというのが分かっただけ...
色々パラメータ調整して見ましたがピンクが強くなる傾向は取り除けず、fenrir 様のこちらのパラメータ例にまい戻ってしまいました。多分、パラメータ調整でなんとかなるはずなんですが...今後やってみます。どなたかうまくいけば教えて下さい。以下のサンプル画像はごく簡単な整数演算で出来るレベルで弱い補正をかけたものです。まだかなりピンク入ってます(泣)。でも結果的に黄色と青色なら救えそうなところがまた RCJ サッカー向きかと...(笑)
以下、45cm 先のゴールの画像です。多分ゴールの幅の 80% 程度まで撮影出来てます。

以下、100cm 先のゴールの画像です。
以下、160cm 先のゴールの画像です。背景は恥ずかしすぎるので見ないようにしてね(笑)。
もうちょっと光学系が広角だったらベストなんですけどね。
で、ここからが重要ですが、Arduino の SRAM には 1 フレーム分の画像情報は入りませんので、1 フレーム取り込んでからのんびり画像処理することなんて出来ません。画像データを読み取りながら逐次的処理で画像を処理する必要があります。実際にちょっとやってみましたが、出来そうです。でも、これ以上書くと今後トライするチームにとって面白くなくなるので、詳しくは書きません。ヒント : 二次元的な動きしかしない RCJ サッカーのロボットの前面に位置するカメラでは二次元画像は必要なく、一次元で十分と考えます。
このモジュールは、今後スイッチサイエンスさんやFPGA-Cafeさんで購入できるようにしたいとのことです。もし数千円で販売されれば、ロボカッパー達にとって選択肢の一つになると思います。
テストは Arduino と Processing (私として今回初めてのトライ!!!) で行いました。テストに使用したソースコードは拾い物も混ざってますので公開OKか確認の上、今後出来る限りの範囲で公開したいと思います。
8/14 以下追記しました。続きを読む