The Galmon GNSS Monitoring Project

Welcome to the Galmon project!

Our goals are to monitor the major Global Navigation Satellite Systems, including GPS, GLONASS, Galileo and BeiDou, but also Space Base Augmentation Systems like WAAS, EGNOS and GAGAN.

Galmon is an open source & open data project with a community of over 30 station operators running more than 50 receivers. Some history of the project may be found in the second part of this blog post, and on this page on the big Galileo 2019 outage.

Galmon strives to be helpful for every GNSS user (aren’t we all?) but also for research institutes, GNSS vendors and GNSS operators themselves. We are not affiliated with any GNSS supplier. The project is headed by Bert Hubert, who can be contacted on bert@hubertnet.nl.

Why

The world depends on properly functioning GNSS, yet the operations of most of these systems are more or less intransparent. They are run by military departments and/or complex arrangements of defense contractors. These tend to be shy about sharing internals of how well they are doing.

The internet and the availability of stunningly capable chipsets has made it possible to create a monitoring network that spans the world & successfully receives almost every bit transmitted by the close to 100 navigation satellites currently in orbit.

Although earlier efforts exist, these mostly monitored how well receivers were doing - making graphs of observed positioning accuracies. While this is exceptionally useful (since determining position is what this is about), our effort is aimed at not determining the performance of receivers - we want to see how well the satellites are doing and have a record of every message they transmit.

It should be acknowledged that in our haste to get this going, we missed the fact that data was already being shared by academic networks, more about which below.

Where we are

We have nearly 247 coverage of Galileo and GPS. We need help to:

  • Complete coverage for GLONASS and BeiDou
  • Improve our coverage west of Southern South America (Chile, Argentina)
  • Increase number of observers so we can do accurate orbit measurements using low-cost receivers.

What we offer

  • A website with coverage maps: https://galmon.eu/
  • Twitter feed with GNSS fun facts & updates: @GalileoSats
  • Twitter feed with automated live updates of GNSS events (outages, satellite health, clock & orbit discontinuities): @GNSS_Changes.
  • Access to raw GNSS data
  • Access to a graphing server (if you contribute data or expertise)
  • A fun IRC channel, #galileo on irc.oftc.net, or the web gateway

How to join in

To join in you need a computer (for example, any Raspberry) running UNIX (Linux, FreeBSD, OpenBSD and OSX work) plus currently a U-blox 8 or U-blox 9 chipset. Navilock NL-8012U receiver works really well, as does the U-blox evaluation kit for the 8MT. In addition, many stations have reported success with this very cheap AliExpress sourced device. The best and most high-end receiver, which does all bands, all the time, is the Ublox F9P, several of us use the ArdusimpleRTK2B board.

Almost all stations run on a Raspberry Pi, with all versions being supported. Raspberry Pi Zero W works very well for example. Make sure your Raspberry runs Raspbian Buster. It is possible to get things going on older versions but it is more work.

Once you have a computer ready, head to our GitHub Page and follow the installation instructions.

The brief variant for Ubuntu/Debian/Raspbian:

sudo apt-get install protobuf-compiler libh2o-dev libcurl4-openssl-dev libssl-dev libprotobuf-dev \
libh2o-evloop-dev libwslay-dev libncurses5-dev libeigen3-dev
git clone https://github.com/ahupowerdns/galmon.git --recursive
cd galmon
make ubxtool navdump
./ubxtool --port /dev/ttyACM0 --station 0 --galileo --gps --glonass --stdout | ./navdump

This should lead to output that looks like this more or less:

Wed, 08 Jan 2020 14:03:44 +0000 swVersion: ROM CORE 3.01 (107888)
Wed, 08 Jan 2020 14:03:44 +0000 hwVersion: 00080000
Wed, 08 Jan 2020 14:03:44 +0000 Extended info: FWVER=SPG 3.01
Wed, 08 Jan 2020 14:03:44 +0000 Extended info: PROTVER=18.00
Wed, 08 Jan 2020 14:03:44 +0000 Extended info: GPS;GLO;GAL;BDS
Wed, 08 Jan 2020 14:03:44 +0000 Extended info: SBAS;IMES;QZSS
Wed, 08 Jan 2020 14:03:44 +0000 Serial number f964bc2f12
Wed, 08 Jan 2020 14:03:44 +0000 Entering main loop
Wed, 08 Jan 2020 14:03:49 +0000 src 0 (fix: 3) currently receiving: 2,4@1 
Wed, 08 Jan 2020 14:03:49.0002 +0000 src 0 imptow 309845 gal inav wtype 6 for 2,4,1 pbwn 0 pbtow 309845 tow 309845 a0 0 a1 0 t0t 72 dtLS 18
Wed, 08 Jan 2020 14:03:49.0002 +0000 src 0 imptow 309845 gal inav wtype 6 for 2,31,1 pbwn 0 pbtow 309845 tow 309845 a0 0 a1 0 t0t 72 dtLS 18

Warnings about unknown message or debugging types are fine. If no output appears, check if /dev/ttyACM0 is correct for your device. If you are using the UART port of your Ublox, you may need to tweak the -b baudrate setting, as well as –ubxport. It may be best to head over to our IRC channel as this can be somewhat tricky.

To transmit data to the project, please contact either @GalileoSats or bert@hubertnet.nl to receive a station number & the IPv4 and IPv6 address of the collection server. In your message, please note what receiver you are using, possibly your Twitter handle and anything else interesting about your situation.

The full stack

To run your own ‘galmon.eu’ webserver, to feed data into influxdb or to send out your own alerts, read the README.md file

Details

The project consists of software, plus a network of station operators sending data to the repository. This repository in turn makes the data available as a website or as raw data.

Features:

  • Processes raw frames/strings/words from GPS, GLONASS, BeiDou and Galileo
  • All-band support (E1, E5b, B1I, B2I, Glonass L1, Glonass L2, GPS L1C/A) so far, GPS L2C and Galileo E5a pending).
  • Calculate ephemeris positions
  • Comparison of ephemerides to independent SP3 data to determine SISE
    • Globally, locally, worst user location
  • Record discontinuities between subsequent ephemerides (in time and space)
  • Compare doppler shift as reported by receiver with that expected from ephemeris
  • Track atomic clock & report jumps
  • Coverage maps (number of satellites >5, >10, >20 elevation)
  • HDOP/VDOP/PDOP maps
  • Compare orbit to TLE, match up to best matching satellite
  • Tear out every bit that tells us how well an SV is doing
  • Full almanac processing to see what should be transmitting
  • Distributed receivers, combined into a single source of all messages
  • Ready to detect/report spoofing/jamming

Data is made available as JSON, as a user-friendly website and as a time-series database. This time-series database is easily mated to the industry standard Matplotlib/Pandas/Jupyter combination.