Skip to content

Restore primitive gripper contacts for Franka Lift and Reorient - #7875

Closed
ooctipus wants to merge 2 commits into
isaac-sim:developfrom
ooctipus:fix/franka-lift-primitive-contacts
Closed

ooctipus wants to merge 2 commits into
isaac-sim:developfrom
ooctipus:fix/franka-lift-primitive-contacts

Conversation

@ooctipus

@ooctipus ooctipus commented Sep 17, 2026 •

Copy link
Copy Markdown
Collaborator

The Franka asset update added active arm capsules to its primitive variant. The previous asset had only a hand capsule and two finger pads enabled. #7870 unblocked reset sampling by selecting convex hulls, but that also enabled arm and hand mesh contacts. This follow-up restores the original active contact geometry for rigid Franka Lift and Reorient: select Colliders=primitives and use the existing task-local collision_props override to disable all ten arm capsules.

Disabling physics contacts alone would leave the reset hang: the clearance collector previously included every prim with CollisionAPI, even when physics:collisionEnabled=false. The new link1 capsule extends 6 cm below the ground, so it would still reject every reset candidate. The collector now includes only enabled colliders.

Reset behavior changes deliberately: the old collector also used disabled arm meshes as clearance proxies. These are no longer checked. Clearance now uses the enabled hand/finger colliders for Franka, with the existing object, table, and ground criteria and thresholds. The enabled-collider rule applies to the shared Lift/Reorient clearance collector; the arm-contact override belongs to the rigid Franka task configuration.

This corrects the collision-behavior limitation documented in #7870. The original reset hang was triggered by the external asset change, rather than by the unrelated PRs where the shared RL export test exposed it.

Validation:

  • One focused regression checks that reset clearance includes enabled colliders and excludes disabled or visual-only geometry. It failed before the fix; all 8 tests in test_lift_env_cfg.py pass with the fix.
  • A composed-USD audit verified exactly one active hand capsule and two active finger-pad cubes, all ten arm capsules disabled, and only those three enabled colliders entering reset validation. Their geometry parameters and authored world transforms match the preserved old asset.
  • GPU runs with the published asset completed the full 2,048-state reset harvest and 32 simulation steps for both Lift and Reorient. Environment creation plus reset took 22.318 s and 18.547 s respectively on the local warmed cache.
  • The unchanged four-task RSL-RL export batch (Lift-Franka__to__Lift-KukaAllegro) passed in 70.60 s.
  • uv run isaaclab -f passed.

Local GPU validation used PyTorch 2.11+cu128, Newton 1.6rc1, and RSL-RL 5.4.1. CI uses the repository's locked dependencies; its results remain to be confirmed.

@ooctipus
ooctipus requested a review from a team September 17, 2026 15:42
@github-actions github-actions Bot added bug Something isn't working isaac-lab Related to Isaac Lab team labels Sep 17, 2026

@isaaclab-review-bot isaaclab-review-bot Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isaac Lab Review Bot

The change restores hand/finger-only contacts for rigid Franka Lift and Reorient by selecting primitive colliders, disabling the ten arm capsules through the task-local spawn override, and excluding disabled collision geometry from reset-clearance collection.

  • Design and architecture: Collider selection remains localized to the rigid Franka task configuration, while the shared Lift/Reorient mesh collector consistently reflects enabled physics collision geometry. This separation matches the producer and consumer responsibilities traced in the patch.
  • API: The existing collect_collision_meshes signature and return structure are unchanged. Its clearance semantics now deliberately exclude disabled colliders, and that user-visible behavior is documented in the isaaclab_tasks changelog fragment.
  • Implementation: The collision-enabled check is applied only to prims carrying CollisionAPI, preserving default-enabled colliders while filtering explicitly disabled geometry. Tests cover primitive variant selection, the ten disabled arm capsules, the three enabled hand/finger colliders, and both default-enabled and explicitly enabled clearance geometry. A minor residual validation tradeoff is that the contact test applies collision properties directly rather than exercising the complete spawn path, though the configured pattern and resulting collider set are checked.

No blocking issues. No inline issue met the actionable-evidence threshold; the assessment above records the review feedback.

Automated review; human maintainers own approval decisions.

@greptile-apps

greptile-apps Bot commented Sep 17, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 4/5

The PR appears safe to merge, with a non-blocking opportunity to make the contact regression asset-backed.

Findings

  1. P2 Synthetic Test Hides Asset Drift ▶

Summary

This PR restores the intended rigid Franka contact geometry for Lift and Reorient.

  • Selects the primitive collider variant and disables the ten arm capsules through a task-local collision-property override.
  • Restricts reset-clearance mesh collection to collision-enabled geometry, allowing disabled arm capsules to be ignored.
  • Adds contact-configuration and disabled-collider regressions plus a changelog entry.
  • The implementation is consistent with the intended behavior, although the contact regression should validate the composed external asset rather than a hand-authored copy of its hierarchy.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Load franka_panda.usda] --> B[Select Colliders primitives variant]
    B --> C[Apply task-local collision override]
    C --> D[Disable ten arm capsules]
    C --> E[Keep hand capsule and finger pads enabled]
    D -->|Excluded| F[Collect enabled collision meshes]
    E -->|Included| F
    F --> G[Validate reset clearance]
Loading

Reviews (1) · Last reviewed commit: "Restore primitive gripper contacts for F..."

Comment on lines +77 to +94
link_path = "/Robot/Geometry"
for index in range(8):
link_path += f"/panda_link{index}"
names = [f"link{index}_capsule"]
if index in (5, 7):
names = [f"link{index}_capsule_0", f"link{index}_capsule_1"]
if selection == "convex_hulls":
names = [f"link{index}_c"]
for name in names:
prim = stage.DefinePrim(f"{link_path}/{name}", "Capsule" if selection == "primitives" else "Mesh")
UsdPhysics.CollisionAPI.Apply(prim)
hand_path = f"{link_path}/panda_hand"
for suffix, shape in (
("hand_capsule", "Capsule"),
("panda_leftfinger/left_finger_pad", "Cube"),
("panda_rightfinger/right_finger_pad", "Cube"),
):
UsdPhysics.CollisionAPI.Apply(stage.DefinePrim(f"{hand_path}/{suffix}", shape))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Synthetic Test Hides Asset Drift

This regression test manually recreates the external asset hierarchy expected by the new override, so it cannot detect the integration failure it is meant to guard against. If franka_panda.usda moves, renames, or adds an arm capsule, production only logs a warning or modifies a subset while this fixture still passes, leaving unintended arm contacts undetected. Please add an asset-backed assertion for the composed set of enabled colliders.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@ooctipus

Copy link
Copy Markdown
Collaborator Author

run-ci

@isaaclab-bot isaaclab-bot Bot added ci:run-docker Trigger the on-demand Docker and GPU CI workflow and removed ci:run-docker Trigger the on-demand Docker and GPU CI workflow labels Sep 17, 2026
@maxkra15

Copy link
Copy Markdown
Contributor

superseded by #7829, which now carries the enabled-collider reset fix as part of the consolidated franka asset migration.

@maxkra15 maxkra15 closed this Sep 18, 2026
@ooctipus
ooctipus deleted the fix/franka-lift-primitive-contacts branch October 14, 2026 14:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working isaac-lab Related to Isaac Lab team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants