PCLのインストールとプロジェクト生成


点群を操作するライブラリPoint Cloud LibraryをwindowsにインストールしてCMakeでプロジェクト生成するまでのお話。

  • Windows10
  • PCL 1.8.1

PCLのインストール

PCLは外部の依存ライブラリがあるので、すべて自前で用意するのは面倒です。しかし、有難いことに All In One のインストーラがあるので利用させてもらいましょう(参考)。参考にも言及がある通り、環境変数の設定は忘れずに。嵌ります。
途中 OpenNI のインストールに失敗しましたが、点群データをファイルから読み書きするぶんには利用しないで放置。
楽ちんです。

プロジェクトの生成

C++を弄るので Visual Studio を使います。参照する外部ファイルが大量にあるので自分で設定するのは面倒です。CMakeを使いましょう。
CMakeLists.txt に以下の通り記述して main.cpp を含むプロジェクト"pcl_project"を作ります。PCLを含むCMakeListes.txtのひな型はここから取得しました。

cmake_minimum_required( VERSION 2.8 )

# Create Project
project( pcl_project )
add_executable( test main.cpp)

# Set StartUp Project (Option)
# (This setting is able to enable by using CMake 3.6.0 RC1 or later.)
set_property( DIRECTORY PROPERTY VS_STARTUP_PROJECT "test" )

# CMake 3.12 and above in order to suppress a lot of warnning
# cmake_policy(SET CMP0074 OLD)

# PCLConfing.cmake can not find VTK, so specify its location directly
# set(VTK_DIR "C:/Program Files/VTK/lib/cmake/vtk-8.0" CACHE PATH "VTK directory override" FORCE)

# Find Packages
find_package( PCL 1.8 REQUIRED )

if( PCL_FOUND  )
  # [C/C++]>[General]>[Additional Include Directories]
  include_directories( ${PCL_INCLUDE_DIRS} )
  # [C/C++]>[Preprocessor]>[Preprocessor Definitions]
  add_definitions( ${PCL_DEFINITIONS} )  
  # For Use Not PreCompiled Features 
  add_definitions( -DPCL_NO_PRECOMPILE )

  # [Linker]>[General]>[Additional Library Directories]
  link_directories( ${PCL_LIBRARY_DIRS} )
  # [Linker]>[Input]>[Additional Dependencies]
  target_link_libraries( test ${PCL_LIBRARIES} )
endif()

次にCMake でプロジェクトを生成します。PCLディレクトリ下にCMakeLists.txtとmain.cppが存在するとします。プロジェクトの出力先には必ず別のディレクトリを指定すること!

使用する Visual Studio のバージョンとインストールした PCL に合わせて選択すること。 Win64 (x64)と無印 (x32) を間違えるな!(CMakeのバージョンによっては表示が若干違うかも)

エラーが出なくなるまで Configure し続けます。

なんか依存ライブラリのVTKのインストール先(VTK_DIR)が迷子だったので、CMakeLists.txtで直接指定しました。VTKConfig.cmake なるファイルの場所を指定すれば良さそうです。All in One インストーラで***/PCL 1.8.1/3rdParty/VTK/ 以下に入れたので、

set(VTK_DIR "C:/hoge/PCL 1.8.1/3rdParty/VTK/lib/cmake/vtk-8.0" CACHE PATH "VTK directory override" FORCE)

とすれば良いはず。しかし、find_package で VTK のバージョンがどうのこうのでエラーが出て死んだ。VTKConfig.cmake 覗いてみるとインストール先の場所が問題っぽい。CMake は良くわからないので、VTKの関連ファイル全部を移動した(追記:PCL 1.9.1 でもやはりVTK_DIRの直接指定が必要だったが、VTKディレクトリの移動は不要だった)。

$ cp -r 'C:/hoge/PCL 1.8.1/3rdParty/VTK' 'C:/Program Files/VTK'

あとはコピー先の VTKConfig.cmake の場所を教えてあげて、

set(VTK_DIR "C:/Program Files/VTK/lib/cmake/vtk-8.0" CACHE PATH "VTK directory override" FORCE)

無事エラーを解消。
最後に Generate して Open Project で開けば終わり。