読者です 読者をやめる 読者になる 読者になる

Point Cloud Libraryのビューワーでkinectのデータを表示

PointCloudLibrary Kinect Windows VisualStudio

Windows10で実行。

Point Cloud Libraryのインストールと設定 - kubotti’s memo
でPATH等は、設定済み。

Visual Studio 2013

Visual C++ > Win32 > Win32 Console Application PclViewSample1
という名前でプロジェクト作成。
作成時のダイアログ(ウィザード)は、デフォルトのまま。

ネット上のどこかから取得したソースをコピペ。

// Sample.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//

#include "stdafx.h"

// Disable Error C4996 that occur when using Boost.Signals2.
#ifdef _DEBUG
   #define _SCL_SECURE_NO_WARNINGS
#endif

#include "kinect2_grabber.h"
#include <pcl/visualization/cloud_viewer.h>


int _tmain( int argc, _TCHAR* argv[] )
{
    // Create Cloud Viewer
    pcl::visualization::CloudViewer viewer( "Point Cloud Viewer" );

    // Callback Function to be called when Updating Data
    boost::function<void( const pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr& )> function =
        [&viewer]( const pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr &cloud ){
        if( !viewer.wasStopped() ){
            viewer.showCloud( cloud );
        }
    };

    // Create Kinect2Grabber
    pcl::Grabber* grabber = new pcl::Kinect2Grabber();

    // Regist Callback Function
    grabber->registerCallback( function );

    // Start Retrieve Data
    grabber->start();

    while( !viewer.wasStopped() ){
        // Input Key ( Exit ESC key )
        if( GetKeyState( VK_ESCAPE ) < 0 ){
            break;
        }
    }

    // Stop Retrieve Data
    grabber->stop();

    return 0;
}

kinect2_grabber.h

KinectGrabber/kinect2_grabber.h at Kinect2Grabber · UnaNancyOwen/KinectGrabber · GitHub

kinect2_grabber.h
というファイルを
Projects\PclViewSample1\PclViewSample1
にコピー。
Solution ExplorerでHeader Filesを右クリック、
Add > Existing Item...
kinect2_grabber.h を追加。

kinect.h

Kinect for Windows SDK v2.0 で開発する環境を整える(C++編) - Natural Software

kinect.h は、Kinect SDKの中にあった。

環境変数を確認したら、
KINECTSDK20_DIR
C:\Program Files\Microsoft SDKs\Kinect\v2.0_1409\
という値があった。
たぶん、Kinect SDKをインストールしたときに設定されたのだと思う。

構成の設定

Solution Explorerで、PclViewerSample1(プロジェクト名)を右クリック。
Release Property Pagesの
Configuration: で、All Configurations を選択。

Configuration Properties > C/C++ > General > Additional Include Directories
で、
$(KINECTSDK20_DIR)\inc
を追加。

Configuration Properties > Linker > General > Additional Library Directories
で、
$(KINECTSDK20_DIR)\lib\x64
を追加。

Configuration Properties > Linker > Input > Additional Dependencies
で、
Kinect20.lib
を追加。

f:id:kubotti:20151128223121p:plain

エラーその1

Error    2   error LNK2001: unresolved external symbol GetDefaultKinectSensor    c:\Users\aaaaaa\documents\visual studio 2013\Projects\PclViewSample1\PclViewSample1\PclViewSample1.obj  PclViewSample1
Error   3   error LNK1120: 1 unresolved externals   c:\users\aaaaaa\documents\visual studio 2013\Projects\PclViewSample1\x64\Release\PclViewSample1.exe PclViewSample1

原因は、上記の Kinect20.lib
の追加をしていなかったからのようだった。

実行

========== Build: 0 succeeded, 0 failed, 1 up-to-date, 0 skipped ==========

ビルドに成功して、深度データ付きの画像が表示された。

f:id:kubotti:20151128223133p:plain

実行直後は3色の正しく動いていない風な画面が表示される。
これをマウスホイールとマウスドラッグで動かすと3次元の画面を動かせる。
Ctrl + マウスドラッグ でz軸固定?
Shift + マウスドラッグ で平行移動
Ctrl + Shift + マウスドラッグ で拡大縮小(z軸のみ移動?)

f:id:kubotti:20151128223141p:plain