mcpField
I
isaac-camera

isaac-camera

github.com/isaac-simその他4.4k40 回インストール5 日前に更新
リポジトリ

isaac-camera について

isaac-camera は、Isaac Sim 6 / Kit 110 でカメラを作成、設定する技術スキルです。USDカメラ、RTX撮影、キャリブレーション、歪み、マルチカメラ構成、アニメーションを扱います。

主な機能

  1. 01USDカメラとRTXカメラの作成
  2. 02RGB、深度、セグメンテーション、バウンディングボックスの取得
  3. 03OpenCVレンズ歪みモデルの設定
  4. 04OpenCVおよびROSキャリブレーションの変換
  5. 05ステレオ、タイル型、マルチカメラ構成の構築
  6. 06カメラのパスと姿勢のアニメーション

活用シーン

  1. 01キャリブレーション済みカメラ撮影パイプラインの構築
  2. 02魚眼またはピンホールレンズ歪みのシミュレーション
  3. 03マルチビューまたはステレオデータの収集
  4. 04シーン撮影用カメラアニメーションの作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/isaac-sim/isaacsim --skill isaac-camera

インストール後、Claude Code で/isaac-cameraを入力して読み込まれたか確認します。

詳細

カメラ(Isaac Sim 6 / Kit 110)

目的

Isaac Sim 6 のセンサーパイプライン向けに、USD カメラ、レンダープロダクト、内部パラメーター、AOV、レンズ歪みモデルを作成および設定します。

前提条件

  • ビルド済みの Isaac Sim($ISAAC_SIM_DIR または _build/linux-x86_64/release)。
  • 現行ドライバーを搭載した NVIDIA GPU(nvidia-smi)。
  • isaac-sim-orchestrator のシェル環境変数の要件:$ISAAC_SIM_DIR、$ISAAC_LAB_DIR、$WORKSPACE_DIR。

制限事項

  • セクションで特に指定されていない限り、Isaac Sim 6 / Kit 110 を対象とします。
  • サポートされていないエッジケースについては、NVIDIA の公式ドキュメントの代わりにはなりません。

トラブルシューティング

エラー/症状原因解決方法
拡張機能またはインポートが見つからない$ISAAC_SIM_DIR の誤り、または古いビルド環境変数を _build/linux-x86_64/release に設定するか、再ビルドします
フレームが黒い、または空ライトがない、または RTX 以外のレンダーモードドームライト/キーライトを追加し、RTX/PathTracing の設定を確認します
ステージの読み込み時または初回レンダリング時に停止するMDL のコンパイル、または大きすぎるステージisaac-sim-troubleshooting の切り分け手順に従います

2 つのレイヤーを組み合わせて使用します。

  1. UsdGeomCamera — USD カメラのプリム(焦点距離、アパーチャ、クリッピング、トランスフォーム)。
  2. isaacsim.sensors.experimental.rtx — ランタイムセンサーのラッパー(作成クラス+ランタイムセンサークラス)。フレームをキャプチャする、アノテーターをアタッチする、またはレンズ歪みを適用する新しいコードでは、これを使用します。

レガシーの isaacsim.sensors.camera.Camera クラスは引き続き動作しますが、拡張機能自体はスタブ(Python コードなし)です。実装は isaacsim.sensors.experimental.rtx に移行したため、新しいコードではこちらを使用してください。

移行: 以下の isaacsim.sensors.camera.Camera からの移行 の表と、API の変更点全体を説明した NVIDIA 公式のカメラ移行ガイドを参照してください。

使用する場面

  • USD ステージでカメラプリムを作成または設定します。
  • キャプチャ用に RGB/深度/セグメンテーション/バウンディングボックスのアノテーターをアタッチします。
  • レンズ歪み(OpenCV ピンホール、OpenCV 魚眼、LUT)を適用します。
  • 実世界のキャリブレーション(OpenCV/ROS)を Omniverse の単位に変換します。
  • ステレオ、マルチセンサー、またはタイル状のマルチカメラリグを構築します。
  • カメラをアニメーション化します(キーフレーム、モーションパス、周回、フライスルー)。
  • Replicator のランダム化で合成データを生成します。
  • MEGA シナリオ向けに Metropolis カメラを設定します。

基礎知識

単位系

OpenUSD では、光学プロパティをシーン単位の 10 分の 1で表します。

プロパティ単位備考
焦点距離シーン単位の 10 分の 1シーン単位が cm の場合、35 = 35 mm
水平アパーチャシーン単位の 10 分の 1センサー/フィルムの幅
垂直アパーチャシーン単位の 10 分の 1センサー/フィルムの高さ
フォーカス距離シーン単位完全に焦点が合う距離
クリッピング範囲シーン単位ニア/ファーのクリップ面

メートル単位のステージでは、焦点距離 25 mm は 0.025 です。

座標系

カメラは -Z 方向を向き、+Y が上、+X が右です。ステージの上方向軸にかかわらず同じです。

作成とキャプチャ — RtxCamera + CameraSensor

Isaac Sim 6 でカメラを作成してキャプチャするには、RtxCamera + CameraSensor を使用します。RtxCamera は OmniSensorAPI が適用された UsdGeom.Camera プリムをラップし、CameraSensor はその上に Replicator のレンダープロダクトを構築してアノテーターを公開します。どちらも isaacsim.core.experimental.prims.XformPrim ファミリーを拡張しているため、標準のポーズ/トランスフォームメソッドを使用できます。

from isaacsim.sensors.experimental.rtx import RtxCamera, CameraSensor
import isaacsim.core.experimental.utils.app as app_utils

cam = RtxCamera(
    "/World/cam",
    tick_rate=30.0,                       # 0 = autotrigger
    aux_output_level="NONE",              # RtxCamera supports NONE only
)
cam.camera.set_focal_lengths(24.0)
cam.camera.set_clipping_ranges(0.01, 1000.0)

sensor = CameraSensor(
    cam,
    resolution=(480, 640),                # (height, width)
    annotators=["rgb", "distance_to_image_plane"],
)
app_utils.play(commit=True)
data = sensor.get_data("rgb")

ポーズは RtxCamera に直接設定します(XformPrim です)。コンストラクターに positions=/translations=/orientations=(クォータニオン wxyz)を渡すか、後から set_world_poses(...) を呼び出します。

cam.set_world_poses(positions=[[2.0, 2.0, 2.0]],
                    orientations=[[1.0, 0.0, 0.0, 0.0]])   # wxyz

TiledCameraSensor は多数のカメラを 1 回のレンダー呼び出しにまとめます。マルチビューの RL データ収集に便利です。SingleViewDepthCameraSensor は OmniSensorDepthSensorSingleViewAPI を介してステレオ深度をシミュレートします。

レンズ歪み(OpenCV fisheye/pinhole)

作成時に、API スキーマと USD 属性で設定します。スキーマ名と属性名は安定しているため、RtxCamera の schemas および attributes コンストラクター引数を使うか、カメラの prim に直接 Apply してください。

from isaacsim.sensors.experimental.rtx import RtxCamera
from pxr import Gf

cam = RtxCamera(
    "/World/fisheye",
    schemas=["OmniLensDistortionOpenCvFisheyeAPI"],
    attributes={
        "omni:lensdistortion:opencvFisheye:fx": 500.0,
        "omni:lensdistortion:opencvFisheye:fy": 500.0,
        "omni:lensdistortion:opencvFisheye:cx": 640.0,
        "omni:lensdistortion:opencvFisheye:cy": 360.0,
        "omni:lensdistortion:opencvFisheye:k1": 0.05,
        "omni:lensdistortion:opencvFisheye:imageSize": Gf.Vec2i(1280, 720),
    },
)

同等の OpenCV-pinhole スキーマは OmniLensDistortionOpenCvPinholeAPI です(属性 omni:lensdistortion:opencvPinhole:{fx,fy,cx,cy,k1,k2,p1,p2,...})。LUT ベースの歪みには OmniLensDistortionLutAPI を使用します。

アニメーション

from pxr import Usd, Gf

for frame, pos in enumerate(camera_positions):
    cam.GetPrim().GetAttribute("xformOp:translate").Set(
        Gf.Vec3d(*pos), Usd.TimeCode(frame)
    )

Replicator によるランダム化

import omni.replicator.core as rep

with rep.new_layer():
    cameras = rep.get.prims(path_pattern="/World/Camera.*")
    with rep.trigger.on_frame(num_frames=200):
        with cameras:
            rep.modify.pose(
                position=rep.distribution.uniform((-5, -5, 2), (5, 5, 8)),
                look_at="/World/Target",
            )

センサーの確認/サポートされている設定

アセット駆動型の lidar/camera 設定と検証ヘルパーについては、isaacsim.sensors.experimental.rtx.SUPPORTED_LIDAR_CONFIGS と、拡張機能に同梱されている sensor_checker モジュールを参照してください。Replicator AOV アノテーター名は標準レジストリと一致します:rgb、distance_to_image_plane、distance_to_camera、normals、semantic_segmentation、instance_segmentation、bounding_box_2d_tight、bounding_box_2d_loose、bounding_box_3d、camera_params、pointcloud、occlusion。

isaacsim.sensors.camera.Camera からの移行

完全なガイド:isaacsim.sensors.camera → isaacsim.sensors.experimental.rtx。

旧新
isaacsim.sensors.camera.Camera("/World/cam", resolution=(1280, 720))RtxCamera("/World/cam") + CameraSensor(cam, resolution=(720, 1280), annotators=["rgb"])
camera.set_focal_length(24)cam.camera.set_focal_lengths(24.0)
camera.set_clipping_range(0.01, 1000)cam.camera.set_clipping_ranges(0.01, 1000)
camera.initialize() の後に camera.get_current_frame()app_utils.play(commit=True) の後に sensor.get_data(annotator)
Carb-settings による歪み(/<path>/distortionModel)カメラの prim に適用する OmniLensDistortion*API スキーマ

コメント