🎥

Realsenseで取得したデータをOpen3Dで3次元再構成する方法

2022/07/24に公開

3Dスキャン

3Dデータを作る3Dスキャンの方法として、Realsenseを使った方法とPhotogrammetry(フォトグラメトリ)を使った方法を以下の記事で紹介しました。

https://zenn.dev/karaage0703/articles/9bd4ad8604317d

この記事ではRealsenseで取得した複数の画像データとDepthMapから、Open3Dというソフトを使って3次元再構成する方法を紹介します。原理的には最新のiPhoneのLiDARを使った3DスキャンとかSLAMの一歩手前という感じでしょうか(詳細原理までは解説しませんし、私も理解できていません)。

この記事では、とりあえずやってみましたという内容です。この記事で扱うOpen3Dというソフトに関しては、以下のブログ記事参照ください。

https://karaage.hatenadiary.jp/entry/2018/03/12/073000

3Dスキャンの手順

やっていることは、Open3Dの以下のチュートリアルの手順を簡略化・日本語化して紹介しているだけです。より詳しく知りたい人は、以下のチュートリアルを参照してください。
http://www.open3d.org/docs/release/tutorial/reconstruction_system/capture_your_own_dataset.html

環境としてはLinux PCが前提です。Mac(Apple Silicon)では、Realsenseでのデータの取得はできましたが、3次元再構成でlibc++abi: terminating with uncaught exception of type pybind11::stop_iteration:というエラーでこけました。がんばれば直せる気がしますが、やっていません。WindowsではRealsenseでのデータ取得は実施できていませんが、WSL2で3次元再構成はできました。。

以下の手順が必要です。1,2は1回やればOKです。

  1. Realsenseのセットアップ
  2. Open3Dでの3次元構成環境セットアップ
  3. Realsenseでデータ取得
  4. Open3Dで3次元構成
  5. 3Dデータ確認

順に説明していきます。

Realsenseのセットアップ

以下記事を参考にセットアップしてください。

https://zenn.dev/karaage0703/articles/a267aa24a80c44

realsense-viewerで動作確認できる状態になっていればOKです。

Open3Dでの3次元構成環境セットアップ

Python環境は、今回仮想環境としてpyenv/pyenv-virtualenvを使った手順を説明します。他に好きな環境がある場合は、各自読み替えてください。

pyenv/pyenv-virtualenvのインストールは以下参照ください。

https://zenn.dev/karaage0703/articles/5af7ce4b8b1a8a

以下で仮想環境を作って入ります。

$ pyenv global 3.8.12
$ pyenv virtualenv 3.8.12 open3d
$ pyenv global 3.8.12/envs/open3d 

必要なライブラリをインストールします。

$ python -m pip install open3d==0.15.2
$ python -m pip install pyrealsense2
$ python -m pip install opencv-python

Open3Dのコードをダウンロードします。スクリプトをいくつか自分の使いやすいようにカスタムしたものを使用するため、オリジナルのリポジトリでなく、自分がforkしたリポジトリを使用します。

$ cd && git clone --depth 1 -b custom https://github.com/karaage0703/Open3D

ここで--depth 1 -b customのオプションつけているのは、Open3Dのリポジトリのサイズが大きいので、必要な特定のブランチを指定して最新版だけをもってくるようにしています。--depth 1はネットワークや時間に余裕があれば、つけなくてもOKです。

オリジナルのリポジトリを使いたい場合は以下コマンドを実行してください。

$ cd && git clone --depth 1 -b v0.15.1 https://github.com/isl-org/Open3D

これ以降は、ホームディレクトリ直下の~/Open3Dにディレクトリがある想定で説明していきます。

オリジナルのリポジトリを使用する場合は、以下の設定ファイルを作成します(カスタムしたリポジトリを使用する場合は、以下ファイルはすでに用意されているので作成の作業は不要です)。

~/Open3D/examples/python/reconstruction_system/config/realsense_img.json

記載する内容は以下です。

{
    "name": "Realsense image file",
    "path_dataset": "dataset/realsense",
    "path_intrinsic": "dataset/realsense/camera_intrinsic.json",
    "depth_max": 3.0,
    "voxel_size": 0.05,
    "depth_diff_max": 0.07,
    "preference_loop_closure_odometry": 0.1,
    "preference_loop_closure_registration": 5.0,
    "tsdf_cubic_size": 3.0,
    "icp_method": "color",
    "global_registration": "ransac",
    "python_multi_threading": true
}

Realsenseでデータ取得

Realsenseでデータを取得します。以下コマンドを実行すると、ウィンドウが開きRealsenseのプレビュー画面が表示されます。データは起動直後から自動的に取得されます。

$ cd ~/Open3D/examples/python/reconstruction_system/sensors/
$ python realsense_recorder.py --record_imgs

色々な方向にカメラを向けて、データをとりましょう。ウィンドウの上でESCボタンを押すと終了できます。~/Open3D/examples/python/reconstruction_system/dataset/というディレクトリにデータが格納されていればOKです。

オリジナルのスクリプトは、色がRGBでなくBGRだったり、色々使い勝手悪かったりしたので、カスタムしたリポジトリでは、このスクリプトを好みで修正しています。

Open3Dで3次元構成

以下コマンドを実行すると、3次元再構成が開始します。

$ cd ~/Open3D/examples/python/reconstruction_system
$ python run_system.py config/realsense_img.json --make --register --refine --integrate

データ量にもよりますが、数分かかります。

3Dデータ確認

MeshLabというソフトで確認します。入ってなければ、以下コマンドでインストールしてください。

$ sudo apt -y install meshlab

File -> Import Meshで以下にあるファイルを開きます。

dataset/realsense/scene/integrated.ply

以下のように3次元データが表示されたらOKです。

ミクさんでテスト

https://twitter.com/karaage0703/status/1551206359495876608

参考リンク

http://www.open3d.org/docs/release/tutorial/reconstruction_system/capture_your_own_dataset.html

https://github.com/isl-org/Open3D/pull/5219

http://whitewell.sakura.ne.jp/Open3D/

http://whitewell.sakura.ne.jp/Open3D_2018/

http://isl.sist.chukyo-u.ac.jp/wp-content/uploads/2019/05/RSJ-119thSeminar-slides.pdf

https://www.slideshare.net/ttamaki/3open3d3

https://qiita.com/tyori03/items/ce4cb85be7e24ab1f99b

https://github.com/isl-org/Open3D/issues/4809

https://zenn.dev/tasada038/articles/270e074e48d46e

関連記事

https://zenn.dev/karaage0703/articles/8e3e84c0fe45ba

Discussion