Improve Franka Lift resets and continuous Reach tracking - #8171
Conversation
|
run-ci |
|
There was a problem hiding this comment.
Isaac Lab Review Bot
Migrates Franka rigid and deformable Lift to the flat asset, adds a variant-aware reset_to_grasp pre-grasp reset, gripper-only collider presets, and success-driven motion-penalty curricula. The unresolved problems all stem from FrankaMixinCfg/FrankaSceneCfg still being shared with the registered Isaac-Reorient-Franka task, plus the undeprecated rename of a public reward config.
- Design and architecture: The chosen split between a variant-indexed event class (
reset_to_grasp, which caches the clone-plan prototype mapping at construction) and the statelessdifficulty_interpolate_floathelper matches the existing term structure in this package. The remaining architectural problem is placement: the Lift-onlyaction_rate/joint_velreward terms are installed onFrankaMixinCfg.rewards, whichFrankaReorientEnvCfgalso composes, while the matching annealing curriculum is declared only onFrankaLiftEnvCfg. Those terms belong on the Lift environment so the shared mixin keeps owning only what both tasks need. - API: Checked the new public symbols
reset_to_graspanddifficulty_interpolate_float: both are listed inmdp/__init__.pyi__all__and imported from their owning submodules, and thereset_to_graspdocstring documents units, frames, and quaternion ordering. The newarm_collisionspreset key and thePhysics/Collidersvariant dicts resolve through the existingpreset()mechanism, but the generated environment-browser table only listsarm_collisionsfor the Lift task even though the preset is declared on the sharedFrankaSceneCfgthatIsaac-Reorient-Frankaalso uses. - Compatibility and deprecation: Breaking changes: the public module-level
FrankaReorientRewardCfgconfig class is renamed toFrankaLiftRewardCfgwith no deprecated alias, targeted warning, or removal guidance, so existing imports and subclasses break immediately; andIsaac-Reorient-Frankasilently acquires the new constantaction_rate/joint_velpenalties through the sharedFrankaMixinCfgwhile the changelog documents the change as Lift-only. The Franka Lift reset-distribution change itself is documented in the.majorchangelog fragment with explicit checkpoint requalification guidance. - Implementation: Traced the clone-plan prototype to environment-id mapping and its duplicate/missing-variant guards, the quaternion composition and per-variant gripper joint writes in
reset_to_grasp, the joint-id scoping added toabnormal_robot_state, the non-finite guard added toout_of_bound, and thecollisionEnabledfilter incollect_collision_meshes. Two issues remain: the reward-term leak into Reorient described above, andreset_to_grasp.__call__maskingenv_idsdirectly where the siblingreset_to_targetcalled from the sameconditional_resetwrapper first normalizes throughenv.scene._ALL_INDICES, leaving the two reset terms with different accepted selector types. - Style consistency: Checked stub exports, changelog fragment placement and category, docstring sections, comment intent, and preset wiring against adjacent code in the same modules. Two documentation-consistency gaps remain: the auto-generated environment-browser row for
Isaac-Reorient-Frankawas not regenerated alongside the shared-scene preset addition, and thecollect_collision_meshesdocstring still describes unqualified collision-mesh collection after the predicate began excluding prims with collisions disabled. - Test quality: Audited the changes to
source/isaaclab_tasks/test/core/test_lift_env_cfg.py. The added pre-grasp variant-mapping, joint-scopedabnormal_robot_state, disabled-collider, and ADR-interpolation tests each own a distinct contract introduced by this PR and would fail on the pre-change code; the collider-variant and PhysX-runtime-parity tests exercise the new preset wiring without duplicating the existing preset or rendering test files in the inventory. The newtest_kuka_allegro_lift_family_keeps_its_existing_reward_contractguard asserts that the Franka motion penalties stay out of the Kuka family, but no equivalent guard coversFrankaReorientEnvCfg, which is exactly where the terms currently leak.
Significant concerns. Posted 5 actionable findings inline.
Automated review; human maintainers own approval decisions.
AntoineRichard
left a comment
There was a problem hiding this comment.
Took a quick look some things should be updated. A broader consideration around the way the franka assets are defined could be good too.
|
run-ci |
|
run-ci |
## Description Migrate maintained Franka tasks, contributed configs, benchmarks, and controller examples to the shared `FRANKA_PANDA_CFG`. Standard tasks use full primitive arm/gripper collisions with explicit `Physics=physx` or `Physics=mujoco` payloads. Add `FRANKA_MINIMAL_CFG` and expose its gripper-only collision scope through `preset()` in the existing Franka Reach and rigid Lift configs. Select it with `presets=minimal`, including Reach OSC, while retaining task-local controller and actuator tuning. Backend selection stays independent of collision scope. No additional task ID or environment-page section is added. Preserve task-local actuator tuning, correct absolute Reach action mapping and OSC actuator handling, and support differential-IK action offsets in the zero agent. Reset clearance ignores disabled colliders, and cuRobo excludes robot geometry from world obstacles even with custom ignore lists. Legacy compatibility configs remain available; maintained tasks no longer use them. Lift reset/curriculum and continuous Reach tracking improvements are isolated in dependent #8171. No USD packages, checkpoints, or new dependencies are added to this source PR. **Breaking:** migrated tasks change robot dynamics and collision scope. Existing checkpoints require requalification; use explicit legacy configs where the old contract is needed. ## Validation At `25ad1ecfc`, based on current `develop` (`ae5d4e397`): - 72 focused tests passed on HORDE; formatting, changelog checks, and warning-free documentation build passed. - 28 rollouts used fresh, SHA-256-verified public-S3 checkpoints, with no checkpoint lookup cache and zero non-finite actions. - Reach/OSC, Drawer, and non-camera Soft/Cloth/Cable exceeded 90% task-level success. - Rigid Lift is not fully qualified by this asset-only change: Newton averaged 55.2% across seeds 40–42. The obsolete Newton IK-Rel artifact also remains unqualified. CI fixes at `90960d451`: excluded the robot from cuRobo world obstacles, and prevented randomized RL resets during static cable golden capture. The frontend checks, all six cuRobo tests, Isaac Sim RTX and active legacy kitless cable goldens passed; existing goldens and thresholds were unchanged. Formatting, changelog checks, and the warning-free docs build passed. Full CI is being rerun. The controlled speed comparison remains pending; no performance multiplier or complete checkpoint qualification is claimed. The separate ovstage-only cable renderer check also fails on unmodified `develop`; it is post-merge-only and is not part of the PR CI gate. ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` Merged latest upstream `develop` (`7c05e96ca`). Audited every test added or changed by this PR and removed 14 redundant cases: broad asset inventories, repeated preset combinations, comparisons of copied defaults, and a synthetic USD-variant test. Kept regression coverage for action normalization and offsets, zero-agent holds, disabled collider filtering, OSC solver limits, backend payloads surviving IK overrides, and deterministic cable golden capture. Latest local validation: 128 focused tests passed across the six affected suites. Nine temporary production mutations failed on the intended retained assertions; production files were restored. Formatting and changelog checks passed. Earlier validation included minimal Reach, Reach OSC, and Lift random-agent rollouts and a clean warning-free documentation build. The final test pruning does not affect rendered docs. --------- Co-authored-by: Mustafa Haiderbhai <mhaiderbhai@nvidia.com>
## Description Migrate maintained Franka tasks, contributed configs, benchmarks, and controller examples to the shared `FRANKA_PANDA_CFG`. Standard tasks use full primitive arm/gripper collisions with explicit `Physics=physx` or `Physics=mujoco` payloads. Add `FRANKA_MINIMAL_CFG` and expose its gripper-only collision scope through `preset()` in the existing Franka Reach and rigid Lift configs. Select it with `presets=minimal`, including Reach OSC, while retaining task-local controller and actuator tuning. Backend selection stays independent of collision scope. No additional task ID or environment-page section is added. Preserve task-local actuator tuning, correct absolute Reach action mapping and OSC actuator handling, and support differential-IK action offsets in the zero agent. Reset clearance ignores disabled colliders, and cuRobo excludes robot geometry from world obstacles even with custom ignore lists. Legacy compatibility configs remain available; maintained tasks no longer use them. Lift reset/curriculum and continuous Reach tracking improvements are isolated in dependent #8171. No USD packages, checkpoints, or new dependencies are added to this source PR. **Breaking:** migrated tasks change robot dynamics and collision scope. Existing checkpoints require requalification; use explicit legacy configs where the old contract is needed. ## Validation At `25ad1ecfc`, based on current `develop` (`ae5d4e397`): - 72 focused tests passed on HORDE; formatting, changelog checks, and warning-free documentation build passed. - 28 rollouts used fresh, SHA-256-verified public-S3 checkpoints, with no checkpoint lookup cache and zero non-finite actions. - Reach/OSC, Drawer, and non-camera Soft/Cloth/Cable exceeded 90% task-level success. - Rigid Lift is not fully qualified by this asset-only change: Newton averaged 55.2% across seeds 40–42. The obsolete Newton IK-Rel artifact also remains unqualified. CI fixes at `90960d451`: excluded the robot from cuRobo world obstacles, and prevented randomized RL resets during static cable golden capture. The frontend checks, all six cuRobo tests, Isaac Sim RTX and active legacy kitless cable goldens passed; existing goldens and thresholds were unchanged. Formatting, changelog checks, and the warning-free docs build passed. Full CI is being rerun. The controlled speed comparison remains pending; no performance multiplier or complete checkpoint qualification is claimed. The separate ovstage-only cable renderer check also fails on unmodified `develop`; it is post-merge-only and is not part of the PR CI gate. ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` Merged latest upstream `develop` (`7c05e96ca`). Audited every test added or changed by this PR and removed 14 redundant cases: broad asset inventories, repeated preset combinations, comparisons of copied defaults, and a synthetic USD-variant test. Kept regression coverage for action normalization and offsets, zero-agent holds, disabled collider filtering, OSC solver limits, backend payloads surviving IK overrides, and deterministic cable golden capture. Latest local validation: 128 focused tests passed across the six affected suites. Nine temporary production mutations failed on the intended retained assertions; production files were restored. Formatting and changelog checks passed. Earlier validation included minimal Reach, Reach OSC, and Lift random-agent rollouts and a clean warning-free documentation build. The final test pruning does not affect rendered docs. --------- Co-authored-by: Mustafa Haiderbhai <mhaiderbhai@nvidia.com> (cherry picked from commit b7c0225)
|
run-ci |
|
run-ci |
|
Backported to |
## Description Improve Franka rigid Lift resets and motion regularization: - Associate each of the eight cloned object geometries with its matching finger opening and hand-frame orientation, independent of prototype order. - Apply aligned pre-grasps after the generic finger-width reset, cache static reset data, and bound reset-bank prefill. - Scale Franka motion penalties with success-driven ADR, avoid terminating nominal arm-velocity excursions, and terminate non-finite rigid-object states. Restore continuous Franka Reach tracking without an early-success termination or terminal success reward. Kuka reward/curriculum configs remain unchanged. Asset, backend, actuator, Drawer, and deformable migrations belong to #8170. Updated against `develop` at `b7c022547` after #8170 merged. Minimal Reach, Reach-OSC, and Lift use `presets=minimal`; there is no separate minimal task config. The diff against `develop` contains only the 11 task behavior, test, and release-note files. **Behavior change:** training and play use a mixed table/pregrasp reset bank. Aligned pre-grasps have a 0.75 proposal probability before rejection and bank sampling; these scores are not table-only pickup success. For a separate table-only bank, set `env.events.conditional_reset.params.terms.reset_object_to_target.params.probability=0` before initialization. ## Validation At `00387a373`, 60 focused Reach/Lift/preset tests and formatting/changelog checks passed against current `develop`. Minimal Reach (2 environments) and Lift (8 environments, reset bank reduced to two states per group) each completed 10 random-agent steps with Newton MJWarp; the Lift reset bank filled successfully. These are smoke checks, not checkpoint requalification. At `325bdd34e`: 79 focused tests, formatting/changelog checks, and a warning-free documentation build passed. All 28 fresh-public-S3 checkpoint rollouts completed with zero non-finite actions. Rigid Lift mean success: Isaac Sim PhysX 94.7%, Newton 83.5% (seeds 40–42), and OvPhysX 91.5% (seed 42). The same checkpoints are used in #8170 and #8171; different reset distributions make this an MDP comparison, not evidence of new policy training. At `4f0c7ce8d`, the verified CI fixes from #8170 are included; 67 focused Lift/Reach/action tests and formatting/changelog checks passed. Active Isaac Sim and legacy kitless cable golden tests now pass without modifying goldens or thresholds. Full CI is being rerun. **Remaining gates:** Newton's thin capsule scored 40.6%; OvPhysX's thin plate scored 52.9%. The old Newton IK-Rel artifact remains unqualified. Controlled speed measurements remain pending. The separate ovstage-only cable renderer check also fails on unmodified `develop`; it is post-merge-only and is not part of the PR CI gate. ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` --------- Co-authored-by: Mustafa Haiderbhai <mhaiderbhai@nvidia.com> (cherry picked from commit 34040cd)
## Description Standalone scripts can leave a live `SimulationContext` when their `launch_simulation()` scope exits. Closing Kit first can terminate the process before physics, rendering, visualizer, and stage resources are released. Release contexts created inside the launch scope before closing its runtimes. `SimulationContext.clear_instance()` now stops the simulation before releasing resources, replacing the separate stop in `build_simulation_context()`. Cleanup runs in `finally` before runtime shutdown. The existing exception handlers report body or cleanup errors and assign exit statuses; no extra catch or suppression is added. If both the body and cleanup fail, Python chains the original error behind the cleanup error. An existing caller-owned context is preserved. Motivated by the ARL demo's `Destroying busy TaskGroup!` shutdown abort in #8171: https://github.com/isaac-sim/IsaacLab/actions/runs/36968778710/job/110721645994. No sleeps, retries, or assertion suppression are added. No test files are changed; the added test scaffolding was removed in favor of existing coverage and standalone validation. The cleanup-order defect was reproduced with temporary regression checks, but the intermittent native abort has not been reproduced locally. Its native task-group owner remains unidentified. This is a draft pending validation against the failing CI image. ## Validation - Existing launcher tests: 11 passed. - Existing Kit simulation-context tests: 26 passed, with two existing material deprecation warnings. - Simplified implementation: headless ARL PhysX demo completed 10 steps and released its context before exit. The initial implementation also completed five consecutive runs. - Real Kit exit checks after simplification: ValueError, KeyboardInterrupt, and SystemExit(7) released their contexts and exited with 1, 130, and 7 respectively. A registered resource whose cleanup intentionally fails also cleared the context and exited with 1. - Formatting/lint hooks, changelog validation against the upstream base, and `git diff --check` passed. - Earlier additional visualizer validation: 36 passed, one failed because a test reaches `carb` without a loaded Kit runtime in the local setup. No visualizer code is changed. Local simulation checks used the available source-built Isaac Sim runtime, not the internal CI image digest from the original failure. ## Type of change - Bug fix ## Release backport - [ ] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Checklist - [x] I have read the contribution guidelines. - [x] I have run the pre-commit checks with `uv run isaaclab --format`. - [x] I have updated the affected API docstrings. - [x] I have validated the changed behavior with focused coverage and applied the test-audit criteria. - [x] I have added a changelog fragment for the touched package. - [x] My name already exists in `CONTRIBUTORS.md`. - [ ] CI validation against the failing Kit image is complete.
Description
Improve Franka rigid Lift resets and motion regularization:
Restore continuous Franka Reach tracking without an early-success termination or terminal success reward. Kuka reward/curriculum configs remain unchanged. Asset, backend, actuator, Drawer, and deformable migrations belong to #8170.
Updated against
developatb7c022547after #8170 merged. Minimal Reach, Reach-OSC, and Lift usepresets=minimal; there is no separate minimal task config. The diff againstdevelopcontains only the 11 task behavior, test, and release-note files.Behavior change: training and play use a mixed table/pregrasp reset bank. Aligned pre-grasps have a 0.75 proposal probability before rejection and bank sampling; these scores are not table-only pickup success. For a separate table-only bank, set
env.events.conditional_reset.params.terms.reset_object_to_target.params.probability=0before initialization.Validation
At
00387a373, 60 focused Reach/Lift/preset tests and formatting/changelog checks passed against currentdevelop. Minimal Reach (2 environments) and Lift (8 environments, reset bank reduced to two states per group) each completed 10 random-agent steps with Newton MJWarp; the Lift reset bank filled successfully. These are smoke checks, not checkpoint requalification.At
325bdd34e: 79 focused tests, formatting/changelog checks, and a warning-free documentation build passed. All 28 fresh-public-S3 checkpoint rollouts completed with zero non-finite actions.Rigid Lift mean success: Isaac Sim PhysX 94.7%, Newton 83.5% (seeds 40–42), and OvPhysX 91.5% (seed 42). The same checkpoints are used in #8170 and #8171; different reset distributions make this an MDP comparison, not evidence of new policy training.
At
4f0c7ce8d, the verified CI fixes from #8170 are included; 67 focused Lift/Reach/action tests and formatting/changelog checks passed. Active Isaac Sim and legacy kitless cable golden tests now pass without modifying goldens or thresholds. Full CI is being rerun.Remaining gates: Newton's thin capsule scored 40.6%; OvPhysX's thin plate scored 52.9%. The old Newton IK-Rel artifact remains unqualified. Controlled speed measurements remain pending.
The separate ovstage-only cable renderer check also fails on unmodified
develop; it is post-merge-only and is not part of the PR CI gate.Release backport
develop