Overview
What is the base station?
The Base Station is the ground control application used to monitor and control the rover during operation. It runs on an operator's laptop and provides a unified interface for live video feeds, navigation, task management, rover arm control, and sensor readouts.
It is built with Tauri v2 (Rust backend) and SvelteKit (TypeScript frontend), bundled into a native desktop application. Communication with the rover happens over UDP using Protocol Buffers (protobuf) for message serialisation.
Tech Stack
Layer | Technology |
Desktop framework | Tauri v2 |
Frontend | SvelteKit + TypeScript |
Backend | Rust |
Build tool | Bun + Vite |
Video streaming | GStreamer (MJPEG) |
Rover communication | UDP on port 9000 |
Serialisation | Protocol Buffers |
3D model rendering | (see Model Viewer) |
System Architecture
At a high level, the app has three layers:
The frontend communicates with the Rust backend exclusively through Tauri commands (called via invoke()). The backend owns the UDP socket and all rover communication — the frontend never talks to the rover directly.
Project structure
ERC-SOFTWARE-BASESTATION/
├── src/ # SvelteKit frontend
│ ├── lib
│ │ ├── components/ # Reusable UI components
│ │ ├── css/ # css code
│ │ ├── proto/ # Auto generated types from protobuffers
│ │ └── stores/ # Svelte stores for reusable data across components
│ ├── routes/ # Page routes
│ └── state.svelte.js # Global reactive state
├── src-tauri/ # Tauri + Rust backend
│ ├── src/
│ │ ├── commands/ # Tauri command handlers
│ │ └── network/ # UDP service + listener
│ ├── proto/ # Protobuf definitions
│ ├── models/ # Bundled 3D model files
│ ├── build.rs # Handling of protobuffers during build
│ ├── Cargo.toml # Dependencies
│ └── tauri.conf.json # Settings, configuration and permissions
├── fake_camera_gstreamer/ # GStreamer-based test video source
└── static/ # Static frontend assets