RealSense D435でKinect Fusionする

経緯

RealSenseのDepthセンサーを使ってSLAMをしたい。 簡単なのはROSを使うことらしい。 ただ、ROSを使ったことが無いというのと将来的にUnityにリアルタイムでそのモデルを持っていきたいので、Unityに繋ぎやすい方法で実装したかった。 そこで、将来的にNative PluginとしてUnityに繋ぐことを想定して、最近OpenCVに実装された kinfu (Kinect FusionのOpenCVコミュニティ版実装)を動かしてみることにした。 そして、このブログをもうちょっと技術的なブログにしていこうと思って書いた。

環境

大事なこと

  • ビルド済のRealSense SDKは64bitでビルドされているので、OpenCVも64bitでビルドする必要がある

やったこと

  • OpenCVOpenCV-contribをgit clone
  • それぞれ4.1.0としてcheckout
  • OpenCVディレクトリの下に build というディレクトリを作る
  • cmake(gui)を開いて、opencvディレクトリとopencv/buildのディレクトリを開く
  • 以下の設定を変更する

    • OPENCV_ENABLE_NONFREE (チェックを入れる)
    • OPENCV_EXTRA_MODULES_PATH (opencv-contrib/modules へのパスを入れる)
    • WITH_OPENCL (チェックを入れる)
    • WITH_LIBREALSENSE (チェックを入れる)
    • LIBREALSENSE_INCLUDE_DIR (Add EntityからDirecotry Pathとして、C:/Program Files (x86)/Intel RealSense SDK 2.0/include を入れる)
    • LIBREALSENSE_LIBRARIES (Add EntryからFile Pathとして、C:/Program Files (x86)/Intel RealSense SDK 2.0/lib/x64/realsense2.lib を入れる) x86もあるけど、x64選ぶこと。
  • configureする

  • open projectする
  • ALL_BUILDを右クリックしてBuild (時間かかる)
  • INSTALLを右クリックしてビルド
  • opencv/build/install 以下にヘッダファイルやビルド済みlibなどができるので、opencv/build/installディレクトリを適当な場所と名前でコピー (例えば C:/opencv-410/)
  • 環境変数opencv-410/x64/vc15/bin/ を追加
  • Visual StduioのC++のインクルードパスと、ライブラリパスに、opencv-410/x64/vc15/libopencv-410/include を追加
  • opencv-worldではなく、coreやhighguiなどがバラバラのlibとしてビルドされるので、それらすべてをVisual Studioのリンカが見に行けるように登録する
  • OpenCVのビルド & 設定完了

実行

  • サンプルプロジェクトを作って実行したときに、librealsense2.dllが見つからないというランタイムエラーが発生したら、RealSense SDKの中からlibrealsense2.dllを探してきてプロジェクトのディレクトリにコピーする (RealSense SDKへのパスが通っていたらおそらく不要?)

参考にさせて頂いた記事

ほとんどここの通りなのだけれど、ビルド済みRealSense SDKが64bitとは知らず32bitでOpenCVをビルドして手間取ってしまった。 qiita.com