Isaac Sim
Zivid は、当社のカメラを NVIDIA Isaac Sim にインポートするための公式拡張機能を提供しています。
警告
この拡張機能は試験的なものです。API および GUI は変更される可能性があります。
この拡張機能は、以下の GitHub リポジトリにあります。 zivid-isaac-sim
拡張機能をインストールするには、 公式の Isaac Sim ドキュメント を参照して、拡張機能の追加と更新方法を確認してください。
Tip
拡張機能ウィンドウに入力したパスが、zivid-isaac-sim リポジトリの source ディレクトリを指していることを確認してください。または、コマンドに --ext-path /path/to/zivid-isaac-sim/source/isaacsim.zivid を追加することで、Isaac Sim の起動時にリポジトリへのパスを直接指定することもできます。
Zivid カメラの入門
拡張機能のインストールが完了したら、次のステップは Zivid カメラを作成することです。
シーン内に Zivid カメラを作成します。
Zivid カメラを作成するには、 Create をクリックし、次に Zivid Camera をクリックします。ドロップダウンメニューからロードするカメラモデルを選択します(オプションでマウントも選択できます。これはロボットへの取り付けに特に役立ちます)。 Add をクリックして、カメラをシーンに追加します。
ロボットアームに Zivid カメラを取り付ける
ロボットに Zivid カメラを追加するには、まずロボットを Isaac Sim にロードする必要があります。Isaac Sim ウィンドウの下部にある「Isaac Sim Assets」タブには、すでに多くのロボットが用意されています。ロボットがロードされたら、ロボットのフランジを右クリックし、 Create を選択してから Zivid Camera を選択します。適切なカメラモデルとロボットマウントを選択し、 Add をクリックしてカメラをロボットに追加します。
Tip
各種マウントに関する詳細は、当社の ウェブショップ をご覧ください。
Zivid カメラとのインタラクション
カメラが作成されると、それとやり取りする方法はいくつかあります。
Zivid カメラで撮影
Zivid カメラで仮想画像をキャプチャするには、まず Isaac Sim の左端の列にある Play ボタンをクリックしてシミュレーションを実行する必要があります。次に、Zivid Camera ウィンドウ内の Capture ボタンをクリックして 2D 画像をキャプチャします。
Tip
カメラの サンプリングモード を変更することで、画像と点群の解像度に影響を与えることもできます。
点群の可視化
点群を視覚化するには、Zivid Camera ウィンドウ内の Visualize Field of View ボタンを切り替えます。Capture 機能と同様に、まず Play ボタンを押してください。点群はシーン内の赤い点で視覚化されます。
点群データの抽出
Isaac Sim の GUI から直接この操作を行うことはできませんが、この拡張機能は API を介して点群データを抽出することをサポートしています。その方法を示す最小限の例を以下に示します。また、デモ export_ply.py を実行することでも確認できます。(デモの実行方法については、以下の Running demos を参照してください。)
zivid_camera = ZividCamera(model_name=model_name, prim_path=zivid_prim_path)
point_cloud_file_name = "zivid_point_cloud.ply"
zivid_camera.initialize()
zivid_camera.set_sampling_mode(SamplingMode.DOWNSAMPLE4X4)
i = 0
for _ in range(10):
my_world.step(render=True)
frame = zivid_camera.get_frame()
frame.save_ply(point_cloud_file_name)
視野を探索する
カメラおよび/またはカメラのプロジェクターの FOV を調べるには、Stage ペインで Zivid オブジェクトを見つけて、 + アイコンをクリックして展開します。次に、 camera_sensor または projector オプションのいずれかをクリックすると、それぞれの FOV が表示されます。
カメラの視点から世界を見たい場合は、レンダリングウィンドウの上部にある Perspective ボタンをクリックし、Cameras に続けて camera_sensor または projector に変更します。
デモの実行
zivid-isaac-sim リポジトリ内には、 demos というディレクトリがあります。このディレクトリには、カメラとのさまざまなインタラクション方法を示す複数の Python スクリプトが格納されています。
Tip
Isaac Sim の Python API を介してやり取りすることで、さらに詳細な制御が可能になり、Zivid の開発者もこれを推奨しています!
デモを実行するには、Isaac Sim に組み込まれている Python 環境を使用してください。この環境は、Ubuntu では python.sh ファイル、Windows では python.bat ファイルを実行することで起動できます。スクリプトは Isaac Sim ディレクトリ内にあり、入力引数として Python スクリプトを受け取ります。
デモを実行するには、以下の手順に従ってください。
cd /path/to/isaac-sim/ && ./python.sh /path/to/zivid-isaac-sim/demos/demo.py
cd path\to\isaac-sim
python.bat "path\to\zivid-isaac-sim\demos\demo.py"
Isaac Sim Python 環境に関する詳細情報は、 公式ドキュメント を参照してください。
Visual Studio Code で IntelliSense を設定する
Visual Studio Code Python 言語サービスを正しく構成するには、まず次のコマンドを実行して .vscode/settings.json ファイルを生成します。
/path/to/isaacsim/python/exe -m isaacsim --generate-vscode-settings
さらに、 .vscode/settings.json に次のエントリを追加してください。
{
"python.analysis.extraPaths": [
"/path/to/zivid-isaac-sim/source/isaacsim.zivid"
]
}
Zivid 点群のレンダリング
Zivid カメラで撮影した点群データを、Isaac Sim 環境内で直接レンダリングすることもできます。
拡張機能 omni.kit.pointclouds は、Isaac Sim 内で E57 形式で保存された点群をレンダリングするために作成されています。この拡張機能自体の必須要件ではありませんが、omni.flowusd もインストールされている必要があります。点群のレンダリングに必要なフロー拡張機能をインストールして有効化する omni.flowusd.bundle 拡張機能のインストールをお勧めします。
上記の拡張機能をインストールして有効化したら、最後に Isaac Sim にインポートする点群を見つける必要があります。点群は E57 ファイル形式である必要があります。これは、Zivid の点群を PLY 形式でエクスポートし、CloudCompare などのツールを使って E57 形式に変換することで取得できます。
E57 バージョンの点群データを入手したら、Isaac Sim の Content タブでそのファイルを探し、コンピューター上のファイルを参照してください。次に、ファイルを右クリックして Convert to USD を選択します。
デフォルトの変換オプションを使用し、Convert をクリックします。これにより、E57 ファイルと同じディレクトリに usd ファイルが作成され、自動的に Isaac Sim 環境にインポートされます。インポートされたファイルは、Stage タブに表示されます。
Stage タブに新しい USDpoints プリムオブジェクトが追加されました。先に進む前に、この scan USDpoints オブジェクトをクリックして選択してください。
Tip
USDpoints オブジェクトの原点が表示されない場合は、ズームアウトしてみてください。
次に、Window、Flow、そして Presets の順にクリックして、Isaac Sim ウィンドウの下部に Flow という名前の新しいタブを開きます。
このタブ内で、PointCloud オプションを右クリックし、Add to Stage を選択してから、Global Copy を選択します。
これで Zivid の点群データがシーンにレンダリングされますが、正しく表示するために位置を調整する必要がある場合があることに注意してください。