Skip to content

Commit 0e06bad

Browse files
authored
Merge pull request #164 from semuconsulting/RC-1.4.27
RC 1.4.27
2 parents 7cf8881 + 0d77b74 commit 0e06bad

18 files changed

+683
-265
lines changed

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44
"editor.formatOnSave": true,
55
"modulename": "pygpsclient",
66
"distname": "pygpsclient",
7-
"moduleversion": "1.4.26",
7+
"moduleversion": "1.4.27",
88
"python.defaultInterpreterPath": "python3",
99
}

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ Normally installs without any additional steps.
8787
sudo apt install python3-pip python3-tk python3-pil python3-pil.imagetk libjpeg-dev zlib1g-dev
8888
```
8989

90-
** If you're compiling the latest version of Python 3 from source, you may also need to install tk-dev (or a similarly named package e.g. tk-devel) first. Refer to http://wiki.python.org/moin/TkInter for further details:
90+
** If you're [compiling the latest version of Python 3 from source](https://github.com/semuconsulting/PyGPSClient/blob/master/examples/python_compile.sh), you may also need to install tk-dev (or a similarly named package e.g. tk-devel) first. Refer to http://wiki.python.org/moin/TkInter for further details:
9191

9292
```shell
9393
sudo apt install tk-dev
@@ -244,7 +244,7 @@ You will need to logout and login for the launcher to take effect.
244244
| User-selectable 'widgets' | To show or hide the various widgets, go to Menu..View and click on the relevant hide/show option. |
245245
|---------------------------|---------------------------------------------------------------------------------------------------|
246246
|![banner widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/banner_widget.png?raw=true)| Expandable banner showing key navigation status information based on messages received from receiver. To expand or collapse the banner or serial port configuration widgets, click the ![expand icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-arrow-80-16.png?raw=true)/![expand icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-triangle-1-16.png?raw=true) buttons. **NB**: some fields (e.g. hdop/vdop, hacc/vacc) are only available from proprietary NMEA or UBX messages and may not be output by default. The minimum messages required to populate all available fields are: NMEA: GGA, GSA, GSV, RMC, UBX00 (proprietary); UBX: NAV-DOP, NAV-PVT, NAV_SAT |
247-
|![console widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/console_widget.png?raw=true)| Configurable serial console widget showing incoming GNSS, NTRIP and SPARTN data streams in either parsed, binary or tabular hexadecimal formats. Supports user-configurable color tagging of selected strings for easy identification. Color tags are loaded from the `"colortag_b":` value (`0` = disable, `1` = enable) and `"colortags_l":` list (`[string, color]` pairs) in your json configuration file (see example provided). NB: color tagging does impose a small performance overhead - turning it off will improve console response times at very high transaction rates.|
247+
|![console widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/console_widget.png?raw=true)| Configurable serial console widget showing incoming GNSS, NTRIP and SPARTN data streams in either parsed, binary or tabular hexadecimal formats. Double-click to copy contents of console to clipboard. Supports user-configurable color tagging of selected strings for easy identification. Color tags are loaded from the `"colortag_b":` value (`0` = disable, `1` = enable) and `"colortags_l":` list (`[string, color]` pairs) in your json configuration file (see example provided). NB: color tagging does impose a small performance overhead - turning it off will improve console response times at very high transaction rates.|
248248
|![skyview widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/skyview_widget.png?raw=true)| Skyview widget showing current satellite visibility and position (elevation / azimuth). Satellite icon borders are colour-coded to distinguish between different GNSS constellations. For consistency between NMEA and UBX data sources, will display GLONASS NMEA SVID (65-96) rather than slot (1-24). |
249249
|![graphview widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/graphview_widget.png?raw=true)| Graphview widget showing current satellite reception (carrier-to-noise ratio or cnr). Double-click to toggle legend. |
250250
|![static map](https://github.com/semuconsulting/PyGPSClient/blob/master/images/staticmap.png?raw=true)| Map widget with various modes of display. Map Type = 'world': a static offline Mercator world map showing current global location.
@@ -253,7 +253,7 @@ You will need to logout and login for the launcher to take effect.
253253
|![import custom map](https://github.com/semuconsulting/PyGPSClient/blob/master/images/importcustommap.png?raw=true)| <a name="custommap">Import Custom Map dialog</a>. Click ![load icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-folder-18-24.png?raw=true) to open the custom map image location (*the default file suffix is `*.gif` - select Show Options to select any file suffix `*.*`*). If the `rasterio` library is installed and the image is georeferenced (e.g. using [QGIS](https://qgis.org/)), the bounding box will be automatically extracted - otherwise it must be entered manually. Import the custom map path and bounding box settings by clicking ![play icon](https://github.com/semuconsulting/PyGPSClient/blob/master/src/pygpsclient/resources/iconmonstr-arrow-12-24.png?raw=true).|
254254
|![spectrum widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/spectrum_widget.png?raw=true)| Spectrum widget showing a spectrum analysis chart (*GNSS receiver must be capable of outputting UBX MON-SPAN messages*). Clicking anywhere in the spectrum chart will display the frequency and decibel reading at that point. Double-clicking anywhere in the chart will toggle the GNSS frequency band markers (L1, G2, etc.) on or off. **NB:** Some receivers (e.g. NEO-F10N) will not output the requisite MON-SPAN messages unless the port baud rate is at least 57,600. |
255255
|![sysmon widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/sysmon_widget.png?raw=true)| System Monitor widget showing device cpu, memory and I/O utilisation (*GNSS receiver must be capable of outputting UBX MON-SYS and/or MON-COMMS messages*). Tick checkbox to toggle between actual (cumulative) I/O stats and pending I/O. |
256-
|![scatterplot widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/scatterplot_widget.png?raw=true)| Scatterplot widget showing variability in position reporting over time. Select from either Planar or Great Circle (haversine) distance approximation mode. Select from either Dynamic or Fixed to center plot on dynamic average position (*displayed at top left*) or fixed reference position (*if entered*). Use the scale slider or mousewheel to adjust scale. Double-click to clear existing plot. The default mode, center, scale index and fixed reference position can be stored in the json configuration file as `scattermode_s`/`scattercenter_s`/`scatterscale_n`/`scatterlat_f`/`scatterlon_f`. |
256+
|![scatterplot widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/scatterplot_widget.png?raw=true)| Scatterplot widget showing variability in position reporting over time. (Optional) Enter fixed reference position. Select Average to center plot on dynamic average position (*displayed at top left*), or Fixed to center on fixed reference position (*if entered*). Check Autorange to set plot range automatically. Set the update interval (e.g. 4 = every 4th navigation solution). Use the range slider or mouse wheel to adjust plot range. Right-click to set fixed reference point to the current mouse cursor position. Double-click clear existing plot. The default center mode, autorange, update increment, scale index and fixed reference position settings can be stored in the json configuration file as `scattercenter_s`/`scatterautorange_b`/`scatterinterval_n`/`scatterscale_n`/`scatterlat_f`/`scatterlon_f`. |
257257
|![rover widget](https://github.com/semuconsulting/PyGPSClient/blob/master/images/rover_widget.png?raw=true) | Rover widget plots the relative 2D position, track and status information for the roving receiver in a fixed or moving base / rover RTK configuration. Can also display relative position of NTRIP mountpoint and receiver in a static RTK configuration. Double-click to clear existing plot. (*GNSS rover receiver must be capable of outputting UBX NAV-RELPOSNED messages.*) |
258258
---
259259
## <a name="ubxconfig">UBX Configuration Facilities</a>

RELEASE_NOTES.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# PyGPSClient Release Notes
22

3+
### RELEASE 1.4.27
4+
5+
ENHANCEMENTS:
6+
7+
1. Further enhancements to scatterplot widget; add autorange, update interval, right-click to set fixed ref position, standard deviation in addition to average lat/lon, improved font scaling
8+
1. Add Height Above Ellipsoid (HAE) to banner. 'sep' = HAE - hMSL.
9+
1. Add double-click to copy contents of console to clipboard.
10+
311
### RELEASE 1.4.26
412

513
ENHANCEMENTS:

RTK-TIPS.md

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,32 @@ If you're relatively new to GNSS and RTK techniques and terminology, you may wan
6161
- Ideally, an NTRIP source ('mountpoint') should be no further than 30km from your antenna location, such that its correction data is [representative of local atmospheric conditions](https://www.semuconsulting.com/gnsswiki/#ION).
6262
- **NB:** While free public domain NTRIP resources exist and can often give perfectly satisfactory results, there is no guarantee as to the quality of the correction data available. Some public domain CORS are essentially amateurs working out of their back yards. The best results *for your location* may be obtained from proprietary or subscription services which use specialised, carefully calibrated equipment in optimal locations with ITRF or local plate-fixed datums - but it's always worth trying public domain resources first.
6363

64-
### 7. Check your receiver is successfully receiving and processing RTK data
64+
### 7. Use the highest precision message type(s) available
65+
66+
- If using a UBX receiver like the ZED-F9P, different NMEA or UBX navigation message types will yield different levels of precision.
67+
68+
| lat/lon decimal places | approx precision | example message type |
69+
|----------------| -------------------------|----------|
70+
| 3 | 110 m | |
71+
| 4 | 11 m | |
72+
| 5 | 1.1 m | |
73+
| 6 | 11 cm | NMEA GGA, GNS in standard precision mode (5dp minutes) |
74+
| 7 | 1.1 cm | UBX NAV-PVT, NAV-POSLLH |
75+
| 8 | 1.1 mm | UBX NAV-HPPOSLLH, NMEA GGA, GNS in high precision mode (7dp minutes) |
76+
| | | |
77+
78+
- 8dp (± 1.1 mm) represents the practical limit for RTK and PPK techniques - further decimal places are likely to be spurious (*though internal computations may retain them e.g. to avoid cumulative rounding errors*).
79+
- **NB** The highest precision message types/modes are generally **NOT** enabled by default - they will need to be enabled via the [UBX Configuration panel](https://github.com/semuconsulting/PyGPSClient?tab=readme-ov-file#ubxconfig). Always use the highest precision available for your receiver. For the ZED-F9P and other 9th generation u-blox receivers...
80+
- NMEA high precision mode can be enabled by setting CFG_NMEA_HIGHPREC = 1
81+
- UBX NAV-HPPOSLLH can be enabled by setting CFG_UBX_MSGOUT_HPPOSLLH_xxxxx = 1, where xxxxx represents the port ('USB', 'UART1', 'I2C', etc.)
82+
- A broad indication of available precision can be obtained from the scatterplot widget set to a range of 10 cm or less. If the points appear to be aligned to a coarse grid, this suggests relatively low precision. If the points appear to be scattered more or less randomly, this suggests higher precision.
83+
84+
| **lower precision** | **higher precision** |
85+
|:-----------------:|:------------------:|
86+
| ![low precision](https://github.com/semuconsulting/PyGPSClient/blob/master/images/low_precision.png?raw=true) | ![high precision](https://github.com/semuconsulting/PyGPSClient/blob/master/images/high_precision.png?raw=true) |
87+
| | |
88+
89+
### 8. Check your receiver is successfully receiving and processing RTK data
6590

6691
- If you're using a UBX receiver like the F9P, you may find it easier to configure it to output UBX messages rather than the default NMEA, as the former are more concise and offer more comprehensive and consistent RTK status information.
6792
- Successful receipt and processing of RTK correction data is generally indicated as follows:
@@ -81,13 +106,13 @@ If you're relatively new to GNSS and RTK techniques and terminology, you may wan
81106
- If using an internet RTK service (NTRIP or MQTT), ensure you have active internet connectivity and that the service's IP port (typically 2101, 2102, 443 or 8883) is not being blocked by a firewall.
82107
- Ensure that your F9P is configured to allow incoming RTCM3 data on the designated port - this is the default setting, but it may have been overwritten.
83108

84-
### 8. "FLOAT" vs "FIXED"
109+
### 9. "FLOAT" vs "FIXED"
85110

86111
- It is important to understand that these RTK status values are based, in essence, on a statistical analysis (using the principles of [Kalman Filtering](https://en.wikipedia.org/wiki/Kalman_filter)) of the [various errors](https://www.semuconsulting.com/gnsswiki/#Errors) ('residuals') which affect the calculation of carrier phase pseudorange, and hence the accuracy of the navigation solution.
87112
- The receiver's firmware applies a complex proprietary algorithm to determine if this statistical analysis is within a certain tolerance. If it is, the receiver will report an 'RTK-FIXED' status. If it is outside the designated tolerance, the receiver may report an 'RTK-FLOAT' status. This doesn't *necessarily* mean that the solution is less accurate - it just means that the *confidence* level is lower than 'FIXED'.
88113
- An 'RTK-FLOAT' status will therefore generally yield a lower accuracy estimation (`hAcc`, `vAcc`) than 'RTK-FIXED'.
89114

90-
### <a name="caveats">9. Some caveats on "hAcc" and "vAcc"</a>
115+
### <a name="caveats">19. Some caveats on "hAcc" and "vAcc"</a>
91116

92117
- **NB:** `hAcc` and `vAcc` values are *not* available from the default cohort of NMEA messages output by most GNSS receivers (including the F9P). In order to receive these values, you will need to enable either proprietary NMEA sentences like u-blox's UBX00, or UBX messages like NAV-PVT.
93118
- Much is made of reported horizontal (hAcc) and vertical (vAcc) accuracy figures, but they are **merely estimates** based on a statistical analysis of:
@@ -97,7 +122,6 @@ If you're relatively new to GNSS and RTK techniques and terminology, you may wan
97122
- Pseudorange residuals ([UERE](https://en.wikipedia.org/wiki/Error_analysis_for_the_Global_Positioning_System))
98123
- In the case of the F9P receiver, the analysis itself is proprietary and is performed within the F9P's firmware, rather than in client software.
99124
- Ultimately, the only *definitive* way of establishing the accuracy of an RTK (or PPK) navigation solution is to compare it with a known fixed reference point whose 3D coordinates have been independently verified via high precision surveying techniques.
100-
- Note that the 7th and 8th decimal places of a decimal lat/lon coordinate are equivalent to about 1.1cm and 1.1mm respectively, which represents the practical limit of any RTK or PPK GNSS application - anything more than this would be spurious.
101125

102126
---
103127
## <a name="example">Illustrated Example</a>

images/high_precision.png

38 KB
Loading

images/low_precision.png

36.9 KB
Loading

images/scatterplot_widget.png

46.6 KB
Loading

pygpsclient.json

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,9 @@
106106
"lbandclientoutport_s": "Passthrough",
107107
"lbandclientdebug_b": 0,
108108
"spartndecode_b": 0,
109-
"scattermode_s": "Planar",
110-
"scattercenter_s": "Dynamic",
109+
"scatterautorange_b": 0,
110+
"scattercenter_s": "Average",
111+
"scatterinterval_n": 1,
111112
"scatterscale_n": 6,
112113
"scatterlat_f": 37.23345133,
113114
"scatterlon_f": -115.81513477,
@@ -175,16 +176,8 @@
175176
],
176177
"colortags_l": [
177178
[
178-
"NMEA",
179-
"green"
180-
],
181-
[
182-
"UBX",
183-
"orange"
184-
],
185-
[
186-
"RTCM",
187-
"lightblue1"
179+
"txbuf alloc",
180+
"red"
188181
],
189182
[
190183
"UNKNOWN PROTOCOL",
@@ -199,24 +192,12 @@
199192
"red"
200193
],
201194
[
202-
"NTRIP>>",
203-
"#9f30c1"
204-
],
205-
[
206-
"NTRIP<<",
207-
"#9f30c1"
208-
],
209-
[
210-
"MQTT>>",
211-
"#a53570"
212-
],
213-
[
214-
"L-BAND>>",
215-
"#a53570"
195+
"carrSoln=2",
196+
"green"
216197
],
217198
[
218-
"SPARTN>>",
219-
"#a53570"
199+
"carrSoln=1",
200+
"deepskyblue"
220201
]
221202
]
222203
}

pyproject.toml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ name = "pygpsclient"
77
authors = [{ name = "semuadmin", email = "[email protected]" }]
88
maintainers = [{ name = "semuadmin", email = "[email protected]" }]
99
description = "GNSS Diagnostic and UBX Configuration GUI Application"
10-
version = "1.4.26"
10+
version = "1.4.27"
1111
license = { file = "LICENSE" }
1212
keywords = [
1313
"PyGPSClient",
@@ -52,7 +52,7 @@ classifiers = [
5252
dependencies = [
5353
"requests>=2.28.0",
5454
"Pillow>=9.0.0",
55-
"pygnssutils>=1.1.6",
55+
"pygnssutils>=1.1.7",
5656
"pyserial>=3.5",
5757
]
5858

@@ -90,11 +90,12 @@ profile = "black"
9090
exclude_dirs = ["docs", "examples", "tests"]
9191
skips = [
9292
"B104",
93+
"B311",
9394
"B318",
9495
"B404",
9596
"B408",
9697
"B603",
97-
] # bind 0.0.0.0; minidom; subroutine
98+
] # bind 0.0.0.0; randrange; minidom; subroutine
9899

99100
[tool.pylint]
100101
jobs = 0

src/pygpsclient/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@
88
:license: BSD 3-Clause
99
"""
1010

11-
__version__ = "1.4.26"
11+
__version__ = "1.4.27"

0 commit comments

Comments
 (0)