A modular Python ground-station application for small rocketry and telemetry experiments.
RocketLog provides:
- Live video preview via GStreamer
- Live telemetry display (currently simulated)
- Session recording (video + telemetry packaged together)
- A modern “glass cockpit” UI (Qt / PySide6)
- Designed to run both on a desktop Linux machine and a headless / kiosk Raspberry Pi
- Clean architecture ready for physical hardware (LEDs, 7-segment displays, buttons)
This repository is structured as a proper Python package and is intended to be installable directly from source.
- UI: Qt Widgets (PySide6)
- Video: GStreamer via
gi.repository - Telemetry: simulated source (pluggable later)
- Recording: session-based,
.rocketlogarchive
- Linux (tested on Arch Linux)
- Wayland or X11
- Python 3.10+
Installed via pip install -e .:
PySide6(Qt UI)
Also required at runtime and must be installed via OS packages (not pip):
python-gobject/python3-gi(providesgi)- GStreamer 1.0 runtime + plugins (see distro-specific package lists below)
If you see an error like ModuleNotFoundError: No module named 'gi', you are missing the OS-level GI/GStreamer packages.
RocketLog uses GStreamer via Python GObject Introspection (gi.repository). Those bindings are typically installed via your OS package manager (not pip).
sudo pacman -S --needed \
gstreamer \
gst-plugins-base \
gst-plugins-good \
gst-plugins-bad \
gst-plugins-ugly \
gst-libav \
python-gobject \
gobject-introspectionsudo apt update
sudo apt install -y \
python3-venv python3-pip \
python3-gi python3-gst-1.0 gir1.2-gstreamer-1.0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libavsudo apt update
sudo apt install -y \
python3-venv python3-pip \
python3-gi python3-gst-1.0 gir1.2-gstreamer-1.0 \
gstreamer1.0-tools \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-ugly \
gstreamer1.0-libavSome GStreamer plugin packages (notably -ugly and -libav) may require RPM Fusion.
# Enable RPM Fusion (recommended for full codec/plugin coverage)
sudo dnf install -y \
https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm \
https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm
sudo dnf install -y \
python3-pip python3-virtualenv \
python3-gobject \
gstreamer1 \
gstreamer1-plugins-base \
gstreamer1-plugins-good \
gstreamer1-plugins-bad-free \
gstreamer1-plugins-ugly \
gstreamer1-libavgit clone https://github.com/rinickolous/rocketlog
cd rocketlog
# GI bindings are installed system-wide, so the venv must see system packages:
python3 -m venv .venv --system-site-packages
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .After install:
rocketlogOr run as a module:
python -m rocketlogThis repo also contains two ESP-IDF projects:
firmware/receiver: telemetry receiver/simulator (ESP32-S3)firmware/transmitter: minimal transmitter stub (ESP32-S3)
- ESP-IDF installed (tested with ESP-IDF v5.5.2)
justinstalled for convenient one-liners (optional but recommended)
Arch Linux:
sudo pacman -S --needed justUbuntu / Debian / Raspberry Pi OS:
sudo apt update
sudo apt install -y justFedora:
sudo dnf install -y justIf just receiver-flash fails with a serial/monitor error, check the baud in firmware/flash.toml.
ESP-IDF defaults to 115200 for monitor output unless you changed the project config.
The Python ground-station telemetry reader also defaults to the receiver settings in firmware/flash.toml.
All commands run from the repo root.
just app-build
just app-run
just receiver-build
just receiver-flash
just receiver-burn
just transmitter-build
just transmitter-flash
just transmitter-burnSerial ports and baud rates are configured in firmware/flash.toml.
You should edit it once for your machine (example):
[receiver]
port = "/dev/ttyACM0"
baud = 115200
[transmitter]
port = "/dev/ttyACM1"
baud = 115200| Key | Action |
|---|---|
R |
Start recording |
S |
Stop recording |
Space |
Toggle record / stop |
F |
Toggle fullscreen |
Ctrl+Q |
Quit application |