High-Precision GPS Positioning
for Spring Developers
@GHILLERTGUNNAR HILLERT
About ME
▸ Independent Software Developer
▸ Java Champion
▸ DevNexus Co-Founder
▸ OSS Committer
▸ Spring Integration, XD, Data Flow,
Java Marine API
▸ Plant Collector
2Hillert Inc.
Contents
▸ Fundamentals
▸ Hardware
▸ Processing of positioning data
▸ Visualization
▸ 2 Demos
3Hillert Inc.
Why High Precision GPS?
▸ Autonomous vehicles
▸ Robotics
▸ Precision farming
▸ Drone operation
▸ Infrastructure, Biodiversity etc.
4Hillert Inc.
Global Navigation Satellite System (GNSS) refers to a
constellation of satellites providing signals from space that
transmit positioning and timing data to GNSS receivers. The
receivers then use this data to determine location.
European Global Navigation Satellite Systems Agency
GNSS Defined
5Hillert Inc.
▸ GPS (USA)
▸ GLONASS (Russia)
▸ BeiDou (China)
▸ Galileo (EU)
▸ Satellite-based augmentation systems, e.g. QZSS (Japan), EGNOS (EU)
GNSS Systems
6Hillert Inc.
Dual Frequency GNSS
▸ L1+L5 (GPS), E1+E5a (Galileo)
▸ “Dual-frequency GNSS on Android devices” by Sean Barbeau
▸ US Device support in 2020 is still spotty
▸ Check phone support with the OSS app GPSTest (Android)
▸ My own experience: better but not amazing (OnePlus 8 Pro)
7Hillert Inc.
GNSS Accuracy Compared
OnePlus One
OnePlus 8 Pro
U-Blox
8Hillert Inc.
We Can Do Better With Correction Data
▸ Incorporating correction data is key!
▸ Real Time Kinematic (RTK) positioning
▸ Rover + Base Station
▸ Base station should see the same errors (10-40km)
▸ Other correction services exist, e.g. PPP-RTK, PPP
▸ Relative Accuracy versus Absolute Accuracy
9Hillert Inc.
How To Consume Correction Data?
▸ NTRIP == RTK over the internet
▸ Eliminates the need for base station
▸ Networked Transport of RTCM via Internet Protocol
▸ RTCM == Radio Technical Commission for Maritime
▸ Manually post-process receiver data
▸ Continuously Operating Reference Stations (CORS)
▸ E.g. using RTKLIB
10Hillert Inc.
▸ Base Station + Rover
▸ Relatively Low Cost
▸ u-blox ZED-F9P module
▸ Bluetooth + Serial
▸
My Setup Base Station Rover
11Hillert Inc.
Android
▸ Lefebure NTRIP Client
▸ Connect to external GNSS device via Bluetooth
▸ Enable Mock Locations in Android
▸ Under Developer Options
▸ "Fix type” RTK provides highest accuracy
12Hillert Inc.
Hillert Inc.
What About IoS?
▸ Very limited support
▸ Cannot override GPS
▸ Need custom app integration
▸ Processing of NMEA data via WIFI
13
Hillert Inc.
▸ NMEA 0183
▸ National Marine Electronics Association
▸ Proprietary “Standard”
▸ Text based
▸ Numerous sentence (message) types
▸ Why GPSes suck, and what to do about it
▸ Alternative: Proprietary Binary Formats
How to Process GNSS Data? $GNRMC,024429.00,A,1939.4742123,N,15556.999
$GNVTG,,T,,M,0.027,N,0.050,K,A*3D
$GNGGA,024429.00,1939.4742123,N,15556.99941
$GNGSA,A,3,01,07,03,11,22,,,,,,,,2.13,1.02,
$GNGSA,A,3,81,68,78,,,,,,,,,,2.13,1.02,1.87
$GNGSA,A,3,02,,,,,,,,,,,,2.13,1.02,1.87,3*0
$GNGSA,A,3,,,,,,,,,,,,,2.13,1.02,1.87,4*09
$GPGSV,2,1,05,01,58,154,45,03,49,030,33,07,
$GPGSV,2,2,05,22,46,064,32,1*50
$GPGSV,2,1,05,01,58,154,41,03,49,030,32,07,
$GPGSV,2,2,05,22,46,064,,6*56
$GLGSV,3,1,10,66,19,040,21,67,34,344,29,68,
$GLGSV,3,2,10,77,36,112,,78,15,167,34,81,41
$GLGSV,3,3,10,83,17,326,,88,02,169,29,1*74
$GLGSV,3,1,10,66,19,040,14,67,34,344,26,68,
$GLGSV,3,2,10,77,36,112,20,78,15,167,38,81,
$GLGSV,3,3,10,83,17,326,,88,02,169,33,3*7D
$GAGSV,2,1,07,02,22,138,40,05,02,059,,07,12
$GAGSV,2,2,07,15,,,35,18,29,218,38,25,18,08
$GAGSV,2,1,06,02,22,138,30,05,02,059,,07,12
$GAGSV,2,2,06,18,29,218,30,25,18,085,,2*79
$GBGSV,1,1,00,*47
$GBGSV,1,1,00,*47
$GNGLL,1939.4742123,N,15556.9994168,W,02442
$PUBX,00,024429.00,1939.4742123,N,15556.999
$PUBX,03,22,1,U,154,58,45,064,3,U,030,49,33
14
💩
Libraries for Processing GNSS Data
▸ Gpsd
▸ Daemon for Unix-like systems
▸ Defines JSON-based request/response protocol
▸ Java Marine API - https://github.com/ktuukkan/marine-api
“If the GPSD project ever
needs a slogan, it will be
'Hide the ugliness!’”
Source: gpsd
15Hillert Inc.
Connecting to External GPS Receivers
▸ Typically Bluetooth or USB
▸ nrjavaserial
▸ Under active development, fork of RXTX
▸ Bluecove (JSR-82, Java APIs for Bluetooth)
▸ Side note - Non-serial USB
▸ usb4java - JSR 80 compliant (OLD!)
16Hillert Inc.
DEMO
GNSS NMEA
17
Hillert Inc.
Application
▸ Spring Boot
▸ nrjavaserial (USB), Bluecove (Bluetooth)
▸ Spring Integration
▸ Enterprise Integration Pattern (EIP)
▸ Micrometer
18
NMEA Input Channel
Header Enricher
GS
Service Activator Service Activator
GSA
Service Activator
GGA
Service Activator
GS Aggregator
GS GGAGSA
NMEA Senten e ran or er
Senten e Channel
Header a ue o ter
Hillert Inc.
Micrometer + Prometheus + Grafana
▸ A fun way to create a UI (Dashboard)
▸ Micrometer - application metrics facade
▸ Hibernate for Metrics (Prometheus, Humio, Wavefront etc.)
▸ Simple to use in Spring Boot apps
▸ Prometheus - time series database / monitoring system
▸ Grafana - Monitoring + Dashboarding
19
Hillert Inc.
QGIS
▸ Geographic Information System
▸ “Painting” with GNSS Coordinates
▸ The OSS “IDE” for GIS People
▸ https://github.com/qgis/QGIS
20
Hillert Inc.
Field Surveys With Mergin and Input
▸ Create Forms and Data Collection Model in QGIS
▸ Run Input on your mobile device
▸ Automatic synchronization using Mergin
▸ Android and IoS support
▸ Alternative option QField
▸ Advice: Take pictures with Open Camera (OSS)
21
DEMO
PLANTS
22
Hillert Inc.
Demo
23
CSV
univocity
GeoJSON
Hillert Inc.
Thank YOU!
▸ Follow me @ghillert or connect via LinkedIn
▸ Additional information + Hardware Parts List
▸ https://www.hillert.com/
▸ Source Code
▸ https://github.com/ghillert/s1-2020-plants-demo
▸ https://github.com/ghillert/gnss-nmea-demo
24

High-Precision GPS Positioning for Spring Developers

  • 1.
    High-Precision GPS Positioning forSpring Developers @GHILLERTGUNNAR HILLERT
  • 2.
    About ME ▸ IndependentSoftware Developer ▸ Java Champion ▸ DevNexus Co-Founder ▸ OSS Committer ▸ Spring Integration, XD, Data Flow, Java Marine API ▸ Plant Collector 2Hillert Inc.
  • 3.
    Contents ▸ Fundamentals ▸ Hardware ▸Processing of positioning data ▸ Visualization ▸ 2 Demos 3Hillert Inc.
  • 4.
    Why High PrecisionGPS? ▸ Autonomous vehicles ▸ Robotics ▸ Precision farming ▸ Drone operation ▸ Infrastructure, Biodiversity etc. 4Hillert Inc.
  • 5.
    Global Navigation SatelliteSystem (GNSS) refers to a constellation of satellites providing signals from space that transmit positioning and timing data to GNSS receivers. The receivers then use this data to determine location. European Global Navigation Satellite Systems Agency GNSS Defined 5Hillert Inc.
  • 6.
    ▸ GPS (USA) ▸GLONASS (Russia) ▸ BeiDou (China) ▸ Galileo (EU) ▸ Satellite-based augmentation systems, e.g. QZSS (Japan), EGNOS (EU) GNSS Systems 6Hillert Inc.
  • 7.
    Dual Frequency GNSS ▸L1+L5 (GPS), E1+E5a (Galileo) ▸ “Dual-frequency GNSS on Android devices” by Sean Barbeau ▸ US Device support in 2020 is still spotty ▸ Check phone support with the OSS app GPSTest (Android) ▸ My own experience: better but not amazing (OnePlus 8 Pro) 7Hillert Inc.
  • 8.
    GNSS Accuracy Compared OnePlusOne OnePlus 8 Pro U-Blox 8Hillert Inc.
  • 9.
    We Can DoBetter With Correction Data ▸ Incorporating correction data is key! ▸ Real Time Kinematic (RTK) positioning ▸ Rover + Base Station ▸ Base station should see the same errors (10-40km) ▸ Other correction services exist, e.g. PPP-RTK, PPP ▸ Relative Accuracy versus Absolute Accuracy 9Hillert Inc.
  • 10.
    How To ConsumeCorrection Data? ▸ NTRIP == RTK over the internet ▸ Eliminates the need for base station ▸ Networked Transport of RTCM via Internet Protocol ▸ RTCM == Radio Technical Commission for Maritime ▸ Manually post-process receiver data ▸ Continuously Operating Reference Stations (CORS) ▸ E.g. using RTKLIB 10Hillert Inc.
  • 11.
    ▸ Base Station+ Rover ▸ Relatively Low Cost ▸ u-blox ZED-F9P module ▸ Bluetooth + Serial ▸ My Setup Base Station Rover 11Hillert Inc.
  • 12.
    Android ▸ Lefebure NTRIPClient ▸ Connect to external GNSS device via Bluetooth ▸ Enable Mock Locations in Android ▸ Under Developer Options ▸ "Fix type” RTK provides highest accuracy 12Hillert Inc.
  • 13.
    Hillert Inc. What AboutIoS? ▸ Very limited support ▸ Cannot override GPS ▸ Need custom app integration ▸ Processing of NMEA data via WIFI 13
  • 14.
    Hillert Inc. ▸ NMEA0183 ▸ National Marine Electronics Association ▸ Proprietary “Standard” ▸ Text based ▸ Numerous sentence (message) types ▸ Why GPSes suck, and what to do about it ▸ Alternative: Proprietary Binary Formats How to Process GNSS Data? $GNRMC,024429.00,A,1939.4742123,N,15556.999 $GNVTG,,T,,M,0.027,N,0.050,K,A*3D $GNGGA,024429.00,1939.4742123,N,15556.99941 $GNGSA,A,3,01,07,03,11,22,,,,,,,,2.13,1.02, $GNGSA,A,3,81,68,78,,,,,,,,,,2.13,1.02,1.87 $GNGSA,A,3,02,,,,,,,,,,,,2.13,1.02,1.87,3*0 $GNGSA,A,3,,,,,,,,,,,,,2.13,1.02,1.87,4*09 $GPGSV,2,1,05,01,58,154,45,03,49,030,33,07, $GPGSV,2,2,05,22,46,064,32,1*50 $GPGSV,2,1,05,01,58,154,41,03,49,030,32,07, $GPGSV,2,2,05,22,46,064,,6*56 $GLGSV,3,1,10,66,19,040,21,67,34,344,29,68, $GLGSV,3,2,10,77,36,112,,78,15,167,34,81,41 $GLGSV,3,3,10,83,17,326,,88,02,169,29,1*74 $GLGSV,3,1,10,66,19,040,14,67,34,344,26,68, $GLGSV,3,2,10,77,36,112,20,78,15,167,38,81, $GLGSV,3,3,10,83,17,326,,88,02,169,33,3*7D $GAGSV,2,1,07,02,22,138,40,05,02,059,,07,12 $GAGSV,2,2,07,15,,,35,18,29,218,38,25,18,08 $GAGSV,2,1,06,02,22,138,30,05,02,059,,07,12 $GAGSV,2,2,06,18,29,218,30,25,18,085,,2*79 $GBGSV,1,1,00,*47 $GBGSV,1,1,00,*47 $GNGLL,1939.4742123,N,15556.9994168,W,02442 $PUBX,00,024429.00,1939.4742123,N,15556.999 $PUBX,03,22,1,U,154,58,45,064,3,U,030,49,33 14 💩
  • 15.
    Libraries for ProcessingGNSS Data ▸ Gpsd ▸ Daemon for Unix-like systems ▸ Defines JSON-based request/response protocol ▸ Java Marine API - https://github.com/ktuukkan/marine-api “If the GPSD project ever needs a slogan, it will be 'Hide the ugliness!’” Source: gpsd 15Hillert Inc.
  • 16.
    Connecting to ExternalGPS Receivers ▸ Typically Bluetooth or USB ▸ nrjavaserial ▸ Under active development, fork of RXTX ▸ Bluecove (JSR-82, Java APIs for Bluetooth) ▸ Side note - Non-serial USB ▸ usb4java - JSR 80 compliant (OLD!) 16Hillert Inc.
  • 17.
  • 18.
    Hillert Inc. Application ▸ SpringBoot ▸ nrjavaserial (USB), Bluecove (Bluetooth) ▸ Spring Integration ▸ Enterprise Integration Pattern (EIP) ▸ Micrometer 18 NMEA Input Channel Header Enricher GS Service Activator Service Activator GSA Service Activator GGA Service Activator GS Aggregator GS GGAGSA NMEA Senten e ran or er Senten e Channel Header a ue o ter
  • 19.
    Hillert Inc. Micrometer +Prometheus + Grafana ▸ A fun way to create a UI (Dashboard) ▸ Micrometer - application metrics facade ▸ Hibernate for Metrics (Prometheus, Humio, Wavefront etc.) ▸ Simple to use in Spring Boot apps ▸ Prometheus - time series database / monitoring system ▸ Grafana - Monitoring + Dashboarding 19
  • 20.
    Hillert Inc. QGIS ▸ GeographicInformation System ▸ “Painting” with GNSS Coordinates ▸ The OSS “IDE” for GIS People ▸ https://github.com/qgis/QGIS 20
  • 21.
    Hillert Inc. Field SurveysWith Mergin and Input ▸ Create Forms and Data Collection Model in QGIS ▸ Run Input on your mobile device ▸ Automatic synchronization using Mergin ▸ Android and IoS support ▸ Alternative option QField ▸ Advice: Take pictures with Open Camera (OSS) 21
  • 22.
  • 23.
  • 24.
    Hillert Inc. Thank YOU! ▸Follow me @ghillert or connect via LinkedIn ▸ Additional information + Hardware Parts List ▸ https://www.hillert.com/ ▸ Source Code ▸ https://github.com/ghillert/s1-2020-plants-demo ▸ https://github.com/ghillert/gnss-nmea-demo 24