DeepSpeed Hackathon 26/27
Deadline 18 Oct 2026 GitHub
Track 1/Overview

RoboRacer Autonomous Racing — Track 1

NTU DeepSpeed Recruitment Hackathon 26/27

Write the software that drives a 1/10-scale racing car around a circuit it has never seen, as fast as it can, without hitting anything. Everything you need — the simulator, the judging environment, reference algorithms and every official track — is in this repository. You will not need to clone anything else.

Submission deadline: 18 October 2026, 23:59 (SGT)


Quick start#

git clone --recurse-submodules https://github.com/NTUDeepSpeed/Recruitment_Hackathon_2627.git
cd Recruitment_Hackathon_2627
git checkout track1

./install/linuxmacoswindows/setup.sh          # or install/macos, or install/windows from WSL
./install/linuxmacoswindows/run.sh            # builds if needed, then drops you into the container
shell

Then, inside the container:

cd /hackathon/race_ws && colcon build --symlink-install
source install/local_setup.bash

# Terminal 1 — the simulator
ros2 launch roboracer_referee simulator.launch.py

# Terminal 2 — your car
ros2 run team_driver driver
shell

The car will set off and hit the first wall: the template is wiring, not a driver, and writing one is the hackathon. Once yours does something, score it:

./scripts/evaluate.sh --team your_team_name
shell

Pushing also races your entry on GitHub Actions and writes the result to the workflow summary. That workflow is for reference only — it runs on GitHub's hardware and nothing it prints is scored. Your result is the organisers' run on the judging machine.

Full walkthrough: docs/01-setup.md.

Cloned without --recurse-submodules, or downloaded a ZIP? Run git submodule update --init --recursive. The setup scripts will also do it for you. A ZIP download will not work — submodules need a real clone.


The challenge#

You get a LiDAR scan and the car's exact position. You publish a steering angle and a speed. That is the whole interface.

Car Ackermann steering, 0.33 m wheelbase, 0.31 × 0.58 m, steering limited to ±0.4189 rad
Sensor 819-beam LiDAR, 270° field of view, 25 m range
Localisation Ground-truth pose on /ego_racecar/odomallowed and recommended
Track icra26, in this repository. 17 x 18 m, about 78 m a lap, cone slaloms and a hairpin complex.
Scored on Your single fastest lap, and your time for 10 consecutive laps
Penalties +10 s on the lap for each collision; more than 10 collisions is a disqualification
Judged on One machine: i9-14900HX, 32 GB, RTX 5060 Laptop. Times are in simulated seconds, so your own hardware does not affect your score.

No driver ships with this repository. team_driver is wiring — it talks to the simulator and drives in a straight line into the first wall. Writing something that laps is the hackathon. Reactive algorithms like follow-the-gap will get you round; planning against the map and your own position is where the lap time is; and replacing the approach outright is encouraged: reinforcement learning, MPC, imitation learning, a learned end-to-end policy, anything you can defend. The environment is ROS 2 Jazzy on Python 3.12 with a GPU available, so a learned policy is a realistic option. docs/04-algorithms.md is the menu, with what each approach needs and where each breaks.


Where things are#

Recruitment_Hackathon_2627/
├── install/                    Setup scripts, one folder per platform
│   ├── linux/  macos/  windows/    setup.sh, run.sh, shell.sh, stop.sh
│   └── common.sh
├── race_ws/src/                The ROS 2 workspace, mounted into the container
│   ├── team_driver/            ★ YOUR CODE GOES HERE — the template does not drive
│   └── roboracer_referee/        The judging environment — do not modify
├── scripts/                    evaluate.sh, leaderboard.py, track_tool.py, …
├── maps/                       The circuit: icra26.pgm, its yaml, tracks.yaml
├── docker/                     Image definition (ROS 2 Jazzy) and compose files
├── external/                   Upstream simulator sources, as git submodules
├── results/                    Where your run results land
├── .github/workflows/          Automated judging on every push
├── docs/                       This guide
└── workshop/                   ROS 2 teaching material from the workshop

The one file you are meant to open first: race_ws/src/team_driver/team_driver/driver.py


The guide#

Chapter What is in it
1. Setup Installing Docker, building the image, first run, troubleshooting
2. The simulator Topics, message types, changing tracks, RViz, ground-truth odometry
3. ROS 2 primer Nodes, topics and the workshop slides, if ROS is new to you
4. Algorithms The menu: reactive, planned, model-based and learned — what each needs and where each breaks
5. Evaluation Scoring yourself, reading result files, how judging day runs
6. Rules The rules, the scoring formula, and what gets you disqualified
7. Submission What to hand in, how, and what the interview covers

Rules at a glance#

The full rules are in docs/06-rules.md and they are what counts. The short version:

  • Teams of 3 to 5.
  • Deadline: 18 October 2026, 23:59 SGT. Late entries are not scored.
  • AI assistants are allowed. You will be asked to explain your code at the interview — generally, not line by line — so do not submit anything you cannot defend. A learned policy is held to the same standard, and meets it the same way: explain how you trained it and why, not what each weight means.
  • Do not modify the judging environment. Check yourself with ./scripts/verify_judging_env.sh.
  • Score (out of 100):
Weight Formula
Fastest single lap 50 50 × (fastest lap of any team ÷ your fastest lap)
10-lap total 50 50 × (fastest 10-lap total ÷ your 10-lap total)

One warm-up lap is granted before timing starts. Each collision adds 10 s to the lap it happened on. More than 10 collisions in a run is a disqualification.

  • Bonus marks at the interview, for work you can explain properly: replacing the ground-truth odometry with your own localisation; generating a racing line from the map at runtime; or an ambitious driving algorithm — reinforcement learning, MPC, imitation learning.

Getting help#

  • Check the troubleshooting section at the end of docs/01-setup.md first — most problems are there.
  • Bring the exact error text and what you ran to the team channel.
  • ./scripts/verify_judging_env.sh will tell you if your environment has drifted from the official one.
  • You may email ntu-deepspeed@e.ntu.edu.sg for further inquiries if you cannot solve the issues after troubleshooting.

Good luck. Go fast.

Source · README.md