118
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自作の3D点群ビューアーをオープンソース化してみた

Last updated at Posted at 2025-01-26

私はSLAMの研究に従事しており、3D点群データなど大規模な3Dオブジェクトを効率的に可視化する必要があるため、自分のニーズを満たすために可視化ライブラリ「q3dviewer」を開発しました。

せっかく作ったので、オープンソース化(MITライセンス)してみました!本記事では「q3dviewer」の活用例を交えながら、使い方を紹介します。多くの方に利用していただけると嬉しいです。

q3dviewerとは

q3dviewerは、3Dビューアを迅速に開発するためのライブラリです。3Dオブジェクト(例えば、点群、カメラ、3Dガウス)を表示するためのアイテムを組み合わせることで、さまざまなビューアをすばやく開発できます。利用例として、3D点群のビューアなどのツールも同梱しています。

特徴

  • 効率的な3Dレンダリング:点群など大規模な3Dデータを効率的に表示可能
  • 豊富な設定:3Dデータを動的に調整するためのGUIがあり、データを美しく表示可能
  • 簡単に拡張:カスタマイズビューアを迅速に開発、独自のオブジェクトの表示も拡張可能

インストール方法

LinuxまたはWindowsの端末で、以下のコマンドを実行するだけでq3dviewerをインストールできます:

pip install q3dviewer

Windowsでの注意点

  • Python 3の環境を事前に準備してください:
    • Python公式サイトからPython 3をダウンロードしてインストールします。
    • インストール時に「Add Python to PATH」にチェックを入れることを忘れないでください。

Liunxの注意点:

Ubuntu 20.04または22.04で共有ライブラリlibxcb-cursor.so.0の読み込みに関するエラーが発生した場合は、libxcb-cursor0をインストールしてください。

sudo apt-get install libxcb-cursor0

ツール類

インストール後、以下のツールを直接に使用できます。

1. Cloud Viewer

点群ファイル(LAS、PCD、PLY、E57)の可視化ツールです。以下のコマンドで起動できます。

cloud_viewer  # viewerが表示される
python3 -m q3dviewer.tools.cloud_viewer #コマンドが長くて、おすすめしませんが、PATHがとおらないとき

Viewerが起動したら、ウィンドウ上にファイルをドラッグ&ドロップすることで点群を表示できます。複数のファイルを同時にドロップすることも可能です。

例えば、東京都のLAS形式点群をダウンロードして確認できます。

Screenshot from 2025-01-26 23-06-29.png

以下の動画のように、キーボードMを押すと、メニューが画面に表示され、いろんな可視化設定を変更できます。点群の形状、サイズ、色、透明度など、さまざまな設定が可能ですので、ぜひ試してみてください。

大阪南港にある大規模商業施設ATCの点群データです。全体で3億点がある高密度な点群を間引かずにスムーズに表示できます。

2. ROS Viewer

ROSとの親和性が高く、RVIZの代わりに、高性能なSLAMビューアとして使用できます。

roscore &
ros_viewer

以下の動画は、私が開発した独自のLiDAR-Visual-SLAMのROS Viewerです。SLAMから点群を受け取りながら、リアルタイム的に点群を表示します。LiDARの点群を2D画像に投影した様子も可視化しています。

とてもキレイな点群地図を作成していますね。この独自SLAMも近くの将来に紹介する予定ですので、ぜひお楽しみにしてください。

3. Gaussian Viewer

以前の記事で紹介された3D Gaussianの簡易ビューアです。

gaussian_viewer  # drag and drop your gaussian file to windows

viewer-ezgif.com-resize.gif

4. LiDAR Calibration Tools

2つのLiDARの相対姿勢を計算するツールです。相対姿勢を手動で調整したり、自動キャリブレーションを行うことも可能です。

lidar_calib --lidar0=/YOUR_LIDAR0_TOPIC --lidar1=/YOUR_LIDAR1_TOPIC

lidar_to_lidar.png

5. Lidar Camera Calibration Tools

LiDARとカメラの相対姿勢を計算するツールです。相対姿勢を手動で調整し、リアルタイムでLiDARの点を画像に投影する結果を確認できます。

lidar_cam_calib --lidar=/YOUR_LIDAR_TOPIC --camera=/YOUR_CAMERA_TOPIC --camera_info=/YOUR_CAMERA_INFO_TOPIC

manual_lidar_cam_calib.png

ライブラリとしての使用

「q3dviewer」を使って独自の3Dビューアを簡単にカスタマイズ開発できます。以下はコーディング例です。

カスタマイズ3Dビューア

#!/usr/bin/env python3

import q3dviewer as q3d  # q3dviewerをimportする

def main():
    # Qtアプリケーションの作成
    app = q3d.QApplication([])

    # 各種3Dアイテムの作成
    axis_item = q3d.GLAxisItem(size=0.5, width=5)
    grid_item = q3d.GridItem(size=10, spacing=1)

    # ビューアの作成
    viewer = q3d.Viewer(name='example')
    # ビューアにアイテムを追加
    viewer.add_items({
        'grid': grid_item,
        'axis': axis_item,
    })

    # ビューアの表示 & Qtアプリケーションの実行
    viewer.show()
    app.exec_()

if __name__ == '__main__':
    main()

q3dviewerには、以下の3Dアイテムが提供されています。

  • AxisItem: 座標軸、または自己位置の表示
  • CloudItem: 点群の表示
  • CloudIOItem: IO機能付きの点群表示
  • GaussianItem: 3Dガウスの表示
  • GridItem: グリッドの表示
  • ImageItem: 2Dイメージの表示
  • Text2DItem: 2Dテキストの表示
  • LineItem: 線(ロボット軌跡など)の表示

独自アイテムの開発

標準で提供される3Dアイテム以外にも、簡単なコーディングで独自の3Dアイテムも可視化できます。以下はサンプルです。


from OpenGL.GL import *
import numpy as np
import threading
import q3dviewer as q3d

from PySide6.QtWidgets import QLabel, QSpinBox

class YourItem(q3d.BaseItem):
    def __init__(self):
        super(YourItem, self).__init__()
        pass  # 必要な初期化

    def add_setting(self, layout):
        # このアイテムを設定するためのGUI
        label = QLabel("Add your setting:")
        layout.addWidget(label)
        box = QSpinBox()
        layout.addWidget(box)

    def set_data(self, data):
        pass  # データをsetする

    def initialize_gl(self):
        pass  # OpenGLの初期化設定(必要であれば)

    def paint(self):
        pass  # OpenGLを使って3D物体を可視化する

興味のある方は、ぜひ「q3dviewer」をインストールして、試してください。

ソースはGithubに公開しています。

118
88
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
118
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?