WareRover is an AGV (Automated Guided Vehicle) warehouse simulation project. It simulates multi-AGV order picking and delivery on a grid map with configurable schedulers, path planners, and order generation strategies.
- Closed-Loop Joint Optimization: A unified interface coupling order scheduling with MAPF, enabling the study of scheduling strategies that explicitly account for traffic and routing costs.
- High-Fidelity Warehouse Modeling: A topology-agnostic framework supporting customizable layouts, heterogeneous fleets, and realistic order streams
- Resilience Evaluation: Native support for simulating stochastic failures (e.g., breakdowns, delays), allowing researchers to benchmark algorithmic robustness against execution uncertainty.
- Python 3.10+
- Dependencies: see
config/settings.pyand imports (e.g.numpy,scipy,websockets,torchfor DHC).
-
Configure
Editconfig/settings.py: setmap_file,scheduler_type,planner_type,order_mode,total_orders_limit, etc. -
Run with visualization
python run.py
This starts an HTTP server (port 8000), opens the frontend in the browser, and runs the WebSocket server (port 8765) for the simulator. Use the UI to pause, step, reset, or stop.
-
Batch experiments (no UI)
python -m test.auto_experiment_runner
Or run the full grid of algorithm/scene combinations via
test/auto_experiment_runner.py(adjustNUM_RUNS,BASE_SEED,OUT_DIR, and scene/algorithm lists as needed).
- Scheduler:
RANDOMorTA(cost-based assignment). - Planner:
ASTAR,CBS_FW, orDHC(DHC needsdhc_model_pathand enablesforce_replan_every_step). - Order mode:
ONESHOT,CONTINUOUS_CONSTANT,CONTINUOUS_PERIODIC,CONTINUOUS_PARETO,CONTINUOUS_BURST. - Map: JSON under
config/maps/withmap,boxes,receivers,wait_zones,obstacles,agvs.
-
BaseScheduler
assign_tasks(idle_agv_ids, planner)→{agv_id: [(position, action, extra), ...]}assign_rest_areas(agv_ids)(default: wait zone per AGV)reset()(call afterorder_manager.reset_order())
-
BasePlanner
plan(targets, scheduler)→{agv_id: [path]}targets:{agv_id: (start_pos, goal_pos)}- Path must not include start; first element is the next cell. Use
env.get_env_info()foraction_queuesandcurrent_grid_pos.
See repository for license information.