2021年2月22日月曜日

Open3DをUSE_SYSTEM_LIBREALSENSE(インストール済みライブラリをリンク)でビルドする

 目的


Open3DはRealSense SDK(librealsense)が組み込まれている。

ソースビルドした際、デフォルトではlibrealsenseをローカルでビルドし、静的リンクしている。Open3DのビルドオプションはFORCE_RSUSB_BACKEND=ONであったりするため、できればpre-install済みのバイナリを使いたい場合もある。

ビルド時に「USE_SYSTEM_LIBREALSENSE」を指定すればpre-install済みのバイナリをリンクするはずなのだが、実際には動作していないことがわかった。

このため、CMakeを修正し、「USE_SYSTEM_LIBREALSENSE」でpre-install済みのlibrealsenseをリンクするように対応する。


動機


前回のブログ「Jetson Nano(JetPack 4.5)でlibrealsenseをソースビルドする」でRealSense SDKをソースビルドしてインストールした。

このlibrealsenseを使ってOpen3DのRealSense IFを使ってみたかった。


リファレンス




手順


Open3Dに出したPull requestはマージされたのでcommit 41fcfdc 以降でビルドすればOK。

前回のブログのJetson Nano(librealsenseをソースビルドしてインストール)でビルドした(x86のUbuntuでも確認済み)。

Jetson Nanoの場合は、ARM supportの手順に従ってビルドする。
cmakeの際に
  • 「BUILD_LIBREALSENSE」と「USE_SYSTEM_LIBREALSENSE」をONにする。
  • 「GLIBCXX_USE_CXX11_ABI」をONにする。
    フラグをOFFにするとOpen3DとlibrealsenseのC++ ABIの違いで#2985の問題が発生する。
    このため、GLIBCXX_USE_CXX11_ABI=OFFを指定するとUSE_SYSTEM_LIBREALSENSEはOFFにしている。

$ git clone --recursive https://github.com/intel-isl/Open3D
$ cd Open3D
$ mkdir build && cd build
$ cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_SHARED_LIBS=ON \
    -DBUILD_CUDA_MODULE=OFF \
    -DBUILD_GUI=ON \
    -DPYTHON_EXECUTABLE=$(which python3) \
    -DBUILD_LIBREALSENSE=ON \
    -DUSE_SYSTEM_LIBREALSENSE=ON \
    -DGLIBCXX_USE_CXX11_ABI=ON
    ..
$ make -j3
$ sudo make install
$ sudo make install-pip-package


動作確認


Jetson Nanoで確認。

Pythonで接続したRealSense(L515)を認識していること。
$ python
Python 3.6.9 (default, Oct  8 2020, 12:12:24) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import open3d as o3d
>>> o3d.t.io.RealSenseSensor.list_devices()
[Open3D INFO] [0] Intel RealSense L515: f0220613
[Open3D INFO] 	depth_resolution: [320,240]
[Open3D INFO] 	depth_format: [RS2_FORMAT_Z16]
[Open3D INFO] 	visual_preset: [RS2_L500_VISUAL_PRESET_CUSTOM | RS2_L500_VISUAL_PRESET_DEFAULT | RS2_L500_VISUAL_PRESET_LOW_AMBIENT | RS2_L500_VISUAL_PRESET_MAX_RANGE | RS2_L500_VISUAL_PRESET_NO_AMBIENT | RS2_L500_VISUAL_PRESET_SHORT_RANGE]
[Open3D INFO] 	color_fps: [15 | 30 | 6]
[Open3D INFO] 	depth_fps: [30]
[Open3D INFO] 	color_resolution: [640,480]
[Open3D INFO] 	color_format: [RS2_FORMAT_BGR8 | RS2_FORMAT_BGRA8 | RS2_FORMAT_RGB8 | RS2_FORMAT_RGBA8 | RS2_FORMAT_Y16 | RS2_FORMAT_YUYV]
[Open3D INFO] Open3D only supports synchronized color and depth capture (color_fps = depth_fps).
True
>>> 

RealSenseRecorderのサンプルが動作すること。

やった〜!
PRもマージされて、Open3DのContributorになったぞ〜!!

0 件のコメント:

コメントを投稿