A full-stack web application for autonomous rover control and monitoring, built as part of the CEG4912/4913 capstone project. This platform provides real-time telemetry, autonomous navigation, manual control, and pothole detection capabilities through a modern web interface communicating with ROS2-based rovers.
This project is part of a capstone initiative to develop an autonomous rover system for infrastructure inspection. The web interface serves as the mission control center, enabling operators to plan routes, monitor rover status, and analyze collected data in real-time.
Project Wiki: https://github.com/ByteSizedRobotics/rover-ui/wiki
- ๐ User Authentication - Secure login and registration system
- ๐ค Rover Management - Monitor and manage multiple rovers
- ๐บ๏ธ Autonomous Navigation - Plan and execute waypoint-based missions
- ๐ฎ Manual Control - Real-time control with live camera feeds
- ๐ก Live Telemetry - GPS, IMU, battery, and sensor data visualization
- ๐จ Pothole Detection - AI-powered infrastructure analysis and tracking
- ๐ Path History - Review past missions and collected data
- ๐น Triple Camera Support - CSI and USB camera streams via WebRTC
- ๐ LiDAR Visualization - Real-time obstacle detection and mapping
- Frontend: SvelteKit 5 (Runes), TailwindCSS, DaisyUI
- Backend: Node.js, PostgreSQL, Drizzle ORM
- Robotics: ROS2 Jazzy, WebRTC, rosbridge
- Mapping: Leaflet
- Deployment: Docker, Docker Compose
- Node.js (v18+)
- Docker & Docker Compose
- PostgreSQL (or use Docker setup)
The easiest way to run the entire stack with database and sample data:
docker compose upNavigate to http://localhost:3000 and register a new user account.
To stop:
docker compose down # Stop services
docker compose down -v # Stop and remove volumes-
Start the database:
docker compose up -d postgres
-
Install dependencies:
npm install
-
Set up environment variables: Create a
.envfile:DATABASE_URL="postgres://root:mysecretpassword@localhost:5432/local"
-
Start the dev server:
npm run dev
-
Navigate to the URL printed in terminal (typically http://localhost:5173)
npm run dev # Start dev server
npm run build # Build for production
npm run preview # Preview production build
npm run lint # Check code quality
npm run format # Format code with Prettiernpx drizzle-kit studio # Open Drizzle Studio database viewer
npm run db:push # Push schema changes
npm run db:migrate # Run migrationsnpm run test # Run all tests
npm run test:unit # Run unit tests
npm run test:e2e # Run E2E tests with Playwrightdocker compose up -d # Start in detached mode
docker compose logs -f # Follow logs
docker compose down -v # Stop and remove everythingThe application communicates with rover hardware through ROS2 Jazzy. Key integration points:
- rosbridge WebSocket - Real-time bidirectional communication
- WebRTC - Low-latency camera streaming
- Topics: GPS (
/fix), IMU (/imu/raw), LiDAR (/scan), commands (/command), etc.
Configure the rover connection in src/lib/ros2Config.ts.
ROS2 Documentation: https://docs.ros.org/en/jazzy/
- Project Wiki: github.com/ByteSizedRobotics/rover-ui/wiki
- Docker Hub: hub.docker.com/r/bytesizedrobotics/rover-ui
- Database Schema:
drizzle/schema.sql
src/
โโโ lib/
โ โโโ components/ # Reusable Svelte components
โ โโโ server/ # Backend logic and database
โ โโโ ros2CommandCentre.ts # ROS2 WebSocket client
โ โโโ ros2Config.ts # ROS2 connection settings
โโโ routes/ # SvelteKit pages and API routes
โ โโโ api/ # REST API endpoints
โ โโโ rovers/ # Rover management pages
โ โโโ manual-ctrl/ # Manual control interface
โ โโโ map/ # Mission planning
โโโ app.html # HTML template
docker build --build-arg DATABASE_URL="postgres://root:mysecretpassword@localhost:5432/local" \
-t bytesizedrobotics/rover-ui .docker run -e DATABASE_URL="postgres://..." \
-e ORIGIN=http://localhost:3000 \
--network rover-ui_default \
-p 3000:3000 \
bytesizedrobotics/rover-uiNote: The ORIGIN environment variable is required for server-side functionality.
GitHub Actions automatically builds and publishes Docker images to Docker Hub when a new release is published.
Developed for CEG4912/4913 (4th year Computer Engineering Capstone Project)
Built by ByteSized Robotics capstone team.