Skip to main content

object-bin-packing

Pack boxes/parcels into a bin, pallet, or container and render SDG with IRO's bin_pack harmonizer. Use for warehouse/logistics packing synthetic data.

소스 정보

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

설치 방법

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

소스 파일 검토

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

파일 탐색기
3 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
object-bin-packing
description
Pack boxes/parcels into a bin, pallet, or container and render SDG with IRO's bin_pack harmonizer. Use for warehouse/logistics packing synthetic data.
license
Apache-2.0
metadata
{"author":"NVIDIA Isaac Sim <isaac-sim@nvidia.com>"}
# Object Bin Packing (IRO `bin_pack` harmonizer) ## Purpose Procedurally **pack many 3D objects into a cuboid bin** (bin / pallet / container / carton) and render synthetic data (RGB, 2D/3D boxes, segmentation) — a focused specialization of `object-simulation-sdg` built on IRO's `bin_pack` **harmonizer** (`isaacsim.replicator.object`). Placement is **gravity-stable**: boxes are placed bottom-up and only where they rest on the bin floor or are supported from below, so no box floats in mid-air. **Read `object-simulation-sdg` first** (the description-file schema, run modes, output layout) and `action-and-event-data-generation` for the launcher and env contract. This skill covers only the bin-packing specialization on top of them. ## Limitations - Requires `isaacsim.replicator.object` (IRO); packing runs inside a live Isaac Sim, not offline. - `bin_pack` places objects gravity-stable inside a container; it does not simulate the packing motion, so it produces end-state layouts rather than a manipulation trajectory. - Layouts vary run to run unless the config pins a seed. - Only the `scripts/bin_pack_config.py` generator is offline-validated here; a live headless IRO render depends on the box set produced by `demo_bin_pack`. ## When to use (vs siblings) - **Use this** to densely pack/stack static objects into a bin by their bounding boxes — warehouse parcels, palletized cartons, shipping totes. - For general randomized *scatter* placement (not packed), a table drop, or non-box geometry, use `object-simulation-sdg` directly. - For *moving* people/robots use `actor-simulation-sdg`; for rare events (topple/spill) use `event-generation`. ## Prerequisites - Installed Isaac Sim with the Action and Event Data Generation app (`$ISAAC_SIM_DIR`), including `isaacsim.replicator.object.core`. Gravity-stable packing and `fill_ratio` are assumed; both are present in the build this app pins. - NVIDIA GPU + current driver for an actual render (the offline generator needs neither). - Env contract from `isaac-sim-orchestrator`: `$ISAAC_SIM_DIR`, `$WORKSPACE_DIR`, `$AEDG_OUTPUT`. ## Available scripts | Script | Purpose | Arguments | |---|---|---| | `scripts/bin_pack_config.py` | Generate a self-contained IRO bin-pack description (offline); optionally `--validate` it | CLI flags via argparse (`--help`) | The generator packs **SimReady cardboard boxes streamed from the content server** — no local assets, no `PATH_TO_BOXES`. It derives the config `version` from your build with `--from-ext` so it stays in sync, defines the content-server macro chain inline (self-contained for a headless run), and writes a camera + dome light + output switches so the config renders as-is. ```bash # generate a runnable config (version matched to your build) python3 scripts/bin_pack_config.py --from-ext "$ISAAC_SIM_DIR" \ --output-path "$AEDG_OUTPUT/iro_bin_pack" > scene_bin_pack.yaml # partially loaded bin (~60% of bin volume), bigger bin, scale the box counts python3 scripts/bin_pack_config.py --from-ext "$ISAAC_SIM_DIR" --output-path "$AEDG_OUTPUT/iro_bin_pack" \ --bin-size 500 250 250 --fill-ratio 0.6 --scale-counts 1.5 > scene_bin_pack.yaml # offline gate: confirm the config is runnable on IRO (no launch) — prints OK / problems python3 scripts/bin_pack_config.py --from-ext "$ISAAC_SIM_DIR" \ --output-path "$AEDG_OUTPUT/iro_bin_pack" --validate ``` From agent runtimes with skill-execution helpers: `run_script("scripts/bin_pack_config.py", args=["--help"])`. ## The `bin_pack` harmonizer A **harmonizer** correlates how multiple mutables randomize together. `bin_pack` packs every geometry group that references it into one cuboid, by each object's axis-aligned bounding box: ```yaml isaacsim.replicator.object: version: EXT_VERSION # from the installed extension; derive with --from-ext # ... settings, camera, light ... bin_pack_H: harmonizer_type: bin_pack bin_size: [400, 200, 200] # cuboid dimensions fill_ratio: 0.6 # optional (0, 1]: cap packed volume at this fraction of the bin boxes: count: 16 type: geometry subtype: mesh tracked: true # only tracked mutables appear in labels/segmentation/3D boxes transform_operators: - transform: # <-- placement comes from the harmonizer distribution_type: harmonized harmonizer_name: bin_pack_H pitch: local_aabb - scale: distribution_type: range start: [1.2, 1.2, 1.2] end: [1.25, 1.25, 1.25] usd_path: $[/cardboard_boxes_root]/White_A/WhiteCorrugatedBox_A08_30x30x30cm_PR_NVD_01.usd ``` Key behaviors: - **Gravity-stable placement** — deepest-bottom-left-fill with a base-support + center-of-mass constraint; boxes rest on the floor or on boxes below them and never float. - **`fill_ratio`** (optional, `(0, 1]`) — cap the total packed box volume at this fraction of the bin, for partially loaded bins. Invalid values are rejected at load. - **Layout diversity** — placement is seeded, so it is reproducible per `seed` but varies frame to frame; different `seed`s give different packings. - **Overflow** — objects that do not fit are moved out of view (they still exist in the stage). - **Size variety comes from choosing differently sized assets**, not per-axis scale hacks; the generator curates a brown/white box set spanning ~15 cm flats to ~77 cm cubes. ## Run (headless) ```bash cd "$ISAAC_SIM_DIR" ./isaac-sim.sh --no-window --allow-root \ --enable isaacsim.replicator.object.core \ --/log/level=warn --/windowless=True \ --/config/file="$PWD/scene_bin_pack.yaml" ``` Or in the **Object SDG** panel (enable `isaacsim.replicator.object.core` + `.ui`): pick `demo_bin_pack` from the dropdown below **Simulate** (it needs no local assets) and click **Simulate**. Extension log lines are tagged `[METROPERF][isaacsim.replicator.object.core:<version>]`. ## Verify it worked IRO writes one folder per enabled output switch under `output_path` (NOT per-camera): ```bash for d in images labels segmentation; do n=$(ls "$AEDG_OUTPUT/iro_bin_pack/$d" 2>/dev/null | wc -l); echo "$d: $n files" done ``` A non-empty `images/` with boxes packed into the bin (and, on inspection, no magenta/black boxes and no floating boxes) means it worked. An empty `images/` means the run captured nothing — check `tracked: true` on the groups and that the `version` matches your build. ## Integration points - **Consumes:** SimReady cardboard boxes from the content server (`$[/cardboard_boxes_root]/...`); or your own `usd_path` box USDs. - **Produces:** RGB + 2D/3D boxes + segmentation under `output_path`; can also emit captions in-run via `caption_writer: CombinedIROSceneGraphWriter` (see `vlm-scene-captioning`). - **Parent:** `object-simulation-sdg` (schema, run modes) → `action-and-event-data-generation`. ## Troubleshooting - **Boxes float in mid-air** — the packer fell back to intersection-only checks, which means the resolved `isaacsim.replicator.object.core` predates gravity-stable packing. Run the app whose `.kit` pins the extension rather than an ad-hoc `--enable`. - **Magenta or near-black boxes** — a White_A/Flat_A box asset attaches materials via a payload and was instanced through the scene_instance cache. The pinned build auto-disables instancing for such assets; if you still hit it, set `is_instance: false` on that box group. - **Bin looks sparse** — the object footprints are large relative to `bin_size`; either enlarge `--bin-size`, raise `--scale-counts`, or add smaller box assets (unfittable boxes are teleported out of view, so raising counts alone does not densify). - **Layout not preserved after physics** — `physics: rigidbody` makes boxes fall/reorder, discarding the bin-pack layout; omit physics to keep the packed arrangement. - **`PATH_TO_BOXES` errors** — the shipped `demo_bin_pack.yaml` and this generator need no local assets; other demos (`demo_bins_of_bins*`, `demo_table`) still require `PATH_TO_BOXES`. - **`version` mismatch** — set `version` to the installed `isaacsim.replicator.object.core` (use `--from-ext "$ISAAC_SIM_DIR"`); shipped samples can lag.
GitHub에서 보기