白線検出

ガボール・フィルタ (Gabor Filter) による白線検出1
以前は、OpenCV のHoughLine 変換を使って、道路の白線の検出をしていたが、今回はガボール・フィルタ (Gabor Filter) を使用して白線を検出してみようと思う。
ガ ボール・フィルタ (Gabor Filter) による白線検出2
前回は、カーネルサイズ 21 のガボール・フィルタで道路の白線を検出してみたが、今回はカーネルサイズ21だとハードウェアが大きいので、カーネルサイズを 9 にしてみた。更に、カーネルのパラメータを取得した。
ガボール・フィルタ (Gabor Filter) による白線検出3(HLSビデオライブラリ)
前回は、カーネ ルサイズを 9 にしてガボール・フィルタをかけて、カーネルのパラメータをを取得した。今回は、取得したカーネルのパラメータを使って、Vivado HLS のHLS ビデオライブラリを使用して、ハードウェア化を試みた。
Zybotのモーター・モニ タのパラメータ
Zybot の後ろにキャスターを付けたのだが、回らない固定のキャスターだったので、左右モーターのPWM 値を変えてもなかなか即l度が変化しなかった。自在に回るキャスターか、ボール・キャスターを付ける必要があるようだ。
ガボール・フィルタ (Gabor Filter) による白線検出4(hls::LineBuffer と hls::Window を使用1)
前回は、Vivado HLS のOpenCV機能でHLS_16UC3 と HLS_16UC1 が見つからなかった。今回は、hls::LineBuffer と hls::Window を使用してGabor Filter を実装してみた。今回は、C ソースコードを貼り付けた。
ガボール・フィルタ (Gabor Filter) による白線検出5(hls::LineBuffer と hls::Window を使用2)
前回は、hls::LineBuffer と hls::Window を使用してGabor Filter を実装し、そのC ソースコードを貼り付けた。今回はそのGabor Filter を評価した。
ガ ボール・フィルタ (Gabor Filter) による白線検出6(hls::LineBuffer と hls::Window を使用3)
前回は、hls::LineBuffer と hls::Window を使用した Gabor Filter の C シミュレーションとC コードの合成を行ったので、今回は、C/RTL 協調シミュレーションを行った。
ガ ボール・フィルタ (Gabor Filter) による白線検出7(hls::LineBuffer と hls::Window を使用4)
前回は、hls::LineBuffer と hls::Window を使用して実装した左白線検出用のGabor FilterのC/RTL 協調シミュレーションを行った。今回は、左白線検出と右白線検出ができる両方の白線検出用Gabor Filterを作成する。
ガ ボール・フィルタ (Gabor Filter) による白線検出8(hls::LineBuffer と hls::Window を使用5)
前回は、左白線検出と右白線検出ができる両方の白線検出用Gabor Filterを作成した。1ビットのRorL という信号を追加して、右白線検出か、左白線検出かを選べるようにした。新しいGabor_filter_lh.h 、 Gabor_filter_lh.cpp 、 Gabor_filter_lh_tb.cpp を貼った。
今回は、そのC ソースコードを使って、C シミュレーション、C コードの合成を行った。
ガ ボール・フィルタ (Gabor Filter) による白線検出9(hls::LineBuffer と hls::Window を使用6)
前回は、左白線検出と右白線検出ができる両方の白線検出用Gabor Filterを作成した。1ビットのRorL という信号を追加して、右白線検出か、左白線検出かを選べるようにした。C シミュレーション、C コードの合成を行った。
前回では、DSP48E を 92 % も使用していた。安易に左白線用の演算と右白線用の演算を if 文で切り替えてしまったからかもしれない?よって、今回は、左白線検出用重みと右白線検出用重みを一緒の配列にしてみた。つまり重みを 3 次元配列にした。新しいGabor_filter_lh.h 、 Gabor_filter_lh.cpp 、 Gabor_filter_lh_tb.cpp を貼っておく。
ガボール・フィルタ (Gabor Filter) による白線検出10(hls::LineBuffer と hls::Window を使用7)
前回は左白線検出用重みと右白線検出用重みを一緒の配列にしてみた。つまり重みを 3 次元配列にした。新しいGabor_filter_lh.h 、 Gabor_filter_lh.cpp 、 Gabor_filter_lh_tb.cpp を貼ったが、今回は、そのC ソースコードを使って、C シミュレーション、C コードの合成、C/RTL 協調シミュレーション、IP 化を行った。
ガ ボール・フィルタ (Gabor Filter) による白線検出11(その他の道路写真での検証)
前回で、ガボール・フィルタは完成した(パラメータを調整する必要はあると思う)が、まだ1枚 の道路の写真しか試していないので、もう少し違った写真で試してみることにした。

Zybot のカメラ画像でGabor Filterのパラメータを取得した
”Zybot のカメラ画像をBMPファイルに変換するアプリケーションを作成した”で、Zybot のカメラ画像を取得してBMPファイルに変換するアプリケーション・ソフトウェアを作成した。今回は、このアプリケーションで取得したZybot のカメラ画像からGabor Filterのパラメータを取得する。
Zybot のカメラ画像でGabor Filterのパラメータを取得した2(gabor_filter_lh プロジェクト)
前回は左白線検出用、右白線検出用のGabor Filterのパラメータを取得し、加工した。今回はその加工したパラメータをVivado HLS のgabor_filter_lh プロジェクトに入れてみた。
Zybot のカメラ画像でGabor Filterのパラメータを取得した3(Zybotでテスト)
前回はパラメータを取り直したガボール・フィルタのIP 化を行った。今回は、ガボール・フィルタIP をZYBO_0_162_3 フォルダのVivado プロジェクトの既存のガボール・フィルタIP と交換して論理合成、インプリメント、ビットストリームの生成を行った。

Zybot による白線間の自動走行1(Gabor fillter の修正、C ソースコード)
今回は、左白線検出、右白線検出を交互に行うので、どのような C ソースコードにしようか?と思ったが、一番確実なのは、左白線検出パラメータと右白線検出パラメータで 2 回ガボール・フィルタをかければよいだろうということになった。
入力引数の RorL のビット幅を 1 bit から 2 bit に増やして「L_R_WEIGHT」というモードを増やした。
Gabor_filter_lh_2() 関数は、2回ガボール・フィルタを行うように変更した。「L_R_WEIGHT」を RorL 引数にセットすると、1回目は左白線検出、2回目は右白線検出を行う。
今回はC ソースコードを貼っておこう。
Zybot による白線間の自動走行2(Gabor fillter の修正、Vivado HLS)
前回は左白線検出と右白線検出を交互にできるように修正したガボール・フィルタのソースコード を貼った。今回は、Vivado HLS 2016.2 での結果を書いておく。
Zybot による白線間の自動走行3(実機テスト)
前回は、左白線検出、右白線検出を画像フレームごとに交互に繰り返すガボール・フィルタをIP 化した。今回は、それをVivado 2016.2 のIP として、回路に加えた。問題が発生した。

Zybotのカメラによる白 線追従走行
Zybot の白線検出、追従走行のアプリケーション・ソフトウェアを作って、白線追従走行させてみました。

inserted by FC2 system