こんにちは。
今まで僕が作ったなかで一番まともなプログラム、マイコンを利用した画像解析による高速ゴール検出プログラムについてきちんと書いておこうかとおもいます。RCJ参加者向けなツマラナイ話です。

使用マイコンはSH-2A(SH7262)
2010年6月号のInterfaceの付録についていたものです。
何故SH-2Aを使用するか、理由は二点あります。
一点目は処理速度の面です。
SH7262は144MHzはミドルクラスのマイコンとしては最高レベルの速度を誇っています。
僕は主にSTM32も使用していますが、現在主流のF1シリーズの周波数は72MHzであり、SH-2Aの半分にしか及んでいません。(そんな単純なものじゃありませんが)
FPU搭載など、計算速度なら他の低価格マイコンにはそう簡単には負けないでしょう。(STM32F4くらい?)

二点目はVDC(Video Display Controller)を搭載していることです。
これが重要です。
ロボカップジュニア(サッカー)では、過去にTrevaを使って画像解析をしているチームがあったようですが、機体停止時に2fpsしか出せないなど、非常に処理が遅いです。UARTで画像を取得するのにかなりの時間が必要となってしまうようです(工夫すれば少しは改善されるとは思いますが)
しかしVDCを使うことによって、初期化さえすればマイコンでカメラの画像を取得することなく、勝手にメモリ上にカメラからの画像が更新されていきます。つまり、高画質にも関わらずマイコンでの処理は0ということになります。
今回はカメラの画像は352×240で取得しています。

問題点もいくつかあります。
まず、配線がヤヴァい点です。
RGB565、同期信号などで最低でも25本くらいはつなげないといけません。また、カメラも同様にヤバいです。
あと、外部からプログラムを起動しないといけないので、SDカードスロットも必要となります。

更に、対応しているカメラが少ない点です。
ノンインターレース方式のITU-656方式のカメラが必要になりますが、カメラで主流(?)なオムにビジョン社のカメラOV系はインターレース方式を採用しているので使用することができません。
国内で簡単に手に入れられるのは秋月で売っているカメラ、MTV-54K0DNくらいでしょう。

これらの問題を解決するために株式会社TACの拡張基板T-SRSを使用します。
IMG_1164
IMG_1167
T-SRSにはMicroSDカードスロット、タッチパネル付4.3インチ液晶、NTSC入力端子が付いてます。
これによって配線の複雑化が防げ、なおかつ使用できるカメラが圧倒的に広がります。
また、32MByteの外部RAMが付いています。
何があってもRAMに困ることはないです。

プログラムの特徴を書いておきます。
主な点はTOPPERS/ASPを使用しています。
RTOSを使用することで、画像処理タスクと画面(タッチパネル)処理・シリアル送信タスクの2つのタスクに分けています。
(シリアル送信も別にタスクにしたかったが、試したところ何故か送信されなかった)

画像処理のアルゴリズムは…自分で考えてください。
書いたところで意味がないので…
注意するべき点だけ書いておきます。
広角カメラを使用した場合、屈折率の関係で青色のラインができてしまいます。これをプログラム的に除去する必要があります。
また、フィールド外に青が黄色がある可能性があります。それにもある程度対処する必要があります。

実際にこれらを対処したプログラムを書いたところ、秒間15回の処理をできています。
画像の縮小などはしていません。352×240を解析しています。

IMG_1208
操作方法ですが、タッチパネルによるボタン操作になっています。ここのプログラムは僕が作ったものではないため触れません。
右下にあるボタンBT11を押すことによって黄色のゴールを検出するか青色のゴールを検出するかの設定が変わります。
その他のボタンはあまり関係ないので無視します。

一番左上に表示されている数字がfpsの値を示しています。
ゴールがある場合は15fps程度で安定します。

デカデカと写っているカメラの画像の中に紫色の四角が描かれていますがそれがゴールの位置となっています。

色の閾値調整していないのでゴールの中央が必ずしもキレイに出るわけではないですが、実際に解析している画像を貼っておきます。

自ゴール側のどの位置からでも相手ゴールの位置を検出することができています。これで正確な方向にシュートすることができます。

ちなみに、この解析結果はシリアル通信でメインマイコンに伝えられます。

実行中の画像

IMG_1172

斜めからでも

IMG_1175

IMG_1171

フィールド真ん中
IMG_1179

IMG_1205

遠くからでもー!!(画像ぼけてる)

IMG_1181

IMG_1193

昔YouTubeに上げた動画です。見にくいですが…w

画像解析についてはここまでにします。

他には
SDから半角、全角のフォントのロード、画面への描写機能
SD内のbmpファイル表示機能(480×272に限る)
ms3再生機能
があります。

カメラを利用したプログラムとして、他にはライントレーサーも作りました。

PID制御を搭載してスムーズに動くようにしました。(動画が古く、プログラムにミスがあったときのものしかなくカクカクしていますが…)

これくらいでカメラに関しては終わりにします。
以下話が変わります。

最近のRCJサッカーはモーターばかりに気を取られていて、制御がきちんとできているチームが無いように感じられます。(僕の個人的感想ですが)フィールドB、世界二位のチームすらきちんとゴールに向かっていません。

RCJ参加者のみなさんには(最悪でも)AVRくらいは扱えるようになって欲しいです。「おもちゃで遊ぶ」はやめて、きちんと計画的に学ぶ姿勢をしっかりと持ってください。

言わなくても持っているとはおもいますがー(棒

ぐちぐち言ってもしかたないんで、これくらいで。
では。

設計完了

soccer

サッカー基板。メインボードです。IRセンサ、XBeeを付けられるだけではなく、モータードライバや超音波の距離センサを直接ドッキングすることができる便利な基板です。

stm32_gen

STM32、F1、F2両対応の基板です。ICのピッチが6mil未満ですでにFusion PCBの限界を超えているのですが、果たして作ってもらえるのやら…後輩が注文するのですが、英語力が試されることになりそうですね…w

frisk_mp3

フリスクサイズのMP3プレーヤーです。AVRとVS1011eを使用。

回路はほぼまるまるChaN氏のものを使用させていただきました。

Digikeyと秋月だけでは手に入らないトランジスタが一つあるので代替品を探さないと…

2SA1242-Yの代わりになるものを教えていただけると嬉しいです。

後輩のHalf_LDKがこれに加えて超音波センサ等を、同期のeagleがモータードライバを一緒に発注する予定です。

ところで、Fusion PCBは円形に切ってくれるのだろうか?

だいぶ問題がありますが…勉強片手に頑張ります。

巨大

circle

巨大基板製作中…