Skip to content

Visualising GNSS (Global Navigation Satellite System) data at QUB's Cyber Physical Systems Lab

License

Notifications You must be signed in to change notification settings

autumn-mck/gnss-war-room

Repository files navigation

GNSS and Precision Time War Room

A space-based positioning, navigation, and timing (PNT) dashboard heavily inspired by the movie WarGames (1983).

Thanks to Dr. David Laverty for supervising this project - for providing such a fantastic idea, and allowing me to have so much fun with it.

Running locally on a single display

Running at the Cyber Physical Systems Lab, Queen's University Belfast

Video of it in action: https://www.youtube.com/watch?v=4Qw9tWjHihw

Setup

Create a virtual environment: python -m venv .venv and activate it.

On Linux: source .venv/bin/activate On Windows: .venv\Scripts\Activate.ps1

Install dependencies: pip install -r requirements.txt
Copy config.example.json5 to config.json5, then edit as needed.

If running MQTT broker locally

Start up the container for the MQTT broker: podman compose up (Note: docker will also work)

Now, while the container is running, set a password for publishing to the broker: podman exec mosquitto mosquitto_passwd -b /etc/mosquitto/passwd gnssreceiver <password>, replacing <password> with a password of your choosing (e.g. "Joshua"). Create a file called .env in the root folder of the project, with the contents GNSS_PUBLISHER_PASSWORD=<password>.

Finally, restart the broker container for it to read the new password.

If running MQTT on a remote server

Edit config.json5 and set mqttHost to the hostname of the remote server. You will also need to set the GNSS_PUBLISHER_PASSWORD environment variable to the password for the gnssreceiver user. (See example configuration in the ./mosquitto folder)

Running

Desktop UI

To display the main PyQt GUI, run python main.py. To stop it, either close all windows manually, or press Ctrl+c on the terminal you ran it from.

On all windows, F toggles fullscreen.

Map controls:

  • WASD: move map (hold shift to move faster)
  • Q: zoom in
  • E: zoom out
  • T: Toggle satellite trails (may not be visible if application just started)
  • Z: rotate between scale methods (constant scale, scale to fit width, scale to fit height, fit to window)
  • X: toggle country borders
  • C: toggle cities
  • Arrow keys: move network key
  • K: toggle network key key

SNR Chart:

  • S: toggle sorting between by network, by signal to noise ratio, and by angle of elevation
  • U: toggle displaying untracked satellites (those not used to obtain positioning data)

Globe:

  • R: toggle rotation
  • Scroll: zoom in/out
  • Click: pan camera

Web UI

To run the web frontend: sh webStart.sh (will default to port 2024)

Sending data

To send live data to the system, modify config.json5 to set gnssSerialPort to the correct serial port, and run python -m receiver.publishLive.

For prerecorded samples that can be replayed to test the system at any time using python -m receiver.publishLog, see https://github.com/autumn-mck/gnss-nmea-samples

This can be set to publish faster than real-time, i.e. using GNSS_SPEED_MULT=20 python -m receiver.publishLog

This project is licensed under GPLv3, with some exceptions:

About

Visualising GNSS (Global Navigation Satellite System) data at QUB's Cyber Physical Systems Lab

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •