私は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形式点群をダウンロードして確認できます。
以下の動画のように、キーボードM
を押すと、メニューが画面に表示され、いろんな可視化設定を変更できます。点群の形状、サイズ、色、透明度など、さまざまな設定が可能ですので、ぜひ試してみてください。
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
4. LiDAR Calibration Tools
2つのLiDARの相対姿勢を計算するツールです。相対姿勢を手動で調整したり、自動キャリブレーションを行うことも可能です。
lidar_calib --lidar0=/YOUR_LIDAR0_TOPIC --lidar1=/YOUR_LIDAR1_TOPIC
5. Lidar Camera Calibration Tools
LiDARとカメラの相対姿勢を計算するツールです。相対姿勢を手動で調整し、リアルタイムでLiDARの点を画像に投影する結果を確認できます。
lidar_cam_calib --lidar=/YOUR_LIDAR_TOPIC --camera=/YOUR_CAMERA_TOPIC --camera_info=/YOUR_CAMERA_INFO_TOPIC
ライブラリとしての使用
「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に公開しています。