feat(sim): add PushShapes Sim V2 with rigid parallel-gripper physics - #586
feat(sim): add PushShapes Sim V2 with rigid parallel-gripper physics#586ElmoPA wants to merge 2 commits into
Conversation
|
Warning This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
This stack of pull requests is managed by Graphite. Learn more about stacking. |
Cherry-picked from 9cdad86 (PR #586, @ElmoPA). Applies with ZERO conflicts because that PR's tree is a copy of this branch plus the fix -- the agent class list is byte-identical between them. What it fixes, all of it in code I wrote: * Jaw motion was a TELEPORT. _sync placed the jaws at the commanded gap in one substep, letting a kinematic finger cross a rigid object before Pymunk resolved contact. Now rate-limited to 0.25/substep: 200 contact updates over the stroke instead of one jump. This replaces my workaround, which floored the gap at the measured object width -- a measurement that was itself a repeated source of bugs. * The contact guard could not SEE the jaws. It checked env._pusher_shapes only, i.e. the palm; the jaws are separate bodies, so a jaw-only overlap was invisible. New physics_shapes()/sync_auxiliary_bodies() hooks give the guard, the wall clamp and the renderer the same geometry. * pre_substep captured the safe baseline AFTER moving the jaws, so any penetration the jaw movement introduced was part of the baseline and unguardable by construction. Now captured first. * The latch condition was too weak. _spans() accepted object material anywhere in the jaw span, so a wide-open gripper could latch without touching. _both_jaws_contact_object() requires BOTH fingers at the surface. VERIFIED rather than assumed. The fix appears to break the gripper -- it stops grasping on a drive-straight-in approach. It does not: that grasp was never physically valid. Under the position-then-close protocol the PR intends, both graspers work (gripper carried 85.0 and rotated 34.4 deg; umi 84.6 / 37.8), and the full suite goes 82 -> 89 passing. DATA CONSEQUENCE, measured on 40 episodes per agent: the generated demos replayed under the new physics succeed at umi 100%, suction 78%, gripper 0%. Every gripper demo depended on the invalid latch. Those are quarantined, not kept. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-Authored-By: ElmoPA <elmond.pattanan@gmail.com>
Update PR #586 to the exact PushShapes Sim V2 runtime used for the 6x13 control-gap dataset collected and generated on 2026-08-26. This preserves the final rigid/contact behavior for the collected embodiments, their control-gap modes, and the generator path that replays the recorded controller mode. Source-of-truth snapshot: /coc/flash7/paphiwetsa3/experiments/pushshapes_gapgen_all6x13_1000_20260826/source/Tsimulation/sim_v2
9cdad86 to
def38a7
Compare
Claude Code ReviewReview of PR #586SummaryThis PR introduces a versioned Key concerns1. PR title/description mismatch with diff (blocking)The PR claims to add "PushShapes Sim V2 with rigid parallel-gripper physics" but the diff only contains 2. Top-level
|

feat(sim): add PushShapes simulator embodiments
fix(sim): make parallel-gripper grasps rigid and collision-safe