Intel RealSenseは、深度センサーを使って3Dスキャンを行い、周囲の環境を3Dで捉えることができます。点群取得は、物理的な物から点を捉え、その3D表現を作成する物です。本記事では、Intel RealSenseを使用して点群を取得する方法を取り扱っていきます。
1: 必要な物
RealSenseデバイス: RealSenseデバイス(例えば、D415、D435など)が必要です。
RealSense SDK 2.0:動作確認用に Intelの公式サイトからRealSense SDK 2.0をインストールしてください。(なくてもOK)
Python: Pythonがインストールされていることを確認してください。
pyrealsense2: Python用RealSenseライブラリをインストールしてください。
pip install pyrealsense2
numpy: numpyインストールしてください。
pip install numpy
numpy: open3dインストールしてください。
pip install open3d
2: 点群取得のプログラムを作成
以下は、Pythonを使用してRealSenseデバイスから点群を取得し、表示するためのコードです。
import pyrealsense2 as rs
import numpy as np
import open3d as o3d
# RealSenseの設定
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
try:
# ストリーミング開始
pipeline.start(config)
# 一定フレーム待つ
for _ in range(30):
pipeline.wait_for_frames()
# フレームの取得
frames = pipeline.wait_for_frames()
depth_frame = frames.get_depth_frame()
# 点群の取得
pc = rs.pointcloud()
pc.map_to(depth_frame)
points = pc.calculate(depth_frame)
# 点群をNumpy配列に変換し、2次元配列に形状変更
vtx = np.asanyarray(points.get_vertices()).view(np.float32).reshape(-1, 3)
# Open3Dを使って点群を表示
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(vtx)
o3d.visualization.draw_geometries([pcd])
finally:
# ストリーミング停止
pipeline.stop()
上記のコードではOpen3Dを使用して点群を表示していますが、他の3D可視化ツールを使用することも可能です。
また、上記のコードでは2次元配列に変換していますが、これはOpen3Dの入力が2次元配列を求めている為です。したがって使用する用途に合わせて適切に変換をかけてください。