Skip to content

[Bug Report] Kuka-Allegro self-contact positions are shifted by more than 1 m with Newton #6203

@jessicayin

Description

@jessicayin

Describe the bug

In a clean IsaacLab origin/develop checkout, there is a large position mismatch in a Newton scene that contains only the public KUKA_ALLEGRO_CFG robot.

When the Kuka-Allegro hand collides with itself (e.g., 2 fingers touching), the reported contact point should be close to the two collision shapes that created that contact. Instead, on the first simulation step, some contact points are more than 1.4 m away from those shapes. With self-collisions disabled, the same setup produces zero contacts and no bad rows.

Steps to reproduce

Use a clean IsaacLab develop checkout with isaaclab_newton available. Save the attached script isaaclab-01-repro_newton_kuka_self_contact_frame.py at the IsaacLab repo root.

Run the self-contact case:

./isaaclab.sh -p isaaclab-01-repro_newton_kuka_self_contact_frame.py \
  --headless --num_envs 8 --steps 1 --pose_mode random --self_collisions

Run the no-self-collision control:

./isaaclab.sh -p isaaclab-01-repro_newton_kuka_self_contact_frame.py \
  --headless --num_envs 2 --steps 1 --pose_mode random --no_self_collisions

I validated this with the same attached script on clean origin/develop at 01099bbe678fac5ec5894430b6eb833d4a8d56e4.

Observed self-contact output:

[repro] num_envs=8 steps=1 pose_mode=random self_collisions=True
[capture after_convert index=0] contacts=85 rows=85 bad=44 max_contact_geom=1.42575
[repro rollup]
"first_bad_capture_index": 0
"max_bad_row_count": 44
"max_contact_to_geom_mid_m": 1.4257527354700714

One of the worst rows is a middle-finger / ring-finger self-contact:

world = 5
middle_link_2/collisions/collisions_31 <-> ring_link_2/collisions/collisions_34
contact_to_geom_mid_m = 1.4257527354700714
contact_equals_input_mid_m = 1.1391210440720057e-07

Observed no-self-collision control output:

[repro] num_envs=2 steps=1 pose_mode=random self_collisions=False
[capture after_convert index=0] contacts=0 rows=0 bad=0 max_contact_geom=0
[repro rollup]
"first_bad_capture_index": null
"max_bad_row_count": 0
"max_contact_to_geom_mid_m": 0.0

System Info

  • IsaacLab source tested: clean origin/develop, commit 01099bbe678fac5ec5894430b6eb833d4a8d56e4, VERSION=3.0.0
  • IsaacLab origin/main note: commit b4c321024792976150ca55fddb26fa34480d974e, VERSION=2.3.2, does not contain source/isaaclab_newton, so I did not test this Newton repro on clean main
  • Isaac Sim runtime used for validation: standalone Isaac Sim 5.1.0, Kit 107.3.3+production.229672.69cbf6ad.gl
  • OS: Ubuntu 24.04.4 LTS
  • GPU: NVIDIA RTX 6000 Ada Generation
  • GPU Driver: 570.211.01
  • Runtime Python/Torch used for validation: Python 3.11.13, Torch 2.11.0+cu128

Additional context

The script measures the contact data immediately after Newton writes it into MJWarp's contact buffer. At that point, the contact point is still almost exactly equal to Newton's input point (~1e-7 m difference for the row above), but the two matching collision shapes are more than a meter away.

Controls run so far:

Clean IsaacLab develop / attached Kuka repro:
  num_envs=8, pose=random, self_collisions=True
  contacts=85, bad rows=44, largest mismatch=1.4257527355 m

Clean IsaacLab develop / attached no-self control:
  num_envs=2, pose=random, self_collisions=False
  contacts=0, bad rows=0, largest mismatch=0.0 m

Small Newton-only two-link robot control:
  contacts=4, largest mismatch=0.0 m

Simple IsaacLab box controls:
  two_boxes / InteractiveScene: contacts=16, largest mismatch=0.176890 m
  box_ground / InteractiveScene: contacts=16, largest mismatch=0.0 m

These controls suggest the problem is not present in every Newton contact case and not present in the simple box tests I tried. So far, I only reproduce the large mismatch with Kuka-Allegro random self-contact in cloned IsaacLab environments.

Checklist

  • I have checked that there is no similar issue in the repo (required)
  • I have checked that the issue is not in running Isaac Sim itself and is related to the repo

Acceptance Criteria

For each contact, the reported contact point should be close to the two collision shapes that created it. In this repro, the largest contact-to-shape distance should stay near the size of the contact, not reach 1.4257 m.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions