WorldWide Rover
HackUMass XII — Best Embedded System. Autonomous, globally accessible rover: web interface for real-time control, maze navigation, obstacle avoidance. Python/Flask backend, Raspberry Pi, Arduino, React, ngrok.
View on GitHub →Overview
WorldWide Rover is an autonomous rover with maze and obstacle avoidance. Users control it in real time via a web interface (anywhere in the world). My role: server and backend—Flask API on the Raspberry Pi, serial communication to the Arduino for motor control, and integration with the web frontend via ngrok.
Description
Flask server and /move API The backend exposes a
/move endpoint (POST) that accepts a direction (f, b, l, r, s for forward, back, left, right, stop). Request handling uses an action lock and a stop_event: when a new direction is requested, the server signals any in-progress action to stop, briefly waits, then sets the new direction and clears the stop flag. For stop (s), it sends the command once and returns; for move commands, it loops send_command(current_direction) with a 1 s delay until stop_event is set (e.g. user hits another direction). This keeps the rover responsive to new commands from the web UI.Serial and Arduino The Pi sends commands to the Arduino over UART/serial (e.g. 9600 baud). The Arduino reads a character (
f/b/l/r/s), drives motor pins (IN1–IN4 via an H-bridge or motor driver), and the rover moves. Serial connection is opened at server startup and closed on shutdown (e.g. atexit). Python uses a serial library (e.g. pyserial); the Pi also uses RPi.GPIO where needed for local signals.Integration and deployment The web frontend (React) calls the Flask server; the server was exposed via ngrok so users worldwide could reach the Pi without port-forwarding. AWS hosted the frontend. Challenges the team tackled included latency for real-time feel, power management (12 V for motors), and reliable maze/obstacle avoidance with sensor calibration.
Demo
View live demo →Tech & tools
- Python
- Flask
- Raspberry Pi
- Arduino
- React
- ngrok
- AWS
- RPi.GPIO
- UART
Highlights
- HackUMass XII — Best Embedded System winner
- Server and backend: Flask API, command handling, serial to Arduino
- Real-time remote control with ngrok for global access
- Team: Jacob, Elizabeth Peter, Ken Su, Khushii Shetty
More projects
tinyTemp
Temperature display on ATtiny85: reads sensor via ADC and shows °F and °C on SSD1306 OLED (ECE 304, Spring 2024).
Buffet
Trading AI: paper and live trading on Alpaca, strategy optimization, signal processing, and Qiskit-based quantum optimization. Python, TensorFlow, Alpaca API.
Pong on Assembly
Interactive Pong on FPGA (Duke ECE 550). Hardware VGA/PS2 implementation plus full assembly version (pong.s) for custom 32-bit processor ISA.
Custom Single-Cycle 32-Bit Processor
Custom ISA and single-cycle datapath in Verilog; synthesis-ready design used as the execution target for Pong assembly (Pong-on-Assembly repo).
Baretag iOS App
iOS app (Swift) for real-time device tracking and management; Flask/Ngrok backend and 3D localization validated in Blender.
Multilateration 3D Positioning
3D multilateration and localization algorithms with Python implementation and Blender-based simulation; feeds into Baretag device positioning.
RISC-V Encryption
Low-level encryption on RISC-V: assembly and C implementations for algorithms and analysis on a RISC-V toolchain.
PUF Tester
Hardware tooling for testing and characterizing Physically Unclonable Functions (PUFs); supports security and fingerprinting use cases.
tinyTemp
Temperature display on ATtiny85: reads sensor via ADC and shows °F and °C on SSD1306 OLED (ECE 304, Spring 2024).
Buffet
Trading AI: paper and live trading on Alpaca, strategy optimization, signal processing, and Qiskit-based quantum optimization. Python, TensorFlow, Alpaca API.