1. Setup
Everything runs inside one Docker container: ROS 2 Jazzy, the RoboRacer simulator, the reference algorithms and the judging environment. You install Docker, build the image once, and from then on you work inside it.
Your code lives on your own machine and is mounted into the container at
/hackathon, so you edit files in your normal editor and nothing is lost when
the container stops.
1.1 Get the repository#
git clone --recurse-submodules https://github.com/NTUDeepSpeed/Recruitment_Hackathon_2627.git ~/Recruitment_Hackathon_2627
cd ~/Recruitment_Hackathon_2627
git checkout track1
shell--recurse-submodules matters. The simulator sources live in external/ as
git submodules; without them the image cannot be built. If you forgot:
git submodule update --init --recursive
shellDo not download the repository as a ZIP. GitHub's ZIP export leaves the submodule folders empty and there is no way to fill them in afterwards.
1.2 Install Docker#
Windows 10/11#
- Install Docker Desktop for Windows.
- Install WSL 2. Open PowerShell as Administrator:
powershell wsl --installReboot when it asks. - In Docker Desktop, go to Settings → Resources → WSL integration, enable your Ubuntu distro, and click Apply & Restart.
- From then on, work in a WSL terminal:
powershell wsl --set-default Ubuntu wsl ~
Everything after this point happens inside WSL, not in PowerShell. If you run the scripts from PowerShell they will tell you so and stop.
Cannot paste into the terminal? Right-click the window title → Properties → tick Use Ctrl+Shift+C/V as Copy/Paste.
macOS#
- Install the Xcode command line tools if you have not already:
sh xcode-select --install - Install Docker Desktop for Mac — pick the Apple Silicon or Intel build to match your machine.
- Launch Docker Desktop and wait for the whale icon to stop animating.
Apple Silicon works. The simulator runs under emulation for a few components and is slower than on an Intel Mac or a PC, but lap times are measured in simulated time, so a slow machine does not cost you points. See chapter 5.
Ubuntu / Debian Linux#
- Install Docker Engine.
- Add yourself to the
dockergroup so you do not needsudo:sh sudo usermod -aG docker "$USER" newgrp docker(Full instructions: post-install steps.) - Check it works:
sh docker run --rm hello-world
1.3 Build the image#
Pick the folder for your platform. The commands below use Linux; swap in
macos or windows as appropriate.
cd ~/Recruitment_Hackathon_2627
./install/linuxmacoswindows/setup.sh
shellThis takes 15 to 30 minutes the first time: it pulls the ROS 2 Jazzy base image and installs the simulator's stack, which includes JAX, OpenCV and Qt. Later builds are cached and take seconds.
If a build step fails, read the last few lines of output — the Dockerfile
checks its own work and says which step broke and why. ./install/linuxmacoswindows/setup.sh
--no-cache forces a clean rebuild.
1.4 Start the container#
./install/linuxmacoswindows/run.sh
shellYou land in a shell inside the container, at /hackathon. ROS is already
sourced.
For more terminals — and you will want three or four — open new host terminals and run:
./install/linuxmacoswindows/shell.sh
shellTo shut everything down:
./install/linuxmacoswindows/stop.sh
shellWhere the simulator window appears#
| Platform | Where |
|---|---|
| Linux | Directly on your desktop, via the host X server |
| Windows / WSL | Directly on your desktop, via WSLg |
| macOS | In a browser: http://localhost:8080/vnc.html → click Connect |
If nothing appears on Linux or WSL, fall back to the browser:
./install/linuxmacoswindows/run.sh --novnc
shellGPU#
If an NVIDIA GPU is visible, run.sh attaches it automatically and falls back
to CPU-only if Docker cannot. Force it either way with --gpu or --no-gpu.
The container is Python 3.12, so CUDA builds of PyTorch, JAX and CuPy do
install and run. The simulator itself stays on the CPU by design
(JAX_PLATFORMS=cpu) so that a judged run is reproducible; the GPU is there
for your code. See chapter 5.
1.5 Build the workspace and drive#
Inside the container:
cd /hackathon/race_ws
colcon build --symlink-install
source install/local_setup.bash
shell--symlink-install means Python edits take effect without rebuilding. You only
need to re-run colcon build after adding a new file or changing setup.py.
Now, in two separate container shells:
# Terminal 1 — simulator
ros2 launch roboracer_referee simulator.launch.py
# Terminal 2 — your car
ros2 run team_driver driver
shellThe car should set off — slowly, in a straight line, and into the first wall.
That is correct. The template in
race_ws/src/team_driver/team_driver/driver.py
is wiring, not a driver: it has no steering logic at all. Seeing it move is how
you know the image, the simulator, the workspace and the topics are all
working, and everything after that is yours to write — start with
chapter 4.
1.6 Check your environment is sane#
./scripts/verify_judging_env.sh
shellThis confirms the judging environment matches the official one. Run it before you submit; an entry with a modified referee or Dockerfile is not scored.
1.7 Troubleshooting#
docker: command not found, or "cannot connect to the Docker daemon"
Docker Desktop is not running, or on Linux your user is not in the docker
group. On Windows, check Settings → Resources → WSL integration.
external/f1tenth_gym is empty
Submodules are not checked out: git submodule update --init --recursive. If
that does nothing, you downloaded a ZIP — clone properly instead.
The build fails at apt-get or pip
Force a clean rebuild: ./install/linuxmacoswindows/setup.sh --no-cache. A half-cached
layer from an interrupted attempt is the usual cause.
No simulator window
Use --novnc and open http://localhost:8080/vnc.html. On Linux also check
echo $DISPLAY is set and try xhost +local:root.
RViz is black, or the window is blank Give it a few seconds on the first launch. If it stays black, software rendering usually fixes it:
LIBGL_ALWAYS_SOFTWARE=1 ./install/linuxmacoswindows/run.sh
shellThe car does not move Check something is publishing:
ros2 topic hz /drive
ros2 topic echo /drive --once
shellNo output means your driver node is not running or crashed — look at its terminal. The simulator does not step its physics until it receives the first drive command, so a frozen car usually means nothing is publishing.
ros2: command not found inside the container
You are in a shell that did not source ROS. Exit and use
./install/<os>/shell.sh, or run source /opt/ros/jazzy/setup.bash by hand.
Package 'team_driver' not found
The workspace is not built or not sourced:
cd /hackathon/race_ws && colcon build --symlink-install && source install/local_setup.bash
shellEverything is very slow
The simulator steps physics at 100 Hz and can fall behind on a laptop. This
does not affect your score — timing uses simulated time. Close RViz
(ros2 launch roboracer_referee simulator.launch.py rviz:=false) or run
evaluations with --headless to claw back speed.
Port 8080 is already in use
NOVNC_PORT=8081 ./install/linuxmacoswindows/run.sh
shellNext: 2. The simulator