RealSense D435でKinect Fusionする
経緯
RealSenseのDepthセンサーを使ってSLAMをしたい。
簡単なのはROSを使うことらしい。
ただ、ROSを使ったことが無いというのと将来的にUnityにリアルタイムでそのモデルを持っていきたいので、Unityに繋ぎやすい方法で実装したかった。
そこで、将来的にNative PluginとしてUnityに繋ぐことを想定して、最近OpenCVに実装された kinfu
(Kinect FusionのOpenCVコミュニティ版実装)を動かしてみることにした。
そして、このブログをもうちょっと技術的なブログにしていこうと思って書いた。
環境
- Windows 10 Home
- Visual Studio Community 2017
- OpenCV 4.1.0
- OpenCV-contrib 4.1.0
- ビルド済 RealSense SDK 2.21.0
- Cmake 3.14.4
大事なこと
やったこと
- OpenCVとOpenCV-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/lib
、opencv-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