テンプレートマッチング with CUDA

昨晩の深酒のせいで,昼まで寝てしまい....掃除・洗濯もろもろしたらもう17時....
9/23に試走会2回目があるのに,この感じだと間に合わないなあと言ってても始まらないので,タイトルどおり今からテンプレートマッチングの部品を作ります.
0から作るのはしんどいので,OpenCVのCUDA実装をほぼコピーして必要な個所だけをアレンジすることにしました.

完成したらエントリ更新します.

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

上記投稿からはや4日...テンプレートマッチング試してみました.
CUDAの実装方法をちょっと復習したり(若干モチベーションが上がらなかったり...)してたので,思ったより時間がかかってしまいました.
上記テンプレートマッチングですが,なんとかうまく行きそうな気がしてます.

カートを押して,大清水公園のマップ(下記)を作成します.

f:id:rkoichi2001:20170906063527p:plain

で,もう一回大清水公園をカートを押してマップを作りながら,いま事前に作っていた地図の中でどこを走っているかを調べます(自己位置推定)

f:id:rkoichi2001:20170906063653p:plain

実際には,赤の正方形(10m x 10m)の中心にロボットがいると仮定します.で,赤の正方形だけを切り出したものが下記です.

f:id:rkoichi2001:20170906063745p:plain

で,上記の正方形領域をもともと作っていた地図に対して照らしあわせて,一番結果がマッチしたところにロボットがいると判断します.
そのマッチング結果が下記になります.一番白が強い箇所が一番マッチが強い箇所です.

下記のマッチング結果はCUDA実装の一部を変更した自作バージョンのマッチングスコア
f:id:rkoichi2001:20170906063954p:plain

下記のマッチング結果はCUDA実装にもともとあるTM_CCOEFFを使ってマッチングしたスコア
f:id:rkoichi2001:20170906064113p:plain

CUDA実装にあるテンプレートマッチング方式のほうがいい感じにマッチングスコアが出たのが意外でしたが,灰色(Unknown)領域ではマッチングしたくないので,ここは少し手を入れる必要があると思います.あと,実際にはオドメトリからロボットが走っている位置はだいたいわかっているので,マップ全体に対してテンプレートマッチングする必要はなく,実際には今ロボットがいると思っている位置±3m,±5degくらいでマッチングをして一番スコアが高い位置にロボットがいると判定し,そこから経路を引いてロボットをすすめる.という流れになるかと思います.ひとまず,土曜までには自己位置推定する部品を完成させ,日曜には「近所の実験場」で実際にロボットを走らせて見たいのですが,,,,また状況アップします.