マーカレスAR(PTAM)のソースコードを動かしてみた(WindowsXP VisualC++)
話題のマーカレスARのソースコードがついに公開されたので、さっそく動かしてみました。
この動画が再現できるわけではないですが、VSLAMによる3D空間のマッピングと4つの目玉のモデル(研究室のトレードマークらしい)の描画までを行うことが出来ます。
Parallel Tracking and Mapping、略してPTAMだそうです。
詳細は工学ナビさんへ
以下、備忘録的なもの。
環境はWindowsXP、VisualC++ 9.0 Express Edition。
コンパイルしたり、パスを通したり、知識がないとかなり大変。
必要なもの
- IEEE1394のカメラ
- PTAM(PTAM.zip)
- GLEW(glew-1.5.0-win32.zip)
- Lapack and BLAS (shared-libs.zipとheaders.tar.gz)
- CMU 1394 camera driver (1394camera645_src.zip)
- pthreads (pthreads-w32-2-8-0-release.exe)
- libjpeg for win32 (jpeg-6b-4.exe)
- fltk(fltk-2.0.x-r6305.tar.bz2)
以下はCVS経由で。
- TooN
- libcvd
- gvars3
手順
基本はPTAMのREADMEを読みながらやりましょう。
試行錯誤しながらやったので、しなくて良かった処理や間違い等あるかもしれません・・・。
- PTAMをダウンロードして解凍。
- GLEWをダウンロード。GLEWのマニュアルにしたがって次の場所にコピー。
bin/glew32.dllをWindows/system32へ。
lib/glew32.libを{VC Root}/Libへ。
include/GL/glew.hを{VC Root}/Include/GLへ。
include/GL/wglew.hを{VC Root}/Include/GLへ。 - Lapack and BLAS
shared-libs.zipを解凍。blas_win32.dllとlapack_win32.dllをWindows/system32へ。
blas_win32.libとlapack_win32.libを{VC Root}/Libへ。
headers.tar.gzを解凍。
lapackとblasフォルダを{VC Root}/Include/へ。 - 1394camera645_src.zipを解凍して、1394cameraフォルダのみコンパイル。生成されたdllファイルをWindows/system32、libファイルを{VC Root}/Libへ。ヘッダーファイルはすべて{VC Root}/Includeへ。
- pthreads-w32-2-8-0-release.exeを実行するとPre-built.2、pthreads.2、QueueUserAPCExの3つのフォルダが出てくる。
Pre-built.2/includeのsemaphore.h、sched.h、pthread.hの3つのファイルを、{VC Root}/Includeへ。
Pre-built.2/libのlibファイルとAファイルをすべて{VC Root}/Libへ
のこりのdllファイルをすべてWindows/system32へ。 - jpeg-6b-4.exeは実行してインストール。VisualC++でインストールした場所にパスを通しておきましょう。(C:/Program Files/GnuWin32/includeとC:/Program Files/GnuWin32/lib)
- fltk-2.0.x-r6305.tar.bz2を解凍し、fltk-2.0.x-r6305フォルダの中のfltkフォルダをまるごと{VC Root}/Includeへ。
- CVSを使ってTooN、libcvd、gvars3を取って来る。CVSは使ったことなかったのでここを参考にしました。ネットワークから取って来るだけなので、リポジトリを作って初期化するとこまででOK。
PTAMのREADMEに書いてある通りにコマンドプロンプトから以下のコマンドを順に打って取ってきます。
# cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/toon co -D “Fri Sep 5 15:20:31 BST 2008” TooN
# cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/libcvd co -D “Fri Sep 5 15:20:31 BST 2008” libcvd
# cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/libcvd co -D “Fri Sep 5 15:20:31 BST 2008” gvars3
これが何度やってもタイムアウトしてたので設定とかを散々悩んだのですが、大学のポートの問題だったので自宅で取ってきました。 - TooNはフォルダごと{VC Root}/Includeへ。
- libcvdはbuild/vc2005の中のソリューションを開いてコンパイル。libフォルダに生成されたlibファイルを{VC Root}/Libへ。cvdフォルダをまるごと{VC Root}/Includeへ。
- gvars3も同様にbuild/vc2005の中のソリューションを開いてコンパイル。libフォルダに生成された2つのlibファイルを{VC Root}/Libへ。(gvars3の下の)gvars3フォルダをまるごと{VC Root}/Includeへ。
ここまでで準備が終わりました。ここからようやくPTAMです。
- まずはコンパイルから。Build/Win32の中のPTAM.sln、PTAM.vcproj、CameraCalibrator.vcproj、VideoSource_Win32_CMU1394.ccをPTAMフォルダ直下へ。
- ソリューションを開いて、コンパイル。
- コンパイルが通ったらまずはキャリブレーション。calib_pattern.pdfを印刷して使います。ここのビデオ参照。GrabFrameでキャリブレーションパターンを3枚以上撮影。Optimizeでキャリブレーションが行われます。キャリブレーションが成功したっぽかったらsaveで終了。これでcamera.cfgが生成されます。
- キャリブレーションが出来たらいよいよ実行。Spacebarを押してカメラをよこにずらすことで平面が生成。DrawARで目玉があらわれ、ViewMapでカメラ位置と特徴点位置の3Dマップが表示されます。
使った感想
あのプログラムが自分の環境で動いたことには感動!・・・ですが、へんな位置に平面があらわれたり飛んだりとあまり上手く動作しません。カメラの問題?
工学ナビさんはHackしてWebカメラで動くようにしたそうですが、ソースを眺めた限りとても自分には出来そうにない・・・。
–追記——————————————————————–
うまく平面が作られないのはマッピング時のカメラの動かし方の問題でした。
Spacebarを押した後、ゆっっっくり横にずらすとうまくいきました。
–さらに追記—————————————————————-
いつのまにか王様の箱庭さんで紹介されてた、すげー。
あと工学ナビさんがWebカメラで動くソースを公開されてるみたいです、すげー。
僕はまだ試してないす。
アクセス解析してみるとこのページを参考にPTAMに挑戦されてる方が多いみたいで大変光栄です。
かなり適当にやっているところが多いので修正点等あればコメントしていただけると有難いです。
作業途中で個人的に行き詰った点を追記します。
・コンパイルが通ったのに実行するとエラーで落ちる(OpenGLの何かの関数)という状態が続いてかなり悩んだのですが、調べてみるとどうもビデオカードが対応していなかったのが原因のようでした。(ReadMeにもnVidia系でしかテストしてないよ、と書いていた)友人のPCでやりなおすとうまくいきました。
・最初にPTAMが動いた時は実行速度が非常に遅かったのですが、僕の場合はDEBUGモードでコンパイルしていたのが問題でした。CVSでとってきたやつとかも含め、全部をReleaseモードでコンパイルしなおすと快適な動きになりました。
その他参考サイト
僕は全部System32に放り込む方法でやってるんですが、きちんとフォルダを作ってGLEWとかLapack and BLASとかを一つのフォルダにまとめる方法でされてます。なるほどー、こっちのほうがキレイだ。
dxtrans.hがない場合。僕は以前何かを作ったときにいれたので今回書き漏らしてました。
2 comments on “マーカレスAR(PTAM)のソースコードを動かしてみた(WindowsXP VisualC++)”