ウォールタッチパネルを5千円ぐらいで作りたい-その1

まず作りたいもの

世間一般で壁をタッチパネル化するといえば,kinectのような深度カメラを搭載したセンサを使うか,静電容量を測定するものが一般らしいです.ですが,複数作るとなると金欠の当方には厳しく,どうせなら汎用性の高いWebカメラを2個使って実装してしまおうということになりました.もちろんできる保証はありませんが...

構想

下の図は,壁(スクリーンを)正面から見た図です.上の2点にカメラを取り付けて床に設置した赤外線LEDバーを撮影します.もし,スクリーンに手を触れればLEDバーの光がさえぎられ,その座標が計算できればタッチパネル化ができたことになります.(タッチしてないのに反応するなど,誤作動のオンパレードになりそうですが...)

普通のステレオカメラは,ある距離を離して平行に置かれたカメラを使って視差?から距離を求めるのが一般的ですが,今回はあえてカメラに角度がついています.これにより,読み取り範囲が広がる気がします.その代わり,1点しかまともに認識しないという欠点がありますが...

処理手順

1.2台のWebカメラから画像を取得する.

2.OpenCVでタッチした点の角度を計算する.

3.その2つの角度を元に座標を計算する.

 

雑に計算

当方,数学が苦手なのですが,簡単に見積もりを取ってみたいと思います.

例としてスクリーンの真ん中あたりをタッチしたことにします(少し考えればわかりますが,この方法では,2つのカメラが両方とも撮影できる(重なる)部分しか計算できません).

図にするとこのような感じ(上下反転しています).この時,Webカメラから何とかして得られるのは角度θ1,θ2です.あと,カメラ同士の距離dも既知であるとして,タッチした点P(x,y)の座標を求めます.

そうすると,それぞれの関係は以下のようになります.arctan()とtan()で表したもので,どちらも同じことを示しています(個人的にはarctan()のほうがしっくりきます).符号については,打ち消されたものは省略してあります.

あとは,適当に変形するとx,yが計算できます.(以下,途中式)

今回の計算での角度θ1,θ2は適当で,実装するときには変えるかもしれませんが一応以下のようになります(Cam1を(0,0)としたときの,タッチした点P(x,y)の座標).

間違っていたらご指摘ください.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です