Two used Traxxas trucks hijacked at the ESC level become an autonomous pursuit team. Each truck carries an ESP32 (PWM + failsafe), a Raspberry Pi 4, and a camera. Trucks localize by reading printed AprilTags on the walls (solvePnP against a surveyed map), avoid obstacles with a local floor-segmentation reflex, and stream frames to a GPU laptop running ReID person tracking — a judge clicks one stranger on the dashboard and the pack coordinates to corner THAT person in a figure-8 arena ("seal the waist, sweep the lobe"). A QNX node arbitrates safety (speed clamp, geofence, heartbeat, e-stop) and runs an on-device TFLite cone detector for the QNX prize track. Private travel-router LAN, zero internet, zero cloud.
Each person implements their own modules — no writing code in someone else's directory.
| Owner | Modules | Directories |
|---|---|---|
| Talia | ESP32 firmware, Pi↔ESP serial link, truck wiring/trim, QNX safety gateway (C) | firmware/esp32_car/, qnx/gateway/ |
| Angelo | Camera capture/calibration, AprilTag localization, Kalman, waypoint following (pure pursuit + speed law), floor reflex | robot/ |
| Kai | ReID pipeline (YOLO + BoxMOT BoT-SORT + OSNet), click-to-lock, persistent target memory, sighting fusion | laptop/perception/ |
| [repo owner] | World-model schema, simulator, coordinator (roles/pursuit logic), dashboard/UI, QNX TFLite cone model + Pi export | common/, laptop/sim/, laptop/coordinator/, laptop/dashboard/, qnx/sentry/, models/ |
Private LAN on the TL-WR1502X travel router, subnet 192.168.1.x.
Phone-hotspot fallback = edit config/network.yaml only — no code changes.
| Host | IP | Notes |
|---|---|---|
| GPU laptop | 192.168.1.2 | wired |
| QNX safety node | 192.168.1.5 | |
| Car 1 Pi | 192.168.1.11 | |
| Car 2 Pi | 192.168.1.12 | |
| ESP32 car 1 | 192.168.1.21 | dormant limp-home |
| ESP32 car 2 | 192.168.1.22 | dormant limp-home |
| Port | Purpose |
|---|---|
| 9001 | car status |
| 9002 | camera frames |
| 9003 | goals / waypoints |
| 9005 | QNX heartbeat (10 Hz) |
| 9006 | e-stop |
| 8080 | dashboard |
- Clone the repo.
- Read
CLAUDE.mdtop to bottom — it holds the verified bench facts and every agreed constant. Don't re-derive what's already proven there. - Work in your directory (table above).
- Branch as
name/topic(e.g.kai/reid-lock); merge tomainoften.mainalways runs the last working demo. - Constants live in
config/— zero magic numbers in code. - Shared data shapes get agreed at Friday kickoff and recorded in
docs/schema.mdbefore parallel work starts (a draft proposal is there — adopt, edit, or replace it as a team).
- No project code before Fri 10 PM. All code is written inside the hacking window (Fri 10 PM → Sun 9:30 AM). This repo pre-dates the window with structure, configs, and docs only.
- Commit small and often; tag milestones
m1-drives,m2-pursuit,m3-demo,FREEZE. - AI use is disclosed per event rules.
- Pis have no internet on robot-net — code deploys via the rsync script in
tools/(written in-window).
- Router
- QNX safety node
- Car Pis
- Laptop (perception + coordinator)
- Dashboard
- M1 — ~Fri 2 AM: one truck drives to a clicked point via tags (exercises every layer once — if it slips, cut scope, don't push).
- M2 — Sat midday: two trucks + roles corner the ReID-locked human, heartbeat inline.
- M3 — Sat dinner (SACRED): full demo recorded on video.
- Stretch, in order: dashboard polish → UNO Q swap (90-min box) → junction cam → search patrols.
- Freeze T-3 h before judging; three rehearsals; pitch leads with the engineering, ends with the kill-the-coordinator stunt.