# open_microwave — analysis (iter_009, SUCCESS, progress 0.5295) Perception-driven solution using the distilled skills (`skills/geometry.py`, `skills/hinged_door.py`). Grasps the vertical handle bar's centre, seated deep in the finger gap, and pulls the end-effector along the door's hinge arc with fixed gripper orientation, then releases and retreats. ## Path to success - iter_001 (yaw-follow the door): door reached ~0.37 rad then the gripper was pried off by the yaw. progress 0.368. - iter_002 (fixed orientation): slip moved out to ~0.5 rad. progress 0.499. - iter_003 (deep grasp, fixed orientation): first SUCCESS. Deep seating of the bar in the finger gap survived past 0.8 rad. progress 0.503 (right at the 0.8-rad threshold). - iter_009 (this): perception-driven via skills, grasping the bar CENTRE → progress 0.5295, more margin, and validates the reusable primitive. ## Key facts established - Success threshold ≈ 0.8 rad; progress ≈ door_angle / 1.6. Eval deterministic. - Door stays where released (no spring-back) → only need to hold grip to target. - Grip security (deep + centred) is the dominant factor. Yaw-following hurts. - ~0.8 rad is an arm-strength ceiling (arm sags in z at far reach); don't fight it with longer sweeps — clear the threshold and stop.
# open_microwave — proposal (from iter_009)
Task is solved (deterministic success). No further iteration needed for
open_microwave. The winning program is `workspace/open_microwave_v005.py`.
Durable outputs written for future sessions:
- `skills/geometry.py` — quaternion helpers, `find_protruding_point`.
- `skills/hinged_door.py` — `pull_hinged_door`, `open_sign_toward_robot`,
`release_and_retreat` primitive.
- `skills/open_hinged_door.md` — recipe.
- `world_memory/{scene_microwave, action_open_hinged_door, embodiment_kinova_gen3}.md`.
If revisited for more margin/robustness: the ~0.8-rad pull ceiling is set by arm
sag at far reach. A possible avenue is a two-phase open (pull to ~0.6 rad, then
push the swung-out door face with the gripper back), but pulling alone already
clears the requirement deterministically, so it is not worth the risk/time.
# open_microwave — iteration 5 analysis **Result:** SUCCESS. progress = 0.7786 rad (resting, after release + settle), success threshold 0.5. traj_similarity to demo = 0.959. ## Progression across iterations | iter | sweep cmd | held (before release) | resting (progress) | note | |------|-----------|-----------------------|--------------------|------| | 001 | 1.02 | ~0.33 (slipped) | 0.334 | fixed gripper orientation → cammed off bar | | 002 | 1.08 +inward bias | ~0.4 then thrash | 0.211 | inward bias made targets unreachable, IK dove (z→0.40) | | 003 | 1.08 | ~1.0 | 0.554 (SUCCESS) | rotating gripper fixed the slip | | 004 | 1.35 | ~1.35 | 0.773 | pushed past springback | | 005 | 1.50 | ~1.4 (open stop) | 0.779 | diminishing returns; ~0.78 is the resting equilibrium | ## What was actually happening - The handle is a **vertical** bar on a door with a **vertical** hinge axis, so the bar stays vertical and at constant z (~0.60); it only translates along a horizontal arc. Circle fit on the demo's gripper-closed EE path: **hinge (x,y)=(0.656, 0.276), radius 0.483 m**, closed handle angle -1.524 rad. - **Root failure (iter 1):** holding the EE orientation fixed while the door rotates ~60° makes the handle rotate relative to the fingers, so the grip progressively cams off the bar. Fix: rotate the gripper about world **+z** by the door angle (`rot_z(q0, sweep*frac)`) so the grip stays aligned. This alone turned failure into success. - **Inward radial bias (iter 2) is harmful:** the door is rigid, so aiming inside the true arc makes every waypoint unreachable; move_to times out and IK produces wild poses (z crashed to 0.40 m) that throw the gripper off. Trace the *exact* arc. - **Springback:** the door relaxes to ~0.57× the held angle after release. To land a large resting angle you must over-open. It saturates at ~0.78 rad resting (≈ half the 1.57 rad range) regardless of extra push — a stable equilibrium / open stop. ## Takeaways captured Distilled into `skills/articulated_open.py` (+ `skills/articulated_open.md`) and `world_memory/`.
# open_microwave — proposal after iteration 5 Task is solved robustly (resting 0.779 rad ≥ 0.5). No further iteration needed. If pushing the resting angle even higher were required: - It saturates near ~0.78 rad (both sweep 1.35 and 1.50 land there), so more pull won't help — the door has a stable half-open equilibrium. - The only lever left would be to *wedge* the door (e.g. release while the arm body still blocks it) or find an over-center latch point, neither of which is needed here. Recommended canonical solution: **iter 3's parameters** (sweep 1.08) are the minimal reliable success; **iter 4/5 (sweep ~1.35–1.5)** give the largest margin. Ship v005-style parameters for robustness.