Go to file
bert hubert c0e13d3a42 glonass special sign support 2019-08-26 00:17:41 +02:00
ext yolo 2019-07-31 22:32:39 +02:00
html split out ephemeris ephAge & fix it, add delta-Hz to html, add gps-utc offset to json & show it in html, fix compilation 2019-08-18 10:56:22 +02:00
.gitignore too much to mention 2019-08-13 01:15:25 +02:00
.gitmodules yolo 2019-07-31 22:32:39 +02:00
LICENSE Initial commit 2019-07-21 16:09:11 +02:00
Makefile split out ephemeris ephAge & fix it, add delta-Hz to html, add gps-utc offset to json & show it in html, fix compilation 2019-08-18 10:56:22 +02:00
README.md update README and Makefile 2019-08-15 22:08:59 +02:00
beidou.cc committed for backup purposes 2019-08-26 00:16:45 +02:00
beidou.hh committed for backup purposes 2019-08-26 00:16:45 +02:00
bits.cc glonass special sign support 2019-08-26 00:17:41 +02:00
bits.hh glonass special sign support 2019-08-26 00:17:41 +02:00
ephemeris.cc split out ephemeris ephAge & fix it, add delta-Hz to html, add gps-utc offset to json & show it in html, fix compilation 2019-08-18 10:56:22 +02:00
ephemeris.hh split out ephemeris ephAge & fix it, add delta-Hz to html, add gps-utc offset to json & show it in html, fix compilation 2019-08-18 10:56:22 +02:00
galileo.cc move to protobuf 2019-08-09 15:58:52 +02:00
galileo.hh move to protobuf 2019-08-09 15:58:52 +02:00
glonass.cc committed for backup purposes 2019-08-26 00:16:45 +02:00
glonass.hh committed for backup purposes 2019-08-26 00:16:45 +02:00
gps.cc gps yolo 2019-08-12 15:54:16 +02:00
gps.hh fix compilation on non-osx 2019-08-17 10:36:38 +02:00
minicurl.cc partial deboostification, removal of curses where it is not needed, filter non non-galileo 2019-08-09 18:09:47 +01:00
minicurl.hh more bits 2019-08-06 12:57:06 +02:00
minivec.hh split out ephemeris ephAge & fix it, add delta-Hz to html, add gps-utc offset to json & show it in html, fix compilation 2019-08-18 10:56:22 +02:00
minread.cc yolo 2019-07-24 13:24:48 +02:00
navdump.cc split out ephemeris ephAge & fix it, add delta-Hz to html, add gps-utc offset to json & show it in html, fix compilation 2019-08-18 10:56:22 +02:00
navmon.proto gps yolo 2019-08-12 15:54:16 +02:00
navnexus.cc too much to mention 2019-08-13 01:15:25 +02:00
navparse.cc split out ephemeris ephAge & fix it, add delta-Hz to html, add gps-utc offset to json & show it in html, fix compilation 2019-08-18 10:56:22 +02:00
navrecv.cc gps yolo 2019-08-12 15:54:16 +02:00
storage.cc gps yolo 2019-08-12 15:54:16 +02:00
storage.hh gps yolo 2019-08-12 15:54:16 +02:00
ubx.cc gps yolo 2019-08-12 15:54:16 +02:00
ubx.hh gps yolo 2019-08-12 15:54:16 +02:00
ubxdisplay.cc more file 2019-07-31 22:33:04 +02:00
ubxparse.cc move to protobuf 2019-08-09 15:58:52 +02:00
ubxtool.cc we are still somewhat confused about GPS week numbers, but not as badly as before 2019-08-18 10:48:15 +02:00

README.md

galmon

galileo/GPS open source monitoring

Theoretically multi-vendor, although currently only the U-blox 8 chipset is supported.

Goals:

  1. Support multiple wildly distributed receivers
  2. Combine these into a forensic archive of all Galileo/GPS NAV messages
  3. Make this archive available, offline and as a stream
  4. Consume this stream and turn it into an attractive live website (https://galmon.eu/). As part of this, perform higher-level calculations to determine ephemeris discontinuities, live gst/gps/galileo time offsets, atomic clock jumps etc.
  5. Populate an InfluxDB timeseries database with raw measurements and higher order calculations

To get started, make sure you have a C++17 compiler, git, protobuf-compiler, libh2o-dev.

git clone https://github.com/ahupowerdns/galmon.git --recursive
cd galmon
make

If this doesn't succeed with an error about h2o, make sure you have this library installed, and if you have remove the # in front of "# -lwslay". This may solve the problem.

Once compiled, run for example ./ubxtool /dev/ttyACM0 1 | ./ubxparse 10000 html null

Next up, browse to http://[::1]:10000 (or try http://localhost:10000/ and you should be in business. ubxtool changes (non-permanently) the configuration of your u-blox receiver so it emits the required frames for GPS and Galileo. If you have a u-blox timing receiver it will also enable the doppler frames.

To see what is going on, try:

./ubxtool /dev/ttyACM0 1 | ./navdump

Setting up a distributed setup is slightly more complicated & may still change.

Tooling:

  • ubxtool: can configure a u-blox 8 chipset, parses its output & will convert it into a protbuf stream of GNSS NAV frames + metadata Adds 64-bit timestamps plus origin information to each message
  • xtool: if you have another chipset, build something that extracts NAV frames & metadata. Not done yet.
  • navrecv: receives GNSS NAV frames and stores them on disk, split out per sender.
  • navnexus: tails the files stored by navrecv, makes them available over TCP
  • navpartse: consumes these ordered nav updates for a nice website and puts "ready to graph" data in influxdb - this is the first step that breaks "store everything in native format". Also does computations on ephemerides.
  • grafana dashboard: makes pretty graphs

The transport format consists of repeats of:

  1. Four byte magic value
  2. Two-byte frame length
  3. A protobuf frame

The magic value is there to help us resync from partially written data.

The whole goal is that we can continue to rebuild the database by rerunning 'navstore' and 'navinflux'.

Big TODO

  • Dual goals: completeness, liveness, not the same For forensics, great if the packet is there For display, not that bad if we missed a message

  • In general, consider refeed strategy Raw serial Protobuf Influxdb ".csv files"

  • Delivery needs to be bit more stateful (queue)

  • Semantics definition for output of Navnexus "we'll never surprise you with old data"

ubxtool

  • Will also spool raw serial data to disk (in a filename that includes the start date)
  • Can also read from disk
  • Careful to add the right timestamps