Fan env: grid-free agent + GT hybrid (wind) simulator#49
Merged
Conversation
This was referenced Jul 7, 2026
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Commits
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_simulator.pymodels fan wind as a skipped process dynamic (unlike domino, a no-op stub would be wrong here), unblocking the oracle+hybrid-sim path. Includestest_fan_gt_simulator.py.