memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

カー消しのトラッキング改良方法を試行錯誤している

忘れないうちにメモしようという勢いで書きます。

読みにくいかもしれませんが。。。ご容赦を。

昨日のつづきです。

memorandums.hatenablog.com

不満足なまま投稿しちゃったんですが。。。それはそれとして、時間の許す限りシステムを改良していきたいと思います。明日から入試監督で2日間は何もできないので。。。

現状の課題をおさらいすると、現状のシステムは、カー消しの位置を赤外線カメラでトラッキングしているのですが、カー消しをペンで弾いた直後の移動やカー消し同士の衝突を検知できません。

その要因は、Webカメラのフレームレートが30FPSであることで、さらに、OpenCVで画像処理するため実際のトラッキング間隔は30FPS以下になります。


カー消しの移動速度を測ってみる

まず、対象を知ろうということで、カー消しの移動速度を計測してみました。

画像計測すればいいのでしょうけどやったことがありません。思いつきですが、ペンでカー消しを叩いた音とカー消しが壁に衝突した音の間隔で計測できるんじゃないかな。。。ということで。

f:id:ke_takahashi:20200210200359j:plain

録音した音声の波形をAudacityでみると以下のような感じでした。スロー再生してこの範囲であることがわかりまして、その間隔は0.142秒であることがわかりました。

f:id:ke_takahashi:20200210200441p:plain

速度を計算すると、10(cm) / 0.142(秒) = 70.4(cm / s) = 253.4(km / h) 意外と速いですねぇ。。。

カメラが30FPSだとすると、フレーム間隔は最短で0.03秒になります。理想的な場合ですが。

0.03秒の間に2.1cm進みます。カー消しの全長分ですね。

でも、実際は移動前後しか取れてないわけですから、30FPSどころか、20もしくは15FPSくらいなっているのではないでしょうか?測ればわかりますが。。。


速いカメラを探してみる

とりあえず60FPSのカメラが普通に手に入るようです。ロジクールのやつがあります。ただ。。。これがオートフォーカスなんですね。。。プレイフィールドに手をいれたりするとフォーカスが変わります。使いにくいです。。。

PSEYEって60FPSでるし、解像度を落とすと120FPSも出たんですね。。。一時期から使えなくなりました。その後、誰か偉い人がドライバー作っていないか。。。探しましたがMac用はありませんでした。

あれこれ調べてみましたが、選択肢もあるかな。。。と100FPS以上のものもあるようですが。。。そこまではしたくありません。


他の選択肢を探してみる

カメラはもうダメそうなので。。。センサーを探してみることにしました。

ニンテンドーLABO、私も買って遊びましたが、あれみたいな装置を作っている方がいました。Arduinoで制御できるようです。。。カメラも5千円くらいなので悪くないです。ポチろうかと思ったときに、原理的にはWiiリモコンと似ているな。。。と昔遊んだことを思い出しました(このカメラはいつか使えそうなので来年度の予算で買おうと思います)

qiita.com

そうそう、Osculatorを使えば、現在のMacでもWiiリモコンが使えます。

昔とった何とかですが。。。Wiiリモコンを引っ張り出してやりはじめました。


Wiiリモコン + Osculator で解決できないがんばってみる

カー消しにLEDを取り付けるのは避けたいので、カー消しに再帰性反射テープをつけて、反射光でWiiリモコンが認識してくれるか。。。確認してみました。

以下のような感じになりました。輝度差がありません。。。認識してくれません。

f:id:ke_takahashi:20200210215248p:plain

輝度差を出すために赤外線を吸収するような素材を探しました。紙やすりが一番黒く見えます。。。これでも認識せず。

f:id:ke_takahashi:20200210215355p:plain

そうか、せっかく再帰性反射材を使っているんだから、真上から投影せずに、斜め上から投影したら、輝度差が出るんじゃないか。。。。と。

ちなみにこれは可視光で真上から照らしたところ。

f:id:ke_takahashi:20200210215558p:plain

そして斜め上から照らしたところが以下。

f:id:ke_takahashi:20200210215626p:plain

これでいけるか。。。と赤外線で斜め上からやってみたのが以下。でもダメ。。。うーん。万策。。。

f:id:ke_takahashi:20200210215701p:plain


Osculatorの使い方が間違っていたorz

と思って、あれこれやっているうちに気付きました。

そう、Wiiリモコンのセンサーバーを思い出すと、少し離れた場所に赤外線LEDが2つあって初めて認識するのでした。アホか、俺。

これまでのOsculatorの設定が以下。

f:id:ke_takahashi:20200210215950p:plain

そして、直したのが以下。これで無事4点のXY座標が取り出せました。

f:id:ke_takahashi:20200210220003p:plain

f:id:ke_takahashi:20200210220023p:plain

ちなみに、この状態でProcessingでOSCを受信する様子をみると。。。どうも、あれ?遅い。。。これってもしかするとWebカメラと大差ないんじゃないの?と思ってmillis()を使ってOsculatorからの受信間隔を調べてみますと。。。

平均10msみたい。つまり、0.01秒。

30FPSだと最高でも0.03秒ですから。。。カー消しの移動途中の軌跡が取れそうだな。。。というところで時間切れでした。

まだまだ基本部分がカッチリしません。まだまだ先は長そうです。