isaac-camera について
isaac-camera は、Isaac Sim 6 / Kit 110 でカメラを作成、設定する技術スキルです。USDカメラ、RTX撮影、キャリブレーション、歪み、マルチカメラ構成、アニメーションを扱います。
主な機能
- 01USDカメラとRTXカメラの作成
- 02RGB、深度、セグメンテーション、バウンディングボックスの取得
- 03OpenCVレンズ歪みモデルの設定
- 04OpenCVおよびROSキャリブレーションの変換
- 05ステレオ、タイル型、マルチカメラ構成の構築
- 06カメラのパスと姿勢のアニメーション
活用シーン
- 01キャリブレーション済みカメラ撮影パイプラインの構築
- 02魚眼またはピンホールレンズ歪みのシミュレーション
- 03マルチビューまたはステレオデータの収集
- 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 つのレイヤーを組み合わせて使用します。
UsdGeomCamera— USD カメラのプリム(焦点距離、アパーチャ、クリッピング、トランスフォーム)。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 スキーマ |