An Open Source Program that allows users to interact with a Spacecraft in a lab environment, pre-launch.

Open-Source-Satellite, updated 🕥 2022-05-16 13:31:08


An Open Source Program that allows users to interact with a Spacecraft in a lab environment, pre-launch.

For those who are new to the Space Industry and it's terminology, please refer to the Background section. Also refer to the OSSAT Glossary for explanations of any terminology.
Otherwise, head to User Setup if you want to use the software, or Development Setup if you want to develop.

NOTE: This software is useful for lab testing a spacecraft, pre-launch. Different software would be used to communicate with the spacecraft in orbit. The communications protocol is not suitable for in-orbit communication, see The Spec for further details.



Once a Spacecraft is in flight, operators will need to communicate with it. This is normally facilitated via Ground Stations located around the globe that use a radio link to send and receive packets of data.

During a typical mission, a Spacecraft will send stats down to the ground, which we call Telemetry. This could be temperature, battery charge, sensor readings, or any data point that you can think of. However, the Spacecraft would usually only transmit the most important Telemetry by itself due to limitations with the radio link. A Ground Station can request a particular Telemetry point by sending a Telemetry Request.

The Ground Station doesn't just monitor a Spacecraft's Telemetry, an operator can send commands to tell it to do things. This could be switching on a particular system, turning towards the Sun to charge batteries, synchronising the on-board time to the Ground or a variety of mission specific functions. These are facilitated by something called a Telecommand.

The Ground Station also needs to upload and download files. This could be downloading images taken by a Spacecraft camera, or uploading an operating schedule or code update to the Spacecraft.

Mercury GS Overview

Mercury GS fulfils the need to send Telemetry Requests, Telecommands and to display the Telemetry generated by the Spacecraft. It does this using a simple (non-flight) communications protocol. It also includes functions to synchronise the time and to upload and download files.

It represents a simple solution to test spacecraft functions without reliance on the complex protocols available for spacecraft communication.

In the future, we are hoping to integrate the Mercury GS functions into a Continuous Integration environment that will test the spacecraft functions continuously throughout the development.
Maybe you could help with this development?


The manual, which describes how to use Mercury GS, is located in the repo here.

NOTE: This initial version of Mercury GS only fully supports Windows. Linux and MacOS support is expected after further development.

Setup Guides

User Setup

If you wish to run Mercury GS as a User, follow these steps.

  1. Install Python3.
  2. Clone the repository onto your machine. Click the "Clone" button on the Github page.
  3. In the scripts folder are a number of scripts used to build the Python environment and run Mercury GS.


Run the batch file build_env.bat, you only need to do this once. Then execute run_env.bat when you want to run MercuryGS.


Run the shell script, you only need to do this once. Then execute when you want to run MercuryGS.

  1. To communicate with Mercury GS via a terminal, emulating the link to a Spacecraft, follow the steps in Serial Comms Setup.

Development Setup

If you wish to develop Mercury GS, follow these steps.

  1. A minimal Python3 installation is required, it is recommended to use virtualenv for clean Python installation and then install PyQt bindings. You can either run the scripts as shown in User Setup or manually like so:

  2. Clone the repo and navigate to its directory.

  3. Create a new virtual environment. bash python -m venv MercuryGSEnv

  4. Activate the virtual environment.

For WINDOWS: batch call MercuryGSEnv\Scripts\activate.bat For LINUX/MAC: bash source MercuryGSEnv/bin/activate 5. Install the required packages. bash pip install -r requirements.txt 6. Make sure the following packages have been installed. ```bash


python3 -m pip install PyQt5


python3 -m pip install pyserial


python3 -m pip install PyQt5-tools


python3 -m pip install QtPy ``` Another solution is to install a full Python IDE like Pycharm and install the packages through its package manager.

NOTE: For further information, design and requirements. You can find the Specification for Mercury GS here.

Serial Comms Setup

The low level drivers talk over a COM port that is configurable in the GUI. To emulate a connection with a SpaceCraft we must spoof a connection between two ports.
Download a program like HHD Virtual Serial Port Tools, create a virtual pair between two ports (for example COM1 and COM2), and then open a terminal program like TeraTerm to listen on one of them (COM2 for example). Settings are default 9600 baud, 8 data bits, 0 parity bits, 1 stop bit. The baudrate is configurable in the GUI on the "CONFIG" tab.

NOTE: This solution is only for Windows.

Creating Test Frames

Frames can be sent to MercuryGS via a terminal, these are located in the Test Frames folder.
HHD Free Hex Editor was used to create these frames.

Designing the GUI

If you wish to edit the GUI, you will need Qt Designer.
For Qt Designer install, it's suggested to download the package from here, it is used to edit the UI layout - platform-comms-app.ui.

Building the GUI

To use the qt ui file from the Qt designer, we need to build it to a python file.
You can do that by running: pyuic5 platform-comms-app.ui -o, or by running the build script from the Scripts directory.
The built code of the current version of Mercury GS is included in the repo, so you will only need to rebuild the GUI if you make changes to it.
To run the files built by the last step, run "" either via command line or through a Python compatible IDE.


Mercury GS includes other open source software, for licensing details, see here.

Get Involved

If you wish to contribute directly to the development of Mercury GS, have a look at the existing Github issues and register here.


Automatic Serial Port Detection

opened on 2022-03-02 12:26:54 by KISPE-Jamie

Description: Ability to detect open serial ports and set the drop down menu in the Config tab to the available ports. Demo: 1. Run Mercury. Navigate to Config tab. Observe open ports in drop down menu. 2. Follow Demo 1, then open a new port. Observe the new port added to the list. 3. Follow Demo 1, then close an open port. Observe the port disappear from list.

Added the adafruit rfm69 dependency to the pip requirements list

opened on 2022-01-04 03:09:20 by 15jgme

Hi, really interesting project. I think that the current pip requirements list is missing the adafruit rfm69 package required by, I noticed as I was getting the workspace setup. Since version 2.1.5 of the adafruit rfm69 package was released around the time the rfm69 code was pulled into main, I added that to the requirements list.

Automatic Baud Rate Detection

opened on 2021-11-10 17:13:16 by KISPE-Jamie

Description: Ability to detect baud rate of incoming datastream and synchronise to it. Requirement: 00025 Demo: 1. Send Telemetry Response via Tera Term at a baud rate that differs from the one configured in Mercury GS. 2. Observe the baud rate in Mercury GS synchronise.

File Download

opened on 2021-11-10 16:52:16 by KISPE-Jamie

Description: Ability to download files to specified destination, following a Download Request message. Requirement: 00220, 00230 Demo: 1. Send Download Request. 2. Observe Request on Tera Term. 3. Transmit file via Tera Term. 4. Observe file saved to destination specified in Download Request.

File Upload

opened on 2021-11-10 16:41:34 by KISPE-Jamie

Description: Ability to upload Files to the Spacecraft. With a button to abort the upload. Requirement: 00210, 00215 Demo 1: 1. Upload file 2. Observe file displaying in Terminal program.

Demo 2: 1. Upload file. 2. Press abort function before upload completes. 3. Observe Upload abort.

Logging Telemetry to File.

opened on 2021-11-10 16:37:28 by KISPE-Jamie

Description: Log Telemetry to a file. With a check box to enable/disable logging. Requirement: 00175, 00176 Demo: 1. Send Telemetry Responses via Tera Term 2. Observe Telemetry displayed on Mercury GS, but no file being created. 3. Tick box to enable logging. 4. Send Telemetry Responses via Tera Term. 5. Observe file being written to with Telemetry data.


MercuryGS Release 2.1.1 2021-11-11 10:06:52

Release 2.1.1 Prepares MercuryGS for being made Open Source. A manual has been created, as well as a fully fleshed out Readme. Changes have also been made to improve stability, speeds and to squash some bugs.

What's Changed

  • Fix, can now run by @dennisolien in

Full Changelog:

MercuryGS Release 2.1 2021-09-08 15:44:51

Release 2.1 Integrates Reception of Telemetry Request Rejection Response Frames and displays the channel along with the rejection code (reason) on the GUI.

MercuryGS Release 1.0 2021-07-05 13:32:39

This is Release 1 of Mercury GS.

To get going with this release. Please follow the Setup section of the User Guide in the Readme.

For documentation describing this release. See the Mercury GS Spec.

Open Source Satellite Programme
GitHub Repository

spacecraft ground-station cubesat satellite space microsatellite microsatellites testing telemetry open-source