How Can You Use PyGPSClient to cast to RTK2go?

I am trying use a Pi 5 with the Sparkfun RTK Postcard with the LG290P on PyGPSClient to cast to RTK2go. I have credentials from RTK2go to be a base station but I simply cannot find a decent guide on the internet to get it working. ChatGPT and Google AI are just running me around in circles.

Does anyone have a guide or simple directions?

Hi @JohnEH,

FIRST AND FOREMOST, IF YOU’RE INTENDING TO PUBLISH TO RTK2GO, READ THIS CAREFULLY FIRST:

In answer to your question - technically, yes. PyGPSClient’s NTRIP server facility can be used as an reference station published via RTK2GO, but I wouldn’t recommend using PyGPSClient in this way.

PyGPSClient is principally intended to serve as a GUI configuration, testing and diagnostic tool - it’s not intended to be used as the basis of a ‘lights out’, continuously operating NTRIP reference station (‘CORS’).

The CLI gnssserver tool (which is what PyGPSClient uses under the covers) running as a systemd service might be a better option, but neither would offer the performance and stability of something like SNIP Caster (the proprietary solution which is pretty much the industry standard software in this space).

But if you fully understand the risks and limitations and you want to give it a go anyway, the steps are essentially:

  1. Ensure you have a suitable NTRIP-capable GNSS receiver, such as the u-blox ZED-X20P, Septentrio Mosaic X5, Unicore UM981S or Quectel LG580 (this list is not exhaustive).
  2. Ensure you’re using a suitable multi-band antenna with good sky visibility.
  3. Ensure you have public internet connectivity - this may involve configuring your internet router to allow ‘port forwarding’ of the relevant NTRIP port e.g. 2101 - see your router’s manual for details. NB: be mindful that this carries risks for your local area network.
  4. Hook your GNSS receiver up to PyGPSClient on the RPi via its USB or UART port.
  5. Use PyGPSClient’s server configuration facility to configure the receiver to operate in Base Station mode. It should be outputting the relevant RTCM3 correction messages e.g. 1006, 1077, 1087, etc.
  6. Enable the NTRIP server facility. PyGPSClient will now be transmitting an RTCM3 NTRIP stream on your public IP address and port e.g. http://your_public_ip_address:2101. Note that this would be an unencrypted connection by default - you may want to consider encrypting the service using an appropriate TLS Certificate (which PyGPSClient supports - see the README for details).
  7. Check that you can connect to this NTRIP stream from another NTRIP Client device external to your local area network (e.g. I would typically use a second laptop tethered to my mobile phone’s 5G connection for this purpose).
  8. Once you’ve established that your NTRIP stream is publicly accessible, follow the instructions for ‘Connecting as a Data Provider… (Base Stations)’ here to publish your stream via RTK2GO: How to Connect – RTK2GO

Hope this helps. If you have any further queries on PyGPSClient or any of the other GNSS utilities from the same stable, please go to the PyGPSClient Discussion Forum.

Thank You! I’ll check out the SNIP Caster.

Sadly SNIP Caster only works on Windows and some editions may involve ongoing subscription charges (though there is a free LITE edition with limited functionality).

If this is your first experience with running a 24/7/365 NTRIP CORS, it may still be worth spinning up a local instance using PyGPSClient (or gnssstreamer CLI) on a Raspberry Pi first as this will give you an excellent grounding in receiver, antenna and RTK configuration and optimisation.

Maybe try running one on your local LAN for a few weeks and, if all goes well, then consider taking the next step to publishing. Again, if you need any assistance, don’t hesitate to ask on the PyGPSClient discussion forum.

FYI I’ve personally had an NTRIP Caster (based on gnssstreamer as a systemd service) running more or less continuously on an old Raspberry Pi 4 for several years now without major incident, but I only use it for local testing with different receiver and antenna models.

I’ve had the PyGPSClient interface up for quite some time as a Rover with correction data from a couple different places.

I had thought maybe that it would be as easy as just putting in supplied data from RTK2go to get it all working as a caster.

Having said all this I have almost zero need to do this. It is just a learning experience but I would like to follow through to some sort of successful ending to this. And if I can feed a shared network, all the better.

Every time I would reset the LG290P and set it to do SVIN it would run but the Survey would never advance past 0%. If by some reason it would then I would go to No Fix status.
Stayed up all night last night fighting it. :grinning_face:

ikr. Unfortunately the LG290P requires a reset for Base Station operation and it can on occasion take several minutes for the receiver to stabilise before it starts registering SVIN observations (PQTMSVINSTATUS.obs > 0), especially from a cold start.

In my experience it does generally get there eventually e.g. here’s a screen shot from an LG290P03 SVIN initialisation I’ve just tried (the target accuracy is rubbish - this was just a quick illustration); in this case it took nearly 2 minutes before the first observation was recorded, and a further 60 seconds for the SVIN to complete. If you get no joy after, say, 3 minutes, try sending the configuration commands again. In a professional context, CORS receivers would typically be configured using BASE FIXED ECEF coordinates derived from a calibrated Ground Control Point (GCP), but this is unlikely to be practical for most lay users.

I appreciate all the info but I’m still failing sort of miserably. I can either only get a 0 or 2 in valid and obs=usually 0 or 1 and never moves. I’ve worn ChatGPT down to its last CPU cycle.

Let me ask the simple question. Can I do this on PyGPSClient with a u-Blox RTK chip?

Far be it from me to challenge the integrity of billionaires or trillionaires, but I would humbly suggest AI chatbots may NOT be the most reliable authority here (or indeed anywhere).

Try asking the human beings who actually wrote the software :wink:

Let me ask the simple question. Can I do this on PyGPSClient with a u-Blox RTK chip

If by ‘u-blox RTK chip’ you mean something like the ZED-F9P or ZED-X20P, the answer is yes. But, as I say, PyGPSClient will also work quite happily with u-blox, Quectel, Septentrio and Unicore RTK-capable receivers (i.e. essentially most receivers whose GNSS output protocols are in the public domain) but they each have their own configuration nuances.