7. Submission
Deadline: 18 October 2026, 23:59 (SGT).
7.1 What to submit#
A git repository containing this repository plus your work, with:
- Your driver in
race_ws/src/team_driver/, runnable asros2 run team_driver driver. - Any extra packages declared in
race_ws/src/team_driver/requirements.txt(pip) andrace_ws/src/team_driver/apt-packages.txt(apt). Declared packages get installed into the image; undeclared ones will not exist during judging. - A
SUBMISSION.mdat the repository root (template in §7.3). - Nothing else changed in the judging environment — verify with
./scripts/verify_judging_env.sh. - The results of your own judged runs, in
results/submitted/— the result files./scripts/evaluate.shwrote on your machine, unedited, with the machine described inSUBMISSION.md. See below.
Do not commit race_ws/build/, race_ws/install/, race_ws/log/, or
anything in results/ other than results/submitted/. The .gitignore
already handles this.
Your own judged runs#
We race every entry ourselves on the judging machine, and that run is the one that scores. Your own result files are the control: they record what the same code did on your hardware, which is what lets us tell a real difference from a broken one.
mkdir -p results/submitted
./scripts/evaluate.sh --team <your_team> --runs 3 --headless
cp results/<your_team>__*.json results/submitted/
git add results/submitted
shellWhat is required:
- At least one run with
"status": "COMPLETE"and"scored": true. Commit as many as you like — the more we have, the better we can tell ordinary variation from something wrong. - The files exactly as the referee wrote them. Do not edit them, do not assemble one by hand, do not rename a field. They are read against the format in §5.5 and against our own run, and rule 44 applies to a result file as much as to a run.
- The machine that produced them, described in
SUBMISSION.md: CPU, GPU, RAM, OS, and theenvironment.real_time_factoryou usually saw.
If nothing you have run reaches COMPLETE, commit the best attempt you have
and say so in SUBMISSION.md. A DNF you are honest about costs you nothing
here; a missing file leaves us guessing.
If our result and yours differ significantly, we will come to you. A large gap is usually environmental — a dependency that resolved to a different version, a timing assumption that only holds on your hardware, a real-time factor a long way from 1.0 — and we would rather debug it with you than record a number neither of us believes. That is what this deliverable is for. It is not a second leaderboard: nothing you commit here is scored.
The Judge workflow result is not a substitute. It runs on GitHub's hardware, which is neither your machine nor ours.
7.2 How to submit#
- Fork this repository, or push a branch to the repository the organisers gave your team.
- Keep the submodules intact — do not delete
external/or commit its contents directly. A freshgit clone --recurse-submodulesof your entry must give the judges a working repository. - Push everything before the deadline.
- Send the organisers your repository URL and the branch name.
Test from a clean clone first#
This is the single most common way to lose points. Your machine has state your submission does not.
cd /tmp
git clone --recurse-submodules <your repo url> submission_test
cd submission_test
./install/linuxmacoswindows/setup.sh --no-cache # picks up your declared packages
./install/linuxmacoswindows/run.sh
# inside the container
cd /hackathon/race_ws && colcon build --symlink-install && source install/local_setup.bash
exit
./scripts/evaluate.sh --team clean_clone_test --runs 1 --headless
shell--no-cache matters if you declared any packages: it proves they install from
scratch and that they did not break the simulator. The build fails loudly if
they did.
If that produces a COMPLETE result, your entry will run on judging day.
Pushing runs the same thing on GitHub Actions and writes the result to the workflow summary — see §5.6. Check it is green before you tell us you are done — green means your entry runs, not that it is fast, and none of the times it prints are scored.
7.3 SUBMISSION.md template#
# Team <name>
## Members
| Name | Matric number | Email |
| --- | --- | --- |
| ... | ... | ... |
## Approach
Two or three paragraphs: what your driver does, why you chose it, what you
tried that did not work.
## How it uses the inputs
- LiDAR: ...
- Odometry: ... (say whether you used ground truth or your own localisation)
- Map: ...
## Results on our own machine
The runs committed in `results/submitted/`, summarised.
| Best lap | 10-lap total | Collisions | Runs attempted |
| --- | --- | --- | --- |
| ... | ... | ... | ... |
### The machine that produced them
| CPU | GPU | RAM | OS | Typical real-time factor |
| --- | --- | --- | --- | --- |
| ... | ... | ... | ... | ... |
Anything else that might explain a gap between your numbers and ours: a run
that only works on the second attempt, a warning the referee logged, a result
you cannot reproduce.
## Anything precomputed
A map, a racing line, trained weights. What is computed offline, which script
produces it, and how to regenerate it. For trained weights, say how they were
trained as well — environment or dataset, reward or loss, roughly how long, and
how you decided the result was good. That description is what we discuss at the
interview, not the weights themselves.
## Dependencies we added
Everything in `requirements.txt` / `apt-packages.txt`, with one line each on
what it is for. Write "none" if you added nothing.
| Package | pip or apt | What we use it for |
| --- | --- | --- |
| ... | ... | ... |
## Third-party code and references
Papers, repositories, blog posts you took ideas or code from.
## AI assistance
Which tools you used and for what. This is permitted — we ask so the interview
can focus on the parts you wrote yourself.
## Known issues
Where it breaks, and what you would do next with more time.
markdown7.4 The interview#
Every team is interviewed after the race. Expect roughly 30 minutes.
What we ask about:
- Walk us through your driver, in your own words.
- Why that approach and not the others?
- What does this parameter do, and what happens if we double it?
- Show us a change you made that did not work, and how you knew.
- If any of it is learned: how did you train it, why that way, and how do you know it works?
- How would you handle a track twice as fast? An obstacle mid-corner?
Any member may be asked about any part of the code. Splitting the work is fine; not knowing what your teammates built is not.
Bonus marks are available for an ambitious algorithm (RL, MPC, imitation learning — anything beyond a standard reactive or path-following method), your own localisation, runtime racing-line generation, and clear engineering — see rule 41. These affect the recruitment decision, not the leaderboard.
7.5 Submission checklist#
- [ ] 3 to 5 members, all named in
SUBMISSION.md - [ ]
ros2 run team_driver driverworks from a clean clone - [ ] Any extra packages declared in
requirements.txt/apt-packages.txtand listed inSUBMISSION.md - [ ]
./install/<os>/setup.sh --no-cachesucceeds from clean if you declared any - [ ]
./scripts/verify_judging_env.shreports the environment intact - [ ]
./scripts/evaluate.sh --team <team> --runs 1givesCOMPLETE - [ ] Your own judged runs committed in
results/submitted/, unedited, with the machine described inSUBMISSION.md - [ ] The Judge workflow is green on your submitted branch (a check that your entry runs, not a score — the organisers' run decides that)
- [ ] No build artefacts committed, and no result files outside
results/submitted/ - [ ]
SUBMISSION.mdfilled in, including AI usage and attributions - [ ] Pushed, and the URL sent to the organisers, before 18 Oct 2026 23:59 SGT
Back to the README.