The Ulysses Ground Control Station is a cross-platform telemetry and control application built with Qt 6, designed for UBC Rocket's development and mission operations.
It provides real-time serial communication with RFD900x radio modems, sensor telemetry decoding, 3D visual orientation, system alerts, and modular UI panels optimized for engineering workflows.
- One COM port handles both RX and TX
- Automatic RX pause during TX to prevent echo/loopback issues
- Ideal for bench testing with a single modem
- Dedicated RX and TX ports
- Per-port capabilities:
- Separate baud settings
- Periodic command sender (1–200 Hz)
- Manual send panel
- Real-time text logging
- Independent connect/disconnect
- Automatic scanning of COM ports
- FTDI + CP210x radio-adapter detection
- AT-mode probing (
+++guard sequence) - OS error reporting displayed in UI
- Prevents assigning same port to both P1 and P2
Incoming telemetry is 14-field CSV: x, y, z, roll, pitch, yaw, pressure, altitude, raw_angle, filtered_angle, velocity, temperature, signal, battery
Decoded into:
- IMU: linear accel (x,y,z) + gyro (roll, pitch, yaw)
- Barometer: pressure, altitude
- Kalman: raw angle, filtered angle
- Telemetry: velocity, temperature, signal, battery
Each value updates QML-bound properties via SensorDataModel.
Built with Qt Quick 3D:
- Real-time orientation driven by IMU data
- Euler rotation mapped for Qt’s Y-up coordinate system
- Axis helper lines
- WASD camera movement
- Clear visualization of rocket tilt/roll
Using AlarmReceiver, incoming text is classified into:
- ERROR
- WARNING
- SUCCESS
Displayed visually as alert chips in the System Alert panel.
| Component | Description |
|---|---|
SerialBridge |
Serial I/O layer, port scanning, RX/TX, modem detection |
CommandSender |
Manual & periodic command transmission |
AlarmReceiver |
Classifies incoming text messages |
SensorDataModel |
Parses CSV telemetry, exposes data to QML |
| File | Purpose |
|---|---|
Panel_Control.qml |
Serial configuration + TX console |
Panel_IMU_Data.qml |
IMU vector display |
Panel_Baro_And_Telemetry.qml |
Pressure, altitude, velocity, temp |
Panel_Rocket_Visualization.qml |
3D visualization of rocket |
Panel_System_Alert.qml |
Error/Warning/Success logs |
Items/ |
Reusable UI components |
/ ├── src/ │ ├── SerialBridge.h/.cpp │ ├── CommandSender.h/.cpp │ ├── AlarmReceiver.h/.cpp │ ├── SensorDataModel.h/.cpp │ └── main.cpp │ └── qml/ ├── Panel_Control.qml ├── Panel_IMU_Data.qml ├── Panel_Baro_And_Telemetry.qml ├── Panel_Rocket_Visualization.qml ├── Panel_System_Alert.qml ├── Items/ └── MainWindow.qml
- Qt 6.6+ (must include Qt Quick and Qt Quick 3D)
- CMake (Qt Creator recommended)
- Windows / macOS / Linux
File → Open Project → CMakeLists.txt Configure Kits → Desktop Qt 6.x.x Build → Run
cmake -B build -S .
cmake --build build
./build/ulysses-ground-control # or .exe on Windows