arc の日記

はてなダイアリーから引っ越してきました。さらに新しい記事は https://junkato.jp/ja/blog/ で書いています。

FTIRマルチタッチディスプレイの作り方(前編)

昨日、CV/ARに関する普通じゃない勉強会2.0で「touchBox: マルチタッチできる箱を作ってみた+α」と題して発表してきました。箱を作るのに時間を取られて発表はぐだぐだ気味でしたが、そのフォローアップの意味も兼ねて、マルチタッチディスプレイの作り方を2回に分けて具体的に説明します。

06/26追記; スライド公開しました: http://handsout.jp/slide/1447

前編は原理から素材の購入まで、後編は組み上げからハードウェアの完成、ソフトウェア開発の導入部までを扱います。ソフトウェア側で輪郭抽出をして座標を取って…というあたりはライブラリに頼るか必要に応じて自作することになると思うので、導入に留め、詳しくは書きません。

僕が所属している研究室で初めてマルチタッチディスプレイを組み上げ、基本的なノウハウを蓄積したhttp://www-ui.is.s.u-tokyo.ac.jp/~kenshi/さんに、この場を借りて感謝します。

対象読者

次のような人を対象読者として想定しています。

必須
  • 多少のプログラミング経験
    • カメラの撮像から輪郭抽出して座標を取る部分はライブラリがやってくれますが、そのライブラリを使えるだけのプログラミングはできないと、ハードウェアだけ作ってソフトウェアが作れないことになります。
    • 言語は、僕はJavaを使っていますが、Touchlibを使うならC++Flashなど、たいていのものが使えるはずです。Touchlibについては後編で少し触れます。
  • 多少の根気
    • 最初は失敗して普通です。
  • LEDと抵抗を直列で繋げるだけのはんだ付け
    • ごくごく基礎ができれば充分です。
  • お金
    • 諭吉さん一人。
あるといいなぁ
  • 英語を読む程度の能力
    • 赤外線カメラのいいやつを海外から輸入するときに。
  • もっと、お金!
    • 最大諭吉さん十人。

なお、不足や間違ったところがあったら教えていただけると幸いです。

CVを使ったマルチタッチディスプレイ

マルチタッチディスプレイと一口にいっても、定義としてはおそらく「接触面を2個所以上同時検出できるディスプレイ」という程度のもので、実装方法にはいろいろあります。今回の記事で扱うのは、カメラの撮像を画像認識して触れているところを検出するやり方のものです。このくくりでも、赤外LEDアレイを用いるFTIR、Diffused Illuminationや、赤外レーザーを使ったLaser Light Planeなど多々ありますが、この記事で取り上げるのはFTIRです。というか、僕自身はFTIRでしか作ったことがありません。

最終的にできあがるモノのクオリティはかけるお金と時間によって変わりますが、紹介している赤外カメラ、プロジェクタ、計算用のノートPCなどをあわせても10万円を切るくらいで、解像度XGA(800×600ピクセル)、100fpsでトラッキングできるディスプレイが完成します。また、他用途に転用できるものを除けば高々1万円ちょっとで作れます。

FTIRの利用例は最新の FTIR ニュース - Engadget 日本版あたりを見るといいでしょう。僕が昔digitalmuseumで書いた関連記事も参考になるかもしれません。実は、作り方のガイドも英語ならまとまったものはいくらでも見つかります。ftir multi touch display how-to guideInteractive Multitouch Displayなど。他の方式に関連する日本語の情報は、たとえば次のサイトで見つかります。

英語ですが、Hardware - NUI Group Community Wikiも外せません。画像認識でマルチタッチディスプレイを作る手法が一覧になっています。

FTIRの原理

FTIRでは、厚みのあるアクリル板のなかに赤外線を入射します。空気とアクリルの屈折率の関係で光は中で全反射するため、基本的には端の断面以外から漏れません。

(Multitouch DEV BLOGより)

しかし、この図にあるように、指などアクリル板に密着するモノで触ったときだけ、そこが照らされて光り、板の下に設置されたカメラから観測できるようになります。この現象は、冷えて水滴のついたコップを持ったときを思い浮かべると理解しやすいです。コップを覗き込むと、コップの外は見えないのに、コップを持っている指だけははっきり見えますよね。実際、この手法を確立したJeff Hanという人は、ここから着想を得たようです。

実際に作ってみるとこのようになります。


(制作: JST ERATO 五十嵐プロジェクト)

これは、斜め上から撮った写真です。天面にプロジェクタの光をリアプロジェクションして、入力装置兼投影装置=タッチパネルにします。一般的なプロジェクタは焦点を結べる距離が1m以上あるため、鏡で反射させて光路を稼いでいます。シリコン樹脂については後ほど素材集めの段で説明します。

設計

原理を大まかに理解したら、設計します。どのくらいのサイズにするか、から始め、細かいところではカメラの角度調整はどうやりやすくするか…etc.ここでよく考えておくと、あとあと楽ができます。

これはtouchBoxの設計図の一部です。普通に作るだけならここまで細かく描かなくてもいいはずですが…。

今回はこの方式で可能な限り小さいマルチタッチパネルを作る目標を立てていたため、次のことに気をつけました。

  • プロジェクタを小さく
    • 今、流行りのピコプロジェクタ、値段もそれなりに安い。
    • 工学ナビ橋本さんも、プロカメシステムが安く作れて面白い!と発表していましたね。
  • 構造を小さく
    • ピコプロジェクタはLEDを光源として使っており、このタイプなら40cm程度から投影できます。これなら、先ほどの作例で使っていた鏡が不要になります。
  • 計算用PCも小さく

材料集め

さて、材料を集めましょう。便利な世の中で、通販を使えばほとんど引きこもっていても作れます。

  • アクリル板
  • 透明シリコン
  • 赤外LED
  • 赤外カメラ
  • 計算用PCとピコプロジェクタ
アクリル板

厚みは1cm程度がいいようです。これより薄すぎると全反射しません。厚すぎた場合どうなるかは…やってみてないので分かりません。

注文はネット通販が超絶便利です。僕ははざい屋というお店を使いました。とくにこのお店、2カット無料なので好きなサイズで作ってもらえます。touchBoxは天板を幅、高さ25cmで作るつもりだったので次のように指定しました。

◆透明板(押出)、板厚10mm、300mm×450mm 1枚
透明板は2カットお願いします。まず長辺に平行に刃を通し、短辺が240mmと56mm(残り, 300 -240 -4 mm)の2枚ができるようにしてください。
次に、240mm×450mmの板について、短辺に平行に真ん中に刃を通し、240mm×223mm(おおよそ, (450 -240 -4) ÷2 mm)が2片できるようにしてください。
まとめますと、結果、長辺240mmの板2枚と、他1枚ができるようにしてください。

まぁ、ずいぶん冗長に書いていますが、間違われるよりは…。時間があれば、こうやって文字で書くより設計図を画像で渡すとより確実だと思います。透明アクリル板(押出し) 板厚(10ミリ) 300×450で2,000円です。配送料を加えると2,840円かな。

透明シリコン

FTIRはアクリル板に指を密着させる必要がありますが、案外、人の指って密着に向いていません。指紋の影響でしょうか。手汗をかきやすい人かきにくい人でずいぶん検出精度に差が出たりもしてしまいます。

そこで、アクリル板-シリコン-スクリーンというふうに、ぷよぷよしたシリコンを間に挟んでやります。こうすると、シリコンが押しつぶされたときに変形したシリコン面が光るようになります。これは、Jeff Hanが提案したオリジナルのFTIRにはない工夫です。…とはいえ、上の方でFTIRを解説した図には「Sillicon Rubber」として当たり前のように載っていますね。

シリコンは、フィギュアのお店で通販している「造形村の透明シリコン」が使えます。


(http://www.volks.co.jp/jp/tools/katadori.html#ts)

厚み1mmくらい張れば充分なのでディスプレイ一枚作るには多すぎますが、大は小を兼ねるということで。3,360円。

赤外LED

秋葉原が近い人は秋月とか行って買ってくればいいと思います。ただ、次項の赤外カメラをいいものにすると、ピーク波長が合ったものを注意深く選んで買わないとせっかくのカメラが台無しです。引きこもり派の僕はRSで購入しました。ピーク波長850nmの赤外線エミッターあたり。オプトデバイス,赤外線エミッターSFH4350Hi-Pwr IR Emitter,850 nm,3mm…というのを買った覚えがあります。

以前500cm×800cmを作ったときはLEDを60個以上使いましたが、25cm×25cmでは7個で十分すぎるほど光量を得られました。

抵抗と電源も、LEDにあわせて購入します。全部合わせても高々1,000円ちょっと。

赤外カメラ

ふつうのWebカメラを解体して赤外フィルタ(赤外線をカットするもの)を外すと非常に安く済みます。例えば、Logicool Qcam Pro4000は比較的壊しやすかったです。フィルタはたいてい、可視光で虹色に反射して見えるところです。ドライバーやカッターなどを駆使すると外せます。

LOGICOOL QV-4000 Qcam Pro 4000

LOGICOOL QV-4000 Qcam Pro 4000

さらに、赤外線以外を検知しないようにするため光吸収・赤外線透過フィルタを貼り付けます。なお、これは、真っ黒なネガフィルムでも比較的近い効果が得られることが知られています。

あわせて5,000円くらいでしょうか。赤外線カメラの作り方に改造の仕方が詳しく書かれています。

ただし、ふつうのカメラは可視光領域に対して最適化されています。FTIRは結構暗い赤外光を見るため、撮像がほぼ真っ黒です。結果として、光量が足りず、しばしば勝手にフレームレートが落ちてしまいます。また、苦労しても赤外フィルタが外せなかったり、ピントが合わなかったりもします。例えばPS3 Eyeの場合

そこで、富豪的な解決法を提示しましょう。「USB接続の赤外線専用カメラを使えばいいじゃない!」…モーションキャプチャ用の赤外カメラがベースになっているOptiTrack SLIM:V100が、非常にアタリでした。カメラの基板(SLIM:V100)とガワ(enclosure)、レンズ(M12マウント)とフィルタ(800nm-Pass-Filter)、USBケーブルを買って、配送料など込みで36,000円強。基板以外はCamera Accessories (Lenses and Cases)で買い物カゴヘ放り込めます。

サイト内にて、これらが別々に梱包されて配送される注意書きを見た気がしますが、実際は全部ひとまとまり、USBケーブルさえ挿せばすぐ使えるようになっていました。ドライバなどはSupport DownloadsのOptiTrack SDK for V100, C120, FLEX:3 Camerasに入っています。

なお、このカメラはUSB接続で「使える」といっても、いわゆる通常のカメラとしては使えません。つまり、WebカメラならDirectShow(Windows)やQuickTime(Mac OS)、Video4Linux(Linux)経由で撮像を取ってこられますが、これは特殊なフォーマットでデータを送ってくるので、WindowsでOptiTrack SDKを触る必要があります。ただし、僕のWindows Vista x64およびx32では正しく動作しませんでしたが、DirectShow filterが公開されており、環境によってはこれで通常のカメラ扱いできるのかもしれません。

SDK自体は非常に分かりやすく、僕はJavaでカメラを使っているので、数時間でJNIラッパーを書けました。このラッパーは、需要があれば公開します。

計算用PCとピコプロジェクタ

代替可能な製品を持っている人はそれを使いましょう。

アドテック アドテック マイクロプロジェクター 黒色 AD-MP15AB

アドテック アドテック マイクロプロジェクター 黒色 AD-MP15AB

それぞれ29,000円、36,000円程度で購入しました。

まとめ

まとめます。

ブツ 値段 入手先
アクリル板 2,840 はざい屋
透明シリコン 3,360 ボークス
赤外LED 1,000 RSオンライン
赤外カメラ 5,000 or 36,000 NaturalPoint
ピコプロジェクタ 0 or 29,000 asin:B001MVPD9O
計算用PC 0 or 36,000 asin:B001MBU51U

合計 \12,200-10,8200 …おぉ!1万円から10万円でマルチタッチディスプレイが作れますね!!

以降、素材の組み上げとソフトウェアの導入に関して後編に続きます。