私はSLAMの研究に従事しており、3D点群データなど大規模な3Dオブジェクトを効率的に可視化する必要があるため、自分のニーズを満たすために可視化ライブラリ「q3dviewer」を開発しました。
せっかく作ったので、オープンソース化(MITライセンス)してみました!本記事では「q3dviewer」の活用例を交えながら、使い方を紹介します。多くの方に利用していただけると嬉しいです。
q3dviewerとは
q3dviewerは、3Dビューアを迅速に開発するためのライブラリです。3Dオブジェクト(例えば、点群、カメラ、3Dガウス)を表示するためのアイテムを組み合わせることで、さまざまなビューアをすばやく開発できます。利用例として、cloud_viewer、film_makerなどのとても便利なツールも同梱しています。
特徴
- 効率的な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が起動したら、ウィンドウ上にファイルをドラッグ&ドロップすることで点群を表示できます。複数のファイルを同時にドロップすることも可能です。
基本操作
- ファイルのロード:点群ファイルを画面に引っ張ってきて放すだけ(複数ファイルOK)
-
M
キー:点群、背景色などの可視化設定画面 -
マウス左ボタン
orW,A,S,D
キー:水平面での視点移動 -
Z,X
キー:画面の向いている方向に沿って視点を移動 -
マウス右ボタン
or矢印
キー:画面の中心(赤い点)を変えずに視点を回転 -
Shift
+マウス右ボタン
orShift
+矢印
キー:カメラの位置を変えずに視点を回転
例えば、東京都のLAS形式点群をダウンロードして確認できます。
以下の動画のように、キーボードM
を押すと、メニューが画面に表示され、いろんな可視化設定を変更できます。点群の形状、サイズ、色、透明度など、さまざまな設定が可能ですので、ぜひ試してみてください。
2. ROS Viewer
ROSとの親和性が高く、RVIZの代わりに、高性能なSLAMビューアとして使用できます。
roscore &
ros_viewer
以下の動画は、私が開発したF4-SLAM(F3-SLAMのバージョンアップ)のROS Viewerです。SLAMから点群を受け取りながら、リアルタイム的に点群を表示します。LiDARの点群を2D画像に投影した様子も可視化しています。
YouTubeの設定で1080pで再生していただくと高精細な映像でご覧いただけます!
とてもキレイな点群地図を作成していますね。F4-SLAMも近くの将来に紹介する予定ですので、ぜひお楽しみにしてください。
3. Film Maker
3D点群などの動画を作成する際、手動でカメラの視点を動かすことがよくありますが、その動作が不規則で美しくないです。そこで、film_makerをお試しください。
簡単なGUIを使っていくつかのキーフレームを設定することで、スムーズな補完を自動で行い、美しい点群動画を作成できます。
以下のコマンドで起動できます。
film_maker
基本操作
- ファイルのロード&視点移動:Cloud_Viewerと同じ
-
Space
キー:キーフレームを追加 -
Delete
キー:キーフレームを削除 - Playボタン:動画の自動再生(再度押すと再生終了)
- Recordチェックボックス:チェックした状態で動作を再生すると、自動で録画
京橋駅周辺三次元点群データを使用して、Film Makerで動画を作成する様子
4. Gaussian Viewer
以前の記事で紹介された3D Gaussianの簡易ビューアです。
gaussian_viewer # drag and drop your gaussian file to windows
5. LiDAR Calibration Tools
2つのLiDARの相対姿勢を計算するツールです。相対姿勢を手動で調整したり、自動キャリブレーションを行うことも可能です。
lidar_calib --lidar0=/YOUR_LIDAR0_TOPIC --lidar1=/YOUR_LIDAR1_TOPIC
6. 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に公開しています。