RoboDojo toast: bread loss and slot-contact escape#
Bottom line: neither case is a missing close command, and neither is explained by “the bread is too slippery” alone. The gripper command remains 0 (closed). Both grasps act near the upper edge, roughly 4.4–4.6 cm above the slice center of mass. The slice falls only after bilateral normal contact collapses and the now-empty gripper closes farther. Layout 002 adds neighbor/shelf interaction. In layout 011, the slice first rotates in the gripper plane during lifting, the contact proxies roll toward the top edge and geometric margin is exhausted; only then does normal impulse collapse. “Load vanishes” is an outcome, not the first cause.
This is a DexLab diagnosis of external RoboDojo make_toast offline Code-as-Policy records, not a native DexLab backend reproduction or a cross-engine comparison. The page keeps two denominators separate. The 2026-11-12 batch succeeds in 19/100 cases; the two local drop clips below explain only its two policy-mechanics failures. The separate 2026-11-13 v67 batch succeeds in 65/100 cases; the three newly documented slot-contact escapes come from its 35 failures. The batches differ in policy, evidence channels and failure classification and must not be merged into one success rate or one physics attribution.
Case 1: edge roll-out after neighbor interaction#
Download the full layout 002 MP4
Seed 0 / layout 002 loses contact at step 982. The peak bilateral normal impulse falls from about 0.252 N·s to 0. A neighboring slice contributes about 0.062 N·s near release, followed by the first shelf impact at about 0.048 N·s. The contact lies about 4.60 cm above the center of mass, with a 4.85 cm lever arm. This is analogous to pinching the upper rim of a thin card and then pushing it sideways: the contact normals rotate and the slice rolls out around its upper edge.
After release, recorded peaks reach about 0.70 m/s translation and 11.4 rad/s rotation. A 62.4 mJ potential-energy drop feeds translation, rotation and later impacts. The rotation and impact order support roll-out, but 25 Hz pose differencing is not a strict per-substep energy balance.
Case 2: shallow top-edge grip loss#
Download the full layout 011 MP4
Seed 0 / layout 011 loses contact at step 188. Normal impulse falls from about 0.253 N·s to 0.0019 N·s. No neighbor or shelf impulse is measured near release; the slice first hits the table at step 192 with about 0.111 N·s. Contact is 4.42 cm above the center of mass—only about 1.4 cm below the top edge of the roughly 11.8 cm-tall slice.
Frame-by-frame reanalysis moves the first failing layer earlier. From step 186 to 188, in-plane bread rotation relative to the wrist grows from about 6.93° to 12.45°, while mean distance from the two contact proxies to the OBB top edge shrinks from 14.41 mm to 2.87 mm. Normal impulse remains about 0.253 / 0.250 N·s in the first two frames and collapses only at step 188. Upward wrist acceleration peaks near 4.58 m/s² at steps 181–183, amplifying effective load on a shallow grasp, although the present trace cannot uniquely separate its contribution from friction, rigid-edge contact and missing compliance.
The supported chain is therefore: shallow top-edge pinch → lifting amplifies in-plane rotation about the pinch line → contacts roll toward the edge and exhaust geometric margin → bilateral impulse collapses → empty fingers close farther → free fall. Intuitively, it is like lifting a stiff card while pinching only a small strip at its top. The fingers look closed and the card follows briefly, but its lower center of mass acts through a long lever arm and rotates the card about the pinch; once the pinch rolls to the edge, the fingers remain closed while the card is already gone. This analogy explains only the shallow-grasp geometry and rotation chain; it does not establish that real bread has the simulated friction, stiffness or compliance. Peak falling translation is about 1.09 m/s, with about 5.56 rad/s rotation. This is more specific than “normal load disappears for no reason,” without over-attributing the parameter-level cause to PhysX.
v67: three slot-contact escapes#
Corrected conclusion: these three cases do contain abnormal simulated robot-state motion, but the evidence supports an unstable coupling between active position control and rigid contact after a slot-rim jam—not attribution of all excess energy to the passive PhysX solver alone. Transport remains stable in all three, and the first anomaly is at deep insertion. s1/l026 and s1/l049 first stop 19 mm and 28 mm above the target; instead of leaving contact, the policy immediately issues another downward rs-down. s0/l025 escapes within its first deep seat action.
Case |
Initial condition / action |
Evolution and first failure |
Task consequence |
|---|---|---|---|
|
The second slice reaches the slot stably; TCP starts at |
|
The next lift is also blocked; lateral motion and another descent become IK-infeasible; placement cannot be confirmed and only one slice is counted |
|
The first slice reaches the slot; |
The following |
The grasp releases during escape and withdrawal remains blocked; occupancy is unresolved and zero placed slices are confirmed |
|
One slice is already placed; the second |
A 10 mm lift and lateral nudge remain blocked; the next |
The grasp releases and withdrawal fails; the second slice cannot be confirmed and the task stops at one slice |
Show the three full right-wrist videos
s0/l025
s1/l026
s1/l049
Why this is not a planner artifact#
The final_xyz returned by move_to is not a candidate IK or fallback pose. The pinned PyRUA source reads observed joint angles after each environment action and computes TCP through forward kinematics; blocked is also derived from the achieved-versus-planned TCP discrepancy. The trace therefore proves that the simulated joint state really moves in the wrong direction, rather than merely printing an unreachable substitute target.
The three escape actions last 40–44 ms. Endpoint differences give mean observed vertical TCP rates of about 6.53, 2.65 and 6.43 m/s. These are not peak velocities or rigid-body center-of-mass velocities. If the 0.07 kg bread followed TCP for the whole rise, its gravitational-potential increase alone would be about 0.179, 0.073 and 0.194 J. The latter two grasps release during escape, however, and robot-link kinetic and potential energy are absent, so the values show anomaly scale rather than closing an energy ledger.
First failure, primary cause and amplifiers#
First observed failure: geometric jamming at the slot.
s1/l026ands1/l049are already stopped by the rim or an end wall before escape; ins0/l025, jamming and escape occur inside the same downward action. Without per-pair contact records, the evidence cannot distinguish bread–rim, finger–rim or simultaneous multi-body contact.Task-level primary cause: deep position control continues after the jam. A stop above the target is handed to 3–9 mm translational retries without first leaving the slot, unloading contact and reobserving. This converts a recoverable insertion miss into a highly constrained multi-contact state.
Simulation-level primary cause: unstable coupling between stiff active drives and rigid multi-contact. The frozen X5 source uses arm
stiffness=4400,damping=40andeffort_limit_sim=100; PyRUA may advance a joint target by as much as about0.2 radper environment action. The robot is not passive. Its drives can continue doing work while jammed, and a changing contact normal or depenetration response can redirect that work laterally and upward.Static risk amplifiers, not proven single causes: the batch source selects a 4 ms step with one physics step per action, 8 robot position iterations and 0 velocity iterations, CCD and stabilization off, and
max_depenetration_velocity=5 m/s. Bread metadata carriesmass=0.07 kgandfriction=0.45, but the rigid loader does not consumefriction; it falls back tostatic=0.6,dynamic=1.5,restitution=0. A dynamic coefficient greater than the static coefficient may amplify sticking and jamming, but this batch lacks resolved runtime pair/combine-mode readback.Mechanism still not uniquely identified: 40 ms action outcomes do not separate actuator work, contact impulse, depenetration correction and time-discretization error. Rigid objects are created with
track_contact_forces=False, and the batch contains no 4 ms joint velocity, drive effort, penetration or tangential-impulse trace. “The solver injected all anomalous kinetic energy from nowhere” therefore remains a hypothesis, not a measured conclusion.
Intuitively, this is like using a stiff spring-loaded arm to push a hard card into an undersized slot. Once the card jams, the motor keeps loading the spring; when the contact normal changes, stored actuator work can pop the arm upward and sideways. The analogy explains why active drive plus jammed contact is not ordinary low-friction slip. It does not distinguish physically released actuator energy from numerically added depenetration energy.
Repair order and the next attribution gate#
Break the hazardous action chain first. If the first deep insertion is blocked more than 5 mm above target, stop downward motion; retreat 20–30 mm, unload contact and reobserve the bread-to-TCP transform before retrying. Ramp contact motion in 1–2 mm increments and add a gate on reverse TCP displacement/velocity.
Run single-factor A/Bs on the frozen cases. Hold initial state, policy target and material fixed while testing velocity iterations
0→1→4, position iterations8→16, stabilization, maximum depenetration velocity5→1→0.5 m/s, and timestep4→2 ms. CCD addresses fast thin-object tunneling and is not a generic static-jam fix.Fix material mapping instead of blindly raising friction. Map metadata
frictionexplicitly to a pair satisfyingμ_static ≥ μ_dynamicand read back the effective pair. Excess friction can worsen rim jamming. Only then compare calibrated compliant fingertip, bread or rim contacts.Complete the 4 ms force/energy ledger. Record
q,dq, targetq*, drive effort, per-pair normal/tangential impulse, penetration and bread pose each step. CompareW_drive=Στ_drive·Δqagainst systemΔ(K+U). Attribute a residual to solver energy injection only if a repeatable positive residual remains after actuator, gravity and constraint work are accounted for and shrinks with timestep/iteration refinement.
The machine-readable timeline, static parameters and evidence boundary are in contact-escape-v67.json. These cases are 3/35 v67 failures and 3/100 total trials. They establish simulated state escape, not a common explanation for the other 32 failures.
Separate policy errors from simulator gaps#
Layer |
Supported by this evidence |
Not supported |
|---|---|---|
Policy / grasp geometry |
Both contact lines are too high; layout 002 also lacks neighbor and shelf clearance |
A missing close command; the command remains closed |
Contact dynamics |
Bilateral normal load collapses at release; layout 002 has a neighbor impulse; in layout 011 rotation and edge-margin loss precede collapse |
Reducing the pre-release load to “static friction is slightly too low,” or treating zero impulse itself as the first cause |
Task execution |
The 2026-11-12 batch succeeds 19/100 and mostly fails through incomplete execution, early finish or unreached targets; the separate v67 batch succeeds 65/100 |
Two drop clips do not explain the other 79 old-batch policy failures; three contact escapes do not explain the other 32 v67 failures |
Simulation validity |
A rigid thin-slice model amplifies abrupt edge-contact changes; effective material pairing and tangential impulses need better readback |
A proven PhysX solver defect, real-bread calibration or engine ranking |
Concrete simulation gaps#
Rigid slice and rigid fingertip contact. The slice is a 0.07 kg rigid body with an approximately 116.9 × 116.1 × 11.8 mm bounding box. Bread compression, surface roughness and fingertip compliance are absent, making an upper-edge contact more discontinuous than a finite real contact patch.
Material configuration needs runtime readback. Static metadata carries
friction=0.45, while the object loader consumesstatic_friction/dynamic_frictionand falls back to different defaults when those fields are absent. The effective finger–bread pair and combine mode were not fully read back in this evidence. This should be fixed, but it does not replace grasp-geometry correction.The trace is incomplete for material identification. Plots use the peak normal impulse across ten 4 ms physics substeps per 40 ms trace frame; full tangential friction impulse is not recorded. Energy uses 25 Hz pose finite differences. These signals locate contact loss and distinguish the two mechanisms, but do not establish exact energy closure or calibrated material parameters.
The third panel is a diagnostic proxy. Cyan
B0and orangeB1–B3are postprocessed from recorded rigid poses and bounding boxes, with left/right aligned to the wrist view at release. It is not an export of the native PhysX collision mesh.
What to change next#
Fix grasp geometry before increasing friction:
A/B the grasp depth in this policy snapshot from about
0.016 mbelow the top edge to0.028 m, then up to about0.034 monly if shelf clearance permits.Keep
GOOD_W = 0.0145 mas the full-thickness acceptance threshold, but change the below-threshold behavior from carrying a narrow pinch to open, deepen and regrasp.For layout-002-like cases, add about 1.5 mm of inner clearance and perform a slow 1–2 cm vertical test lift before lateral motion. Reducing weak-carry segments from about 15 mm to 8 mm is secondary mitigation.
During the test lift, reject asymmetric finger contact, a sudden gripper-width drop or growing object-relative motion.
For simulation A/B tests, save the resolved finger–bread material pair, friction combine mode, contact offsets, CCD and stabilization settings at runtime; add tangential impulse and contact-patch telemetry; then compare rigid contact against a compliant fingertip or bread proxy under the same initial state, policy and commands.
Evidence boundary#
Old drop batch: 2026-11-12; 100 distinct seed/layout cases, 19 successes and 81 failures. RGB and rigid poses are 25 Hz; diagnostics aggregate 250 Hz PhysX callbacks. Each clip spans about four seconds before and after release at 2× slow motion, with release centered at eight seconds.
v67 contact-escape batch: 2026-11-13; 100 distinct seed/layout cases, 65 successes and 35 failures. All three escape cases retain full right-wrist video and action-level endpoints, but no per-physics-step contact or drive trace.
Machine-readable data: old-batch metrics.json and layout-011-root-cause.json; v67 contact-escape-v67.json.
No second engine, hardware bread experiment or material calibration was run, and no controlled solver/control/material A/B has yet rerun the three v67 cases. Conclusions remain scoped to each batch and recorded event.