LoginSignup
3
1

RealSenseで点群を取得する方法

Last updated at Posted at 2023-12-31

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次元配列を求めている為です。したがって使用する用途に合わせて適切に変換をかけてください。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1