Skip to content

Fan env: grid-free agent + GT hybrid (wind) simulator#49

Merged
yichao-liang merged 3 commits into
pr3-sysidfrom
pr4-fan
Jul 7, 2026
Merged

Fan env: grid-free agent + GT hybrid (wind) simulator#49
yichao-liang merged 3 commits into
pr3-sysidfrom
pr4-fan

Conversation

@yichao-liang

@yichao-liang yichao-liang commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

Stacked PR - merge bottom-up. This branch targets the PR below it, so its diff shows only its own changes.

  1. Infra: PyBullet env-leak fix, adaptive-thinking SDK, scene-snapshot guard #46 Infra fixes (base: master)
  2. Domino: goal-NL cleanup + relax Toppled threshold to 30 deg #47 Domino tuning (base: Infra: PyBullet env-leak fix, adaptive-thinking SDK, scene-snapshot guard #46)
  3. SysID: PHYSICAL_PARAMS system identification via free-running rollout fit #48 SysID / PHYSICAL_PARAMS (base: Domino: goal-NL cleanup + relax Toppled threshold to 30 deg #47)
  4. Fan env: grid-free agent + GT hybrid (wind) simulator #49 Fan env (base: SysID: PHYSICAL_PARAMS system identification via free-running rollout fit #48)
  5. predicatorv3 configs: thin launchers, exp splits, shared use_gt_helpers #50 predicatorv3 configs (base: Fan env: grid-free agent + GT hybrid (wind) simulator #49)
  6. Add pybullet_bridge glue-construction domain #51 Bridge domain (base: predicatorv3 configs: thin launchers, exp splits, shared use_gt_helpers #50)
    Fan environment: run the agent grid-free and add a GT hybrid simulator that models the wind the base sims skip. Stacked on the sysID PR.

Commits

  • Run the agent grid-free via oracle-injected grid helpers - new ground_truth_models/fan/{types,predicates}.py; the agent plans grid-free while location/side helpers are oracle-injected (mirrors the domino grid-free setup).
  • Fan GT hybrid simulator - fan/gt_simulator.py models fan wind as a skipped process dynamic (unlike domino, a no-op stub would be wrong here), unblocking the oracle+hybrid-sim path. Includes test_fan_gt_simulator.py.

Mirror the domino helper-object design so the fan agent plans over a
physical-only vocabulary while the loc/side grid is injected for the
oracle / process-planning approaches only.

- New ground_truth_models/fan/{types,predicates}.py: the loc/side helper
  types and the grid predicates (BallAtLoc/ClearLoc/SideOf/FanFacingSide/
  OppositeFan), plus augment_{task,state}_with_helper_objects that rebuild
  the exact task grid (coords encoded in loc names) and rewrite the goal
  BallAtTarget -> BallAtLoc.
- pybullet_fan.py: drop loc/side from types and the grid predicates from
  the env; add the physical BallAtTarget goal predicate; surface the
  target coordinates through per-task goal_nl; reconstruct injected
  loc/side features from object names. Two-table workspace with y_ub=2.1
  and front-anchored robot/switches so the arm never reaches into the grid.
- ground_truth_models/__init__.py: add the augment_state_with_helper_objects
  hook (base no-op + dispatcher).
- process_planning_approach.py: re-derive helper objects on every execution
  state before abstracting, so the closed-loop oracle keeps evaluating
  BallAtLoc during execution. No-op when helpers are disabled.
Unlike domino (plain rigid-body toppling, no-op GT sim), fan applies its
wind in _domain_specific_step, which skip_process_dynamics=True base sims
never run - so the GT simulator must reproduce the ball's wind-driven
motion itself. Calibrated against the real env: constant 0.00228 m/action
ball speed, zero coasting, sphere-overhang wall parking, boundary clamp
from the target-inferred grid. Params ball_speed + wall_clearance (hard
hinge clamps keep the LM Jacobian informative). Unblocks the
agent_oracle_hybrid_sim arm; lockstep hybrid-vs-real tests stay within
14.6mm << the 40mm goal tolerance.
@yichao-liang yichao-liang merged commit b3b1ca3 into pr3-sysid Jul 7, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant