Skip to main content

isaac-sim-validator

Pre-delivery QA gate for Isaac Sim scripts (imports, lights, paths, frames). Level 3 executes untrusted Python unsandboxed and needs --confirm-execute. Use before handing off simulation work.

소스 정보

저장소
isaac-sim/IsaacSim
최근 소스 활동
2026년 9월 18일 16:05
감지된 SKILL.md 언어
영어
스타
4,169
포크
560

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
7 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
isaac-sim-validator
description
Pre-delivery QA gate for Isaac Sim scripts (imports, lights, paths, frames). Level 3 executes untrusted Python unsandboxed and needs --confirm-execute. Use before handing off simulation work.
license
Apache-2.0
metadata
{"author":"Renato Gasoto <info@nvidia.com>"}
# Isaac Sim Validator **WARNING:** Level 3 executes the target script with your full user privileges. There is no container or sandbox isolation. Only use `--confirm-execute` on scripts you fully trust. ## Purpose Reject common delivery defects: black frames, deprecated imports, hardcoded user paths, missing lights, wrong render modes, and undersized `SimulationApp` configurations. Levels 1–2 are **static** checks only. **Level 3 runs the target Python script** under `timeout` with the calling user's privileges. Level 3 requires an explicit `--confirm-execute` (or `CONFIRM_EXECUTE=1`) opt-in; it is not a sandbox. ## Prerequisites - Built Isaac Sim (`$ISAAC_SIM_DIR` or `_build/linux-x86_64/release`). - NVIDIA GPU with a current driver (`nvidia-smi`). - Shell env contract from `isaac-sim-orchestrator`: `$ISAAC_SIM_DIR`, `$ISAAC_LAB_DIR`, `$WORKSPACE_DIR`. ## Limitations - Levels 1–2 cannot prove runtime correctness for every workload. - Level 3 executes untrusted script content only after `--confirm-execute`; there is no container/firejail isolation. - Thresholds target common demo/SDG failures, not all product features. ## Troubleshooting | Error / symptom | Cause | Solution | |---|---|---| | Extension or import not found | Wrong `$ISAAC_SIM_DIR` or stale build | Point env vars at `_build/linux-x86_64/release` or rebuild | | Black or empty frames | Missing lights or non-RTX render mode | Add dome/key light; confirm RTX / PathTracing settings | | Hang on stage load or first render | MDL compile or oversized stage | Follow isolation steps in `isaac-sim-troubleshooting` | Final gate before delivery. Reject outputs that fail the checks below; do not soften results. ## Available Scripts | Script | Purpose | Arguments | |---|---|---| | `scripts/validate_sim.sh` | Validate sim | positional args per script header (see script) | ## Running scripts From agent runtimes that expose skill execution helpers, invoke helpers with `run_script()`: ```python run_script("scripts/validate_sim.sh", args=[]) ``` From a built Isaac Sim tree, run the same file with `./python.sh` (Linux) or `python.bat` (Windows) from `_build/*/release`, or execute shell helpers directly when they do not require the simulator. ## Universal checklist (apply to every output) | Check | Pass | On fail | |---|---|---| | Script path | exists, readable | reject: `Script path invalid: <path>` | | File size | > 1 KB | reject: `Script empty or corrupted` | | `isaacsim` import | uses `isaacsim.*`, not `omni.isaac.core` | reject: `Use isaacsim.* namespace; omni.isaac.core is deprecated` | | `SimulationApp` config | explicit `width` and `height` | reject: `SimulationApp without window args causes swapchain-capture size mismatch` | | Lights present | `DomeLight` (intensity >= 100) **and** `DistantLight` (>= 500) | reject: `No lighting; render will be black` | | Render mode | `RayTracedLighting` for iteration; `PathTracing` only for hero shots | reject: `PathTracing too slow for iteration; use RayTracedLighting` | | ACES tonemap | carb `rtx.post.tonemap.op` = 4; `filmIso` 200 default / 600 deep-aisle / 400 aerial | suggest: `Enable ACES (op=4) for contrast` | | Final render | >= 150 KB and mean_RGB > 30 | reject: `Render is black or low-energy; check lighting` | | User paths | no `/home/<user>/`, hardcoded `C:\path\to\...`, or per-agent home paths; prefer `%USERPROFILE%`, env vars, or argparse | reject: `Hardcoded user path; use $ISAAC_SIM_DIR, $ISAAC_LAB_DIR, $WORKSPACE_DIR, or argparse` | | Network endpoints | no bare IPs (`192.168.x.x`, `10.x.x.x`) or non-localhost hosts | reject: `Hardcoded endpoint; parameterize via env var or config` | | Output dir | configurable (env var, CLI, or function param) | reject: `Output dir hardcoded; accept as parameter or read $OUTPUT_DIR` | | VRAM headroom | `nvidia-smi` headroom > 20% after settle | warn at >90% utilization; likely leak or scale issue | | `pkill -f "kit/kit"` used | flag for kill+relaunch bug | warn: `Verify zero kit processes before next launch` | | Sim duration | >= 3 s of physics | reject: `Sim ran < 3 s; physics has not settled` | ## File structure validation (USD scenes) | Item | Valid | Invalid | Action | |---|---|---|---| | `$ISAAC_LAB_DIR/scripts/` | read-only reference | writing outputs there | redirect to `$OUTPUT_DIR` or `$WORKSPACE_DIR/outputs/` | | `get_assets_root_path() -> s3://...` | runtime OK | baked into delivered output | cache locally; reference via configurable path | | `Melting` / `Splat` MDL-only shaders | OK in raw form | MDL-only at export | filter out; MDL-only causes black render | | `MakeInstanceable` for RL | required (`make_instanceable: true`) | absent | reject | | `usdPreviewSurface` on surfaces | required | absent | reject; suggest adding `UsdPreviewSurface` | | `convex_decompose_mesh` | `false` (with `clean_sdf_dc`) | `true` | recommend `false` for stability | | `mpu=0.01` | OK for warehouse shell (13 m tiles) | on a robot | reject | ## Render validation (frame analysis) | Metric | Good | Bad | Action | |---|---|---|---| | File size | 1–4 MB | ~82 KB | 82 KB = black, reject | | Mean RGB | 80–160 | < 20 | reject: `Too dark; add lights` | | Max RGB | 200–250 | 0 | reject: `No light in scene` | | Pixel variance | > 15 | < 5 | flat = missing shadows; add accents | | Color histogram | multi-modal | single peak | overexposed or flat lighting; adjust intensity | | Object visibility | >= 3 robots or 50+ assets | < 10 visible | suggest: `Scene too sparse; add set dressing` | | Shadow consistency | consistent shadows | random black blobs | reject: `Shadow artifacts; check light cone bounds` | ## Video validation For any delivered MP4/GIF, extract and inspect at least start/middle/end frames. Reject or recut the presentation copy if the first frames show render warm-up, the subject is occluded, or the camera loses the task. Keep the complete source render and metrics when a shorter presentation cut is made. ## RL training validation | Issue | Action | |---|---| | `AppLauncher` not first | reject: `AppLauncher must precede any isaaclab imports` | | Task `__init__.py` non-empty | reject: `Task __init__.py must be empty; do not import configs` | | `omni.isaac.lab` import | reject: `Use isaaclab.*; omni.isaac.lab is deprecated` | | PhysX backend (when Newton applies) | reject: `Use Newton; it is the default on Kit 110` | | Missing `PYTHONUNBUFFERED=1` | warn: `Set PYTHONUNBUFFERED=1 to see logs in real time` | | No GPU memory logging | suggest: `Log torch.cuda.memory_allocated()/1e6 to W&B` | | Batch size exceeds VRAM | suggest: `Reduce num_envs (try 2048)` | | Wrong checkpoint name | reject: `Must be model_XXXX.zip, not policy.pt` | | Single seed | suggest: `Run seeds 42, 123, 456 for valid comparison` | ## Asset & shell validation | Input | Check | Action | |---|---|---| | `docker run` command | `-v` mount for `/workspace/output` | reject: `Output folder not mounted` | | Sub-agent spawn | `workdir=$WORKSPACE_DIR` | reject: `Sub-agent workdir hardcoded; use $WORKSPACE_DIR` | | Blender USD export | correct mpu, dual-shader (UsdPreviewSurface + MDL), correct export type | reject if any missing | | Scene complexity | renders within 10 settle steps | reject: `Scene too complex; simplify assets` | | Ghost artifacts | cleanup of `/dev/shm/carb-*` | reject: `Use workspace_cleanup.py to clear /dev/shm/carb-*` | ## Decision tree ```mermaid graph TD A[Received Output] --> B{Has script?} B -->|No| C[Reject: "No script provided"] B -->|Yes| D{File size >1KB?} D -->|No| E[Reject: "Script empty or corrupted"] D -->|Yes| F{Python?} F -->|Yes| G{isaacsim.* imports?} G -->|No| H[Reject: "Use isaacsim.* not omni.isaac.core"] G -->|Yes| I{SimulationApp or --exec?} I -->|Neither| J[Reject: "Must use SimulationApp with window args OR isaac-sim.sh --exec"] I -->|SimulationApp| K{width and height set?} K -->|No| L[Reject: "SimulationApp requires explicit width and height"] K -->|Yes| M{Dome + Distant lights?} M -->|No| N[Reject: "Add DomeLight and DistantLight (min intensity 100 and 500)"] M -->|Yes| O{RayTracedLighting?} O -->|No| P[Reject: "Use RayTracedLighting for iteration"] O -->|Yes| Q{Render output exists?} Q -->|No| R[Reject: "No render output"] Q -->|Yes| S{>= 150 KB and mean_RGB > 30?} S -->|No| T[Reject: "Render is black, too dark, or corrupted"] S -->|Yes| U{Hardcoded user paths or bare IPs?} U -->|Yes| V[Reject: "Replace hardcoded user paths/IPs with env vars or args"] U -->|No| Y[VALID - deliver] ``` ## Training output | Item | Action | |---|---| | `policy_only_XXXX.pt` | accept | | `model_XXXX.zip` | accept | | `log.csv` or `wandb` URL | accept | | `results.json` with episode data | accept | | No reward curve / metrics | reject: `Log episode/reward_mean and train/value_loss` | ## Reply format - Pass: `Valid: <one-line summary>` - Fail: `Invalid: <list of failed checks>` - Suggest (only when otherwise valid): `Could be improved: <tip>` Do not hedge ("I think", "maybe"). Do not deliver a black frame. ## Input sources - `isaac-sim-orchestrator`, `isaac-sim-rendering`, other producer skills, and sub-agent outputs. - Invoked on Isaac Sim deliverables: "validate this Isaac Sim script", "check this Isaac Sim render", "review this sim output". ## Automated validation Run the checks above from the CLI with [`scripts/validate_sim.sh`](scripts/validate_sim.sh): ```bash # Levels 1–2: static only bash scripts/validate_sim.sh --level <1|2> <script.py> [--output-dir <dir>] [--timeout <seconds>] # Level 3: EXECUTES the script — requires explicit opt-in bash scripts/validate_sim.sh --level 3 --confirm-execute <script.py> [--output-dir <dir>] [--timeout <seconds>] # or: CONFIRM_EXECUTE=1 bash scripts/validate_sim.sh --level 3 <script.py> ... ``` ## Feedback loop - Rejections feed back into the producing skill's failure-mode catalog. - Recurring failures become new validator rules. - Standing rubric: [`references/quality-criteria.md`](references/quality-criteria.md). Record each iteration in [`references/feedback-log.md`](references/feedback-log.md).
GitHub에서 보기