First Order Robotics' software stack for RoboCup SSL (Small Size League), where teams of six autonomous robots play football. It covers vision and referee input, motion planning, robot control, an in-process referee, a fast simulator (rsim), and the strategy layer that decides what every robot does.
-
Install pixi (
curl -fsSL https://pixi.sh/install.sh | sh) and open a new terminal. -
pixi installin the repository root, thenpixi run precommit-installso every commit is linted. -
pixi run testruns the test suite (add--headlesswhen calling pytest directly). -
Play one headless match between two strategies and save its replay:
pixi run python tools/evaluation/round_robin.py --pair tiki_taka low_block -
pixi run python dashboard_server.pyand open http://localhost:8080 to watch replays and browse tournament results.
Everything runs in rsim with the in-process referee; grSim, the official GameController and real robots are optional (external setup).
| Task | Start here |
|---|---|
| Writing or changing a strategy, tactic or skill | docs/STRATEGY_DEVELOPMENT.md, docs/strategies.md |
| Judging whether a strategy is better | docs/STRATEGY_DEVELOPMENT.md, docs/signals.md, docs/signal_report.md |
| The referee | docs/custom_referee.md |
| Motion planning | docs/motion_planning_comparison.md |
| The simulator | vendor/rSim/FORK_NOTES.md |
| Real robots, vision, radio | utama_core/team_controller/README.md, docs/setup_external.md |
| Which script does what | docs/tools.md |
| Everything else | docs/README.md, the index of every doc |
Coding agents: read AGENTS.md first (CLAUDE.md is a symlink to it).
Everything lives under utama_core/:
strategy/: the strategies (one module perbuild_*_kernel_strategyfactory, re-exported bykernel_strategy.py)tactics/,skills/,shared/: reusable tactics, per-robot skills, and geometry they shareengine/: the tactic-kernel infrastructure (Strategy,Tactic,TickContext,MatchLog, referee overrides)custom_referee/: the in-process referee (rules, state machine, restart positioning, profiles)motion_planning/: path planning and motion controlrun/: the main loop (StrategyRunner)replay/: replay files, the match-result cache and code fingerprintsanalysis/: offline analyses of tournament runs and replays (ball losses, chances, restarts, stalls)scenario_bench/: the scenario bench's starts, banks, harvester and scorerrsoccer_simulator/: the Python simulator environment over the rSim physics fork invendor/rSim/team_controller/,data_processing/: vision, robot radio and referee inputdashboard/: the browser dashboardentities/,config/,global_utils/: data classes, settings and constants, utilitiestests/: all tests
Scripts live in tools/ (tournaments in tools/evaluation/) and examples/; see
docs/tools.md.
- Distances in metres, velocities in metres per second.
- Angles in radians, normalised to [-pi, pi]; heading 0 faces the positive x-axis (left to right).
- The centre of the field is (0, 0). Unless stated otherwise, blue defends the left and yellow the right.
How vision, robot and referee data become one Game state: docs/pipeline_method.md.
Work on a branch and open a pull request into main. A pull request needs:
- a
release:major,release:minororrelease:patchlabel: every merge tomainreleases a new version automatically; - passing CI (tests and lint;
pixi run testandpixi run lintlocally); - to be up to date with
main; - every Copilot comment reviewed (not necessarily accepted);
- an approval from an assigned reviewer.
Editor setup, pre-commit troubleshooting and the pixi environments: docs/contributing.md.
- 2024 November 20 - First goal in grSim (featuring ray casting)

