josh wu | ← all projects

toyota fleet rover
autonomous rover built for toyota innovation challenge — coordinated fleet navigation in a shared arena

description

Built for the 2026 Toyota Innovation Challenge at Toyota Motor Manufacturing Canada (TMMC), this project tackled the Autonomous Fleet Coordination track: deploy two robots into an enclosed arena, have them collaboratively search for a target item (a 3D-printed car door), retrieve it without colliding, and return it to a drop-off point.

The rover runs custom firmware on a TETRIX PRIZM controller (Arduino-based) that handles waypoint navigation via a turn-then-drive state machine, encoder-based odometry, and real-time ultrasonic obstacle detection. A central Python arbiter on a laptop manages both robots over TCP, dispatches path assignments, and displays live telemetry — pose, heading, path progress, and sensor readings — in a Tkinter dashboard. Robots communicate their identity, state, and position back upstream as newline-delimited JSON at 250 ms intervals, letting the arbiter prevent spatial conflicts between fleet members.

Wireless operation was achieved by attaching an ESP32 to each rover and porting the serial firmware to TCP, giving the fleet full wireless autonomy while retaining the same arbiter protocol.

how it works
  • Firmware (Arduino/PRIZM) — motion state machine cycles through TURN and DRIVE primitives toward each waypoint, updating x/y/θ from wheel encoder deltas. Accepts compact opcodes and JSON commands (pause, resume, stop, gripper toggle, path assignment).
  • Fleet arbiter (Python) — central server accepts robot connections, tracks each robot's state, and plans grid-based coordinated traverses on a 4 m × 4 m arena at 10 cm resolution. Prevents two robots from occupying the same cell simultaneously.
  • Telemetry bridge (Python client) — runs on each robot's laptop, bridges the PRIZM over serial (or ESP32 over TCP) to the arbiter, forwarding telemetry upstream and relaying commands back down.
  • Wireless extension (ESP32) — port of the wired firmware that connects to the arbiter over Wi-Fi, removing the USB tether for fully untethered fleet operation.
tech stack
ArduinoTETRIX PRIZMPythonESP32TCP/IPOdometryUltrasonic SensingTkinterFleet Coordination