【注意】以下の手順は、私が試行錯誤で調べたものを、参考のためにまとめたものです。
間違い勘違い等があるかもしれませんので、その場合はご了承ください。
また、もっと簡単な方法があるかもしれません。
【追記'10.12.16】"SamplesConfig.xml"をコピーする手順がもれていたので追記しました。
1.開発環境
OS:Windows XP
使用言語:C++(Visual C++ 2010 Express)
ベースソフト:ARToolKit "ARToolKit-2.72.1-bin-win32.zip"
:OpenNI "OPENNI-Win32-1.0.0.23.exe"
:NITE "NITE-Win32-1.3.0.17.exe"
:Driver "avin2-SensorKinect-XXXXX.zip"
ARToolKit、OpenNIのインストール方法は、いろいろな方がわかりやすく解説していますので省略します。
また、Visual C++ 2010 Expressの使用方法もある程度知っているものとして説明します。
わからない場合は、詳しく解説しているサイトがありますのでそちらを参照ください。
2.ファイルを準備する。
ARToolKitをここからダウンロードします。
OpenNIをここからダウンロードします。
今回使用したのは、以下の4つです。
ARToolKit-2.72.1-bin-win32.zip
OPENNI-Win32-1.0.0.23.exe
NITE-Win32-1.3.0.17.exe
avin2-SensorKinect-XXXXX.zip
3.ARToolKitを適当なディレクトリに解凍する。
ダウンロードしたファイルを適当なディレクトリに解凍します。
この例では、C:\testに解凍するものとします。
解凍すると次のようになります。
C:\test\ARToolKit-2.72.1-bin-win32
4.ARToolKitとOpenNIの動作を確認する。
(1)Visual C++ 2010 ExpressでARToolKitのソリューションを開きビルドします。
C:\test\ARToolKit-2.72.1-bin-win32\ARToolKit.sln
ソリューションを開くと変換しますかと聞いてくるので、変換を実行します。
以降、説明を簡単にするため、ARToolKitの"simpleTest2"プロジェクトを改造して使用するものとします。
(2)変換が終わったら、ソリューション構成をReleaseにして、ソリューションのビルドをします。
(大量の"warning"が出ますが、とりあえず無視しても大丈夫のようです。)
(3)USBカメラを接続してARToolKitが正常に動くのを確認します。
C:\test\ARToolKit\bin\simpleTest2.exe
"Esc"キーを押すと終了します。
【注意】ARToolKitをDebugでビルドした"simpleTest2d.exe"はうまく動かないので
以降、すべてReleaseでビルドするものとします。こんなダイアログが出ます。
原因はいずれ調べようと思っていますが、Releaseで動くので当面放置してます。
(4)OpenNIをインストールして、OpenNIのサンプルプログラムが正常に動くのを確認します。
【注意】OpenNIのインストール方法と使い方は他の方が詳しく紹介していますので省略します。
5.ARToolKitプロジェクトにOpenNIライブラリを追加する。
C:\test\ARToolKit-2.72.1-bin-win32\ARToolKit.slnを開きます。
ソリューションエクスプローラで、SimpleTest2プロジェクト右クリック->プロパティ を選択します。
構成プロパティ->リンカー->入力 を選択します。
”追加の依存ファイル”に、"OpenNI.lib"を追加します。
6.ライブラリディレクトリを追加する。
引き続き、構成プロパティ->C++->リンカー->全般 を選択します。
”追加のライブラリディレクトリ”に、"$(OPEN_NI_LIB)"を追加します。
7.インクルードファイルディレクトリを追加する。
引き続き、構成プロパティ->C++->全般 を選択します。
”追加のインクルードディレクトリ”に、"$(OPEN_NI_INCLUDE)"を追加します。
8.simpleTest2プロジェクトにファイルを追加する。
"simpleTest2.c"を一旦プロジェクトから除外します。
"simpleTest2.c"の拡張子をcppに変更し、"simpleTest2.cpp"を再度プロジェクトに追加します。
以下の2つのファイルをプロジェクトに追加します。
"knVideo.cpp"
"knVideo.h"
ファイルの詳細は【その2.サンプルプログラム編】を参照してください。
9.使用するインクルードファイルを変更する。
"simpleTest2.cpp"の14行目付近にある
#include
をコメントアウトし、
#include "knVideo.h"
を追加します。
10."simpleTest2.cpp"の関数名を変更する。
ここで一度ビルドします。
ソリューション構成が"Release"になっていることを確認します。
ソリューションエクスプローラ->SimpleTest2プロジェクト を右クリック スタートアッププロジェクトに設定します。
ソリューションエクスプローラ->SimpleTest2プロジェクト->ビルド
そうすると、"arVideoXXX"という関数がエラーになるので、すべて"knVideoXXX"に変更します。
11.ビルド&実行
【追記'10.12.16】
まず、"C:\Program Files\OpenNI\Data\SamplesConfig.xml" を
"C:\test\ARToolKit\bin\Data"へコピーしておきます。
次に、ソリューション構成が"Release"になっていることを確認します。
ソリューションエクスプローラ->SimpleTest2プロジェクト->ビルド でビルドが正常に終了したら、下記ファイルを実行します。
C:\test\ARToolKit\bin\simpleTest2.exe
うまくいけばこのようになるはずです。(使用したパターンは"pattHiro.pdf"です。)
"simpleTest2.cpp"の86行目を以下のように変更すると、DepthカメラのDepthを色に変換した
画像が表示されます。(ただし、この画像ではマーカの検出は出来ません。)
変更前:
/* grab a vide frame */
if( (dataPtr = (ARUint8 *)knVideoGetImage()) == NULL ) {
arUtilSleep(2);
return;
}
変更後:
/* grab a vide frame */
if( (dataPtr = (ARUint8 *)knVideoGetImage()) == NULL ) {
arUtilSleep(2);
return;
}
dataPtr = (ARUint8 *)knVideoGetDepthColor(); //<---この行を追加
【注意】knVideoGetDepthColor()関数を使うときは、先に"knVideoGetImage()"関数を実行しておく必要がある。
また、上の例のknVideoGetDepthColor関数を、knVideoGetDepthImage関数に換えるとDepthとカメラ画像が重ねて表示されます。
【注意】knVideoGetDepthImage()関数を使うときは、先に"knVideoGetImage()"関数を実行しておく必要がある。
---以上---