Skip to content

Develop#622

Merged
alexmillane merged 16 commits intomainfrom
develop
Apr 21, 2026
Merged

Develop#622
alexmillane merged 16 commits intomainfrom
develop

Conversation

@alexmillane
Copy link
Copy Markdown
Collaborator

Summary

Merge develop into main.

Detailed description

  • Release v0.2.0 was branched, moving development back to main.

zhx06 and others added 14 commits April 9, 2026 17:12
## Summary
Add batched multi-env placement to relation solver (`1 -> num_envs`)

## Detailed description

### Solver
- `RelationSolverState` positions stored as `(num_envs, num_optimizable,
3)`; `get_position()` returns `(num_envs, 3)`
- `RelationSolver._compute_total_loss()` accumulates `(num_envs,)` loss
per env, returns mean of losses; per-env loss exposed via
`last_loss_per_env`
- All loss strategies (`On`, `NextTo`, `NoCollision`, `AtPosition`)
updated to accept `(num_envs, 3)` with `(3,)` backward compat

### ObjectPlacer
- `place()` accepts `num_envs` and `result_per_env`; returns
`MultiEnvPlacementResult` (one `PlacementResult` per env) or a single
`PlacementResult`
- Pool-based placement: generates `max_placement_attempts * num_results`
candidates in one batched solver call, sorts by (valid-first,
lowest-loss), and selects the best `num_results`
- `result_per_env=False` solves a single layout applied to all
environments
- `_validate_placement` skips `On`-related pairs in overlap check (fix
for false-positive collisions)
- `mean_loss` calculation filters out non-finite values

### Unified Placement Path
- New `PosePerEnv` dataclass holds a list of `Pose` objects, one per
environment
- `ObjectBase._init_event_cfg` handles `PosePerEnv` via
`set_object_pose_per_env`, so each object registers its own reset event
for both single-env and multi-env cases
- Removed `placement_events.py` — its functionality is now handled by
object-level event registration
- `ArenaEnvBuilder._solve_relations()` simplified: no longer builds a
separate placement event cfg or distinguishes single/multi-env code
paths

### Example Update
- Update default objects in
`gr1_table_multi_object_no_collision_environment`, add TODO for
potential object collision issues after running the solver
## Summary
Generalize and simplify our loco-manipulation task.

## Detailed description
- Remove G1, galileo, and object specific details, to change
`g1_locomanip_pick_and_place_task`, which was specific to the galileo
environment, into `locomanip_pick_and_place_task`, which is general to
any environment.
- Required expanding our contact sensor creation to support contact
_against_ objects with rigid bodies not at their root.
- `LocomanipPickAndPlaceTask` is now a shallow extention of
`PickAndPlaceTask`. It inherits all its functionality from the
pick-and-place task, except for the mimic config, which is special for 2
hands + navigation.
## Summary
Address the comments left in [Batch Suport for Relation Solver
](#512)

## Detailed description
- Remove "(useful for deterministic evaluation)" 
- Convert NOTE to TODO(zhx06)
- Fix quaternion order according to Lab 3.0
## Summary

Brings `develop` up to date with `main`.

---------

Signed-off-by: Clemens Volk <cvolk@nvidia.com>
Signed-off-by: Lionel Gulich <lgulich@nvidia.com>
Co-authored-by: Vikram Ramasamy <158473438+viiik-inside@users.noreply.github.com>
Co-authored-by: qianlin <53278415+qianl-nv@users.noreply.github.com>
Co-authored-by: Xinjie Yao <xyao@nvidia.com>
Co-authored-by: Alex Millane <amillane@nvidia.com>
Co-authored-by: lgulich <22480644+lgulich@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: isaaclab-review-bot[bot] <270793704+isaaclab-review-bot[bot]@users.noreply.github.com>
## Summary
Refactors how we handle spawner objects, to separate their specification
from object type

## Detailed description
- Addresses #592 
- Separate `ObjectType` and `SPAWNER`

---------

Co-authored-by: Xinjie Yao <xyao@nvidia.com>
## Summary
Add listing of the number of CPUs to the CI workflow.

## Detailed description
- Further introspection of which machine we're running on.

Co-authored-by: Xinjie Yao <xyao@nvidia.com>
Supersedes #573 (rebased onto `develop` due to batch solver divergence).

## Motivation

No-overlap between objects was managed via explicit `NoCollision`
relations that `ArenaEnvBuilder` auto-injected. This was an
implementation detail leaking into the user API, and the solver had no
built-in collision avoidance.

## Summary
- No-overlap is now a built-in behavior of `RelationSolver`, controlled
by a single `clearance_m` parameter on `RelationSolverParams` (default
1cm).
- The solver computes pairwise no-overlap loss for all object pairs
automatically (except anchor-anchor).
- `NoCollision` class removed from the public API.
- `ArenaEnvBuilder._add_pairwise_no_collision()` workaround removed.
- `ObjectPlacerParams.min_separation_m` removed; validation unified to
use `clearance_m`.
- Stale docs and comments updated.

## Test plan
- [ ] All 62 relation/placer tests pass
- [x] Pre-commit checks pass

---------

Signed-off-by: Clemens Volk <cvolk@nvidia.com>
Signed-off-by: Lionel Gulich <lgulich@nvidia.com>
Co-authored-by: Vikram Ramasamy <158473438+viiik-inside@users.noreply.github.com>
Co-authored-by: qianlin <53278415+qianl-nv@users.noreply.github.com>
Co-authored-by: Xinjie Yao <xyao@nvidia.com>
Co-authored-by: Alex Millane <amillane@nvidia.com>
Co-authored-by: lgulich <22480644+lgulich@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: isaaclab-review-bot[bot] <270793704+isaaclab-review-bot[bot]@users.noreply.github.com>
## Summary
Update `AGENTS.md` to add the full test suite command.

## Detailed description
- You can now ask your agent to run the full test suite, if that's
something you want.

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
Co-authored-by: Xinjie Yao <xyao@nvidia.com>
## Summary
Move's our environment registration from a static map to the registry
pattern that we use for assets etc.

## Detailed description
- Using a static map meant that a user registering a new environment
would have to add their environment by-hand to a static map.
- Now registration is automatic when a class subclassing
`ExampleEnvironment` is added to the folder in
`issaclab_arena_environments`
## Summary
Rename `asset_registry.py` -> `registries.py` to better reflect the fact
that we now have many registries.

## Detailed description
- Follows a review comment in #598
## Summary
Isolate subprocess tests in their own job in CI.

## Detailed description
- The subprocess-requiring tests are currently extremely unreliable and
frequently hang causing the whole job to fail.
- This change isolates them into their own job, which I will make
optional for merging.
## Summary
Experimenting with caching shaders in CI to save on long compilation
times.

## Detailed description
- Keyed on Isaac Sim version-only, hopefully this is specific enough.
Will monitor
- Results for running a single camera-requiring test:
- No cache: 13 minutes
([here](https://github.com/isaac-sim/IsaacLab-Arena/actions/runs/24667595106/job/72129213471#step:15:1))
- With shaders cached: 1minute 47seconds
([here](https://github.com/isaac-sim/IsaacLab-Arena/actions/runs/24667595106/job/72133812562#step:15:1))
## Summary
Calling the isaac sim warmup script appears to stall things. Removing.
## Summary
Merge main into develop

---------

Signed-off-by: Clemens Volk <cvolk@nvidia.com>
Signed-off-by: Lionel Gulich <lgulich@nvidia.com>
Co-authored-by: Vikram Ramasamy <158473438+viiik-inside@users.noreply.github.com>
Co-authored-by: qianlin <53278415+qianl-nv@users.noreply.github.com>
Co-authored-by: Xinjie Yao <xyao@nvidia.com>
Co-authored-by: Clemens Volk <cvolk@nvidia.com>
Co-authored-by: lgulich <22480644+lgulich@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: isaaclab-review-bot[bot] <270793704+isaaclab-review-bot[bot]@users.noreply.github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
@alexmillane alexmillane changed the base branch from release/0.1.1 to main April 21, 2026 08:43
zhx06 and others added 2 commits April 21, 2026 11:39
## Summary
Pool-based object placement with fresh layouts on environment reset

## Detailed description
What changed:
- Added `PlacementPool` that pre-solves valid layouts at build time and
serves them on reset via `placement_events.py`.
- Rewritten `ArenaEnvBuilder._solve_relations()` to use the pool, with
`--resolve_on_reset` / `--no-resolve_on_reset` controlling behavior.
- Added `--episode_length_s` to `gr1_table_multi_object_no_collision`
for periodic resets.

## Impact
- Fresh collision-free layouts on every reset, different across envs and
episodes.
- Solver runs once at build time (batched), not per-reset.

---------

Co-authored-by: alex <amillane@nvidia.com>
@alexmillane alexmillane merged commit 32b9c6f into main Apr 21, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants