似たような技術

仮想現実とか拡張現実とか興味持ち始めたのがJohnny Chung Lee氏のWiiリモコン使ったヘッドトラッキングだったんで,同じようなことが出来る技術をぜんぜん知らない.

最近はその辺サイトとか見て回ってたので,主要なところは記録しておこうと思う.きっと研究としてやってるのも探したら尋常でない数があるだろうなぁ.

Johnny Chung Lee氏のサイト

http://www.cs.cmu.edu/~johnny/projects/wii/
まぁ,最近やってるアレを始めるきっかけ.動画はこのあたり.
http://jp.youtube.com/watch?v=Jd3-eiid-Uw

ViewFrame

http://www.jaist.ac.jp/~masa-t/publications.htm
ニコニコ動画のコメントで教えてもらった.日本でやってたヘッドトラッキングを使った研究.カメラを使って頭の位置を検出して窓越しに物が見えるようにしてる.
動画:http://jp.youtube.com/watch?v=xP9ZyKYBj68

ARToolkit

http://www.hitl.washington.edu/artoolkit/
http://www1.bbiq.jp/kougaku/ARToolKit.html
これは大分前から見たことがあった.カメラで四角いマーカーを追跡してカメラの映像に3DのCGを合成できるライブラリ.これを見ただけじゃお手軽に購入できるHMDないとつまんないよ!と思ってた.最近はマーカーの検出機能だけ使いたいと思ってる.
これを使った動画がニコニコ動画にこれでもかっ!というほど沢山ある.http://www.nicovideo.jp/tag/ARToolKit
ついでなので,ARToolkitを使ってるやつでいいなーと思うやつをリストアップしておこう.

Parallel Tracking and Mapping

http://www.robots.ox.ac.uk/~gk/index.html
スゲー.マーカーとか特に使わず周りにある物体を適当にトラッキングし続けることが出来てる.しかも,あの様子だとノートパソコンでかるーく動いているのだろうか.
動画:http://jp.youtube.com/watch?v=Y9HMn6bd-v8

TrackIR

http://www.naturalpoint.com/trackir/
これまたニコニコ動画のコメントにあった言葉を検索して見つけた製品.名前のまま赤外線を追跡してヘッドトラッキングができる.こいつびっくりなことに120fpsで情報を取得できるらしい.うらやましい.ただ,サイトで紹介されてるデモは仮想現実っていうより,実用的にゲームで使おうとしてるらしくサイト内のデモを見てもあまり面白くない.単純に頭の動きを入力するデバイスとして使っているデモだけになってる.表示的には現実味の薄い動き.右を向いたらゲーム内のカメラも右を向くようだ.

ARToolkitに変えようかな.

最近は,赤外線LEDを取り付けた棒を作ってモニタ付近のCGを棒で触れるようにしようと考えてた.なんとなく問題が多そうだとは思ったけど,ARToolkitに変えたくなるほどの問題っぽい.

赤外線での位置検出は検出できる点の数に強い制限がある.複数の点を検出できても,どの点が何を示しているのか直接知る方法がない.メガネのLEDなのか,棒に取り付けたLEDなのか,複数の光点の座標だけでは直接知ることはできない.面倒くさい.ARToolkitならマーカーの形かえるだけでいいのにー.

そんなわけで,Webカメラというものを注文してみた.届くのが楽しみ.

ただ,心配なのはカメラが画像を取得する速度.価格.comを見た範囲では普通のWebカメラは基本30fpsらしい.QVGA(320*240)だと60fpsいけるのもあるらしいけどこれはマーカー検出には辛いだろう.もしあったとして60fpsで画像を取得できたところで60fpsで処理できるかどうか分からないけど.良し悪しが全く分からないけど,とりあえずVGAで30fpsいけるらしいものを注文した.

C++/CLIを使い始めた

C#IronPython使ってるのにC++のライブラリ(partixのこと)を使いたくてC++/CLIを使ってみてる.
いちいちunmanagedなデータとmanagedなデータを区別しないといけないところは面倒だけどインタフェースちょこっと用意するだけでC#IronPythonとやり取りできるC++ってちょっとステキ.

partixを使ってみた

今は,アッチの世界を覗ける窓に変更を加えていってる.
次に作りたい動画のタイトルは「アッチの世界を触れる棒を作ってみた」だからね.そのために物理エンジンを組み込んでみた.組み込んだのはid:jonigataさんのpartix
「はちゅね山積み」っていう動画を公開されていたりします.

http://www.nicovideo.jp/watch/sm2659130

検出誤差

どうも,赤外線LED2つで頭の位置を調べるとノイズが入ったかのようにガタガタとよく揺れる.
原因は複数あるのだろうと思う.ひとつは実際に頭の揺れ.メガネをつけていると良く揺れるけど,置くとかなり安定する.

もうひとつは検出の精度の問題.Wiiリモコンについてる赤外線カメラは横方向に45度の視野角を持っていて1024*768の解像度を持っているらしい.この解像度は横方向に1024段階で位置を調べられるということになる.これはカメラから離れるほど,検出できる位置が粗くなる.

近づければ精度は高くなるけど,そうすると今度は頭を動かせる範囲が狭くなる.このあたりはやりたいことを考慮してちょうど良い位置にカメラを配置しないといけない.

また,赤外線の光点の動きが1ドット刻みになるのでカメラから見て斜めに動いたりするとドットに合わせてジグザグ動いたことになってしまう.
このジグザグな動きを何とかしようと思うと,検出できる解像度より細かく頭の位置を知らないといけないということになる.

今回のプログラムでは過去数回の検出した位置から現在の光点の位置を推定する計算(最小二乗法)を挟んでる.斜めにジグザグ動いているなら光点はその間をまっすぐ移動しているだろうということにしてる.

向こう側を覗ける窓をつくってみた


http://www.nicovideo.jp/watch/sm4373656
モニタの向こう側が見えるように見せるやつをアップしてみた.出来は良くないけども.何が悪いのかまだ良く分かってないのだけど,実際のものの位置とぴったり合わせることが出来ない.たぶん,作ったモデルが実際のものの位置と一致してないせいだと思うのだけど.

あともうひとつの不満.どうも,リアルなものが3Dモデルの奥にあると,照明が合わないせいか酷く浮いて見える.ただ,モデルにはすでにテクスチャへいろいろ書き込まれてるのでどうライティングを行えばいいのか考えられてない.そのまま外の光と部屋の蛍光灯と同じようなライトを作ればいいのかな?