DGPS corrections over the Internet

2004-10-26: Authors of DGPS-IP client software need to make sure they read the Notes for Authors. In particular, the HELO line is no longer optional. Too many script kiddie port scanners were camping on the lines and not releasing them for dgpsip clients.

Introduction

On a stationary GPS without a differential correction signal, you should see a 20m average radius "random walk" pattern. On the same receiver with DGPS corrections and a good view of the sky, the error should be reduced to approximately 2m average radius. If you've always wanted to see how clean the GPS signal is once the government-induced noise signal is removed but didn't want to spend the money for a DGPS radio, here is your big chance!

I'd like to announce a fun DGPS hack. I've written a small Un*x server and client for redistributing DGPS correction signals over the Net. Basically the server grabs the serial byte stream from my DGPS radio and sends it off over a TCP connection. The client does the same thing but in reverse. The result is that you can receive the local DGPS corrections from absolutely anywhere by using the Internet as the world's largest extension cord. You'll still need to be within 1000 miles or so of San Francisco, California, USA for best results. However, chances are better than not that the GPS error will still be reduced if you are within a 3000-mile radius. Several respondents from 2000 miles away have noted that the remote differential signals have diminished the selective availability (SA) induced position and velocity errors by approximately a factor of three. Here are some plots illustrating the reduction of SA-related wander at a site some 3,500 km away. The red traces are with dgps-ip, the green without. [1] [2] Thanks to Tom Dunigan for contributing this data.

I have a report from Andreas Borman in Witten, Germany that his GPS did in fact achieve a DGPS "3D-DIFF" lock when the same four satellites were visible from both our locations. The correction wasn't great (the result was an estimated position error [EPE] of 20 meters), but it is remarkable that the differential correction worked at all. A hypothetical small network of RTCM reference stations around the globe could generate a composite RTCM stream that would be useful anywhere for removing the selective availability portion of the positioning error.

Free Source Code for Unix and Windows

If you have a Netbsd/Openbsd/Freebsd/Linux machine, then grab the following to run "dgpsip". The code is released under Gnu Public License (GPL). Release (1.32) contains a work-around for GPS's that don't checksum the NMEA data stream.


download DGPSIP 1.35 BSD/Linux sources (65k)

Mauro Venanzi has written a GPL-ed Linux GUI client based on Gtk for receiving and displaying the GPS data along with the differential corrections.


DGPS DGPSNavigator

Jeff Thieleke (jthieleke@usa.net) has provided a very nice Win95/98/NT GUI port of DGPSIP. Thanks Jeff for a snazzy version of the Unix command-line program. A self-extracting archive of the executable and documentation is available below. The merged sources will be available shortly. This program will give you interactive service since it parses information returned from your GPS. It therefore is the recommended program for win95/98/NT users.


JDGPSIP V1.01 Win95 executable (142k)

Andreas Bormann wrote the first Win95/98/NT GUI client for the DGPSIP server. Please note that unlike Jeff's program, this program does not parse returned information from your GPS and therefore permits only bulk service. Some more details and instructions are located in the WinDGPS-readme.txt below. Thanks Andreas for a really nice little program. We have a report from Greg Sousa that WinDGPS works just fine under NT40 sp4 also.


WinDGPS v2.0A executable and sources (193K)
WinDGPS README file

Martin Grossman has a free Delorme Tripmate/Earthmate GPS viewing program called VBSAT that can make use of the DGPSIP server. It is written in Visual Basic and runs on win95/98.

Derrick Brashear and Curt Mills added dgpsip support to gpsd. Gpsd is a Unix daemon that will allow one to read a remote GPS via a simple protocol. It is delivered as GPL-ed source.

If you have a non-Windows, non-Unix OS, you'll have to hack some code together yourself. It's not that hard. All you need to do is open a connection to dgps.wsrcc.com, TCP port 2101 and then feed the resulting data stream to your serial line. Potential authors of DGPS-over-the-Internet client software will want to read this note.

Shareware And Commercial Software

Stan Huntting has a cute graphical program called SAWatch for displaying and statistically analyzing the "Selective Availability" wanderings. It runs on win95/98/NT and can optionally make use of the DGPSIP server.

Karen Nakamura has sent word that she has added DGPSIP support to Global Mapping Systems' GPSy Pro -- Macintosh GPS Software.

How it works

The DGPSIP server is multithreaded and is currently configured to support up to 64 concurrent connections. The DGPS radio is outputting data at an average of 284 bits/sec. Normally the server sends out a packet roughly every second with 35 bytes of data and 40 bytes of IP header.

The server also transmits multicast UDP corrections (currently on 224.0.1.235 port 2101). This mode has been tested locally, and in theory the mrouted that I have running on this machine can redistribute this multicast on demand. Unfortunately I don't know how to arrange for broader Internet availability of this service. Suggestions and examples are welcome!

The GPS radio is a Garmin DBR-21 with firmware version 2.0. The antenna is a 1.3m "Loran/DGPS" fiberglass whip mounted on my roof with the antenna base approximately 5 meters above the ground level (or 30 meters above sea level). From this vantage point the antenna has a direct line of sight to the coastal mountain range. The radio is normally tuned to one of the following Coast Guard transmitters:

LINCOLN, CA 
Status:                     Operational
RBn Antenna Location:       38° 50.77' N;121° 20.98' W 
REFSTA Ant Location (A):    38° 50.79042' N;121° 21.01318' W 
REFSTA Ant Location (B):    38° 50.79023' N;121° 21.03207' W 
REFSTA RTCM SC-104 ID (A):  210
REFSTA RTCM SC-104 ID (B):  211
REFSTA FIRMWARE VERSION:    RE00-1C19
Broadcast Site ID:          764
Transmission Frequency:     314 KHZ
Transmission Rate:          200 BPS 
Signal Strength:            100 uV/m AT 225 KM
Distance from WSRCC:        95 miles

PIGEON POINT, CA 
Status:                     Operational
RBn Antenna Location:       37° 11.2' N;122° 23.4' W 
REFSTA Ant Location (A):    37° 11.22481' N;122° 23.39619' W 
REFSTA Ant Location (B):    37° 11.20943' N;122° 23.38603' W 
REFSTA RTCM SC-104 ID (A):  266
REFSTA RTCM SC-104 ID (B):  267
REFSTA FIRMWARE VERSION:    RD00-1C19
Broadcast Site ID:          883
Transmission Frequency:     287 KHZ
Transmission Rate:          100 BPS 
Signal Strength:            75uV/m at 180 NM
Distance from WSRCC:        35 miles

CHICO, CA 
Status:                     Operational
RBn Antenna Location:       39° 25.8' N;121° 36' W 
REFSTA Ant Location (A):    39° 25.95802' N;121° 39.89677' W 
REFSTA Ant Location (B):    39° 25.97251' N;121° 39.89205' W 
REFSTA RTCM SC-104 ID (A):  256
REFSTA RTCM SC-104 ID (B):  257
REFSTA FIRMWARE VERSION:    RD00-1C19
Broadcast Site ID:          878
Transmission Frequency:     318 KHZ
Transmission Rate:          100 BPS 
Signal Strength:            75uV/m at 250SM
Distance from WSRCC:        131 miles

SPOKANE, WA 
Status:                     Operational
RBn Antenna Location:       47° 31.16' N;117° 25.41' W 
REFSTA Ant Location (A):    47° 31.10105' N;117° 25.42097' W 
REFSTA Ant Location (B):    47° 31.10179' N;117° 25.40005' W 
REFSTA RTCM SC-104 ID (A):  68
REFSTA RTCM SC-104 ID (B):  69
REFSTA FIRMWARE VERSION:    RD00-1C19
Broadcast Site ID:          848
Transmission Frequency:     316 KHZ
Transmission Rate:          100 BPS 
Signal Strength:            75uV/m at 300 SM
Distance from WSRCC:        724 miles

POINT BLUNT, CA 
Status:                     Decommissioned
RBn Antenna Location:       37° 51.19' N;122° 25.14' W 
REFSTA Ant Location (A):    37° 51.18291' N;122° 25.13584' W 
REFSTA Ant Location (B):    37° 51.1932' N;122° 25.16275' W 
REFSTA RTCM SC-104 ID (A):  268
REFSTA RTCM SC-104 ID (B):  269
REFSTA FIRMWARE VERSION:    RD00-1C19
Broadcast Site ID:          884
Transmission Frequency:     310 KHZ
Transmission Rate:          200 BPS 
Signal Strength:            100uV/m at 60 NM
Distance from WSRCC:        33 miles 
SNR 30 db (night)

The Sprokane, WA site just showed up in the logs. I guess atmospheric conditions were just right one night.

Port number change:

IANA has assigned us an official TCP and UDP port number; port 2101.

The first releases of this client used a different port number which was a play on the official name of the protocol RTCM-SC104. Unfortunately that port had been officially assigned to another service. IANA has kindly assigned us the port 2101 (UDP and TCP) for DGPS service. Thank you, IANA.

If you have installed previous versions of this software with the old port number, please update your /etc/services file.

Other DGPS feeds:

Currently there are two feeds for the following reference stations. To select the alternate feeds configure your client software to use the indicated host and port numbers.

    host: dgps.wsrcc.com
    port: 2101
    location: Pt. Blunt, CA USA 37.19 -122.39
        type: Garmin GBR-21 w. 4ft. E-Field whip
    host: gnssip.ing.uniroma1.it
    port: 2101
    location: Rome, Italy
              (Courtesy of Mauro Venanzi, and the University of Rome
              "La Sapienza")

European users can find information about European sites here, courtesy of Mauro Venanzi and his DGPS over IP server page.

The European reference station information can be found at the EUREF page.

If you have a spare RTCM radio or GPS reference station and would like to send a dgps correction stream to me for further redistribution from here please send mail to "dgpsip at wsrcc.com". I'm always looking to add new feeds. All you need is a full-time internet connection, a unix or Linux server and the single-client dgpipd server.

Known Problems

Domain Name Server (DNS) Issues

People connecting from sites that have slow or broken DNS servers will experience startup delays, or in extremely rare cases the startup will fail completely. Here's what's happening: the dgps-ip server starts off by attempting to look up the hostname associated with the IP address of the new connection. Start-up failure should only occur when your DNS is so botched that the server either can't reverse-map the name or can't get a lookup-failure notification within 15-30 seconds. If the connection is not accepted, you may want to make sure that there is a valid hostname associated with your IP address.

Firewall Issues

Some corporate sites have firewalls between the internal network and the Internet. The stated purpose is to keep evil hackers out. Unfortunately some firewalls are very badly misconfigured and will keep employees from sucessfully making connections to all but a few well-known ports (like www or ftp). If your corporate firewall blocks outgoing connections to port 2101, there isn't much the dgps-ip server can do. You'll probably have better luck connecting from an ISP.

Garmin Interface Page Issues

The port 2101 server is a real Garmin radio, so it sends out the information to make the Garmin GPS's "INTERFACE" page happy. You should see the radio FREQ, RATE, DIST and SNR fields filled in.

The port 2103 server is directly attached to a real survey-grade GPS reference station without an intervening radio. There isn't any radio involved that could send the data that this page is looking for. This page should and will stay blank. This is not unexpected. To see if the GPS is in differential mode check the satellite status page. It should say "3D DIFF".

Garmin Emap Issues

On most Garmin GPS's the EPE is the number on the top right of the satellite page. It says "EPE" just above a 2 or 3 digit number. The Garmin EMAP is a "feature-reduced" unit with some of the more math-oriented features deleted. It just won't tell you the EPE. To get a feel for the SA noise levels that you are seeing you'll have to run sawatch (see above) or dgpsip and look at the standard deviation numbers. You can also store a tracklog in memory and see how big the resulting "blob" is.

Interactive and Bulk DGPS modes

The dgps server tries to determine if the client code is attached to a GPS or if the client is just recording the data stream. The server is able to make this distinction only with certain versions of the client code. For an actual attached GPS-radio client, the server will send small timely interactive packets. For a recording client, the server tries to be much more efficient, and will buffer up the output until it has over 512 bytes and then send out the whole set of data out in one large packet. Since the small "interactive" GPS packets use up approximately twice as much internet bandwidth as a "bulk" packet, it is fairly important that we determine which kind of client is attached.

Currently the server will send 10 minutes worth of the more expensive interactive GPS packets. If in that time the client still hasn't sent any position reports, the server assumes that there isn't any GPS radio attached and will switch to bulk-mode packets. For those who are interested in the IP details, the server also switches the IP_TOS flag from "LOWDELAY" to "THROUGHPUT" at this time. This setting tells all the routers along the way that the packet under consideration isn't time-critical, and to use the same sort of efficient bulk-routing that ftp data gets.

Reports from Users

Witten, Germany           G12       4 sats         EPE  66 ft      rooftop
Anchorage, Alaska USA     GIII      5 sats         EPE  46 ft
Fremont, California USA   G12xl     5 sats         EPE  38 ft      indoors
Fremont, California USA   G12xl     11 sats        EPE  16 ft      rooftop lowe ant
Cambridge, Mass USA       GII+      4-5 sats       EPE ~50 ft      indoors
Atlanta, Georgia USA      G12       3 sats         EPE  42 ft      indoors
Iowa Falls, Iowa USA      G12       6 sats         EPE  36 ft      indoors 
Nenderson, Nevada USA     GII+      5 sats         EPE  23 ft      ?
Seattle, Washington USA   GIII+     4-5 sats       EPE  60 ft      indoors
Colorado Springs, CO USA  G12       5 sats         EPE  20 ft
Dallas, Texas USA         GIII+     7 sats         EPE  32 ft      ext ant outside
Graz, Austria             GIII      4 sats         EPE  100-170 ft roof window, mity-mouse ant
Bethesda, Maryland USA    GII+      4 sats         EPE  45 ft      outdoors
Minneapolis, Minn USA     L-GM100   8 sats         EPE   9 ft      outdoors
Columbia Falls, MT USA    G12xl     5 sats         EPE  20 ft      ext ant indoors
Idaho Falls, Idaho USA    GII+      6 sats         EPE  34 ft      indoors
Carver, Mass USA          G12XL     5-6 sats       EPE  40 ft      ext ant outdoor roof
Medford, Oregon USA       GIII      9 sats         EPE  26 ft      outdoors
Calgary, Alberta Canada   G12XL     7 sats         EPE  26 ft      indoors
Santa Maria, Ca USA       G12XL     5 sats         EPE  22 ft      indoors
Portland, Oregon USA      GII+      5-6 sats       EPE  51-60 ft   indoors
Muncie, Indiana USA       G-ST-PLT  4 sats         EPE  50 ft      indoors
Houston, Texas USA        GIII      -              EPE  26 ft      indoors    
Houston, Texas USA        GIII      5-6            EPE  32 ft      outdoors ext lowe ant
Vancouver, BC Canada      L-GNAV212 6-9 sats       EPE  6-15 ft    indoors window
Broomfield, Colorado USA  G12       7 sats         EPE  23 ft
Burlington, Onterio CAN   L-GM100   8 sats         EPE   4 ft      indoors
Bray, Ireland             G12       3 sats         EPE  82 ft      
Wallingford, CT USA       G12XL     7 sats         EPE  60 ft      basement lowe ant 
Zeist, Holland            G12CX     5 sats         EPE  25 m       indoors
Sonora, CA USA            G12       9 sats         EPE  16 ft      roof Global-link ant
Adelaide, South Australia G12XL     3 sats         EPE  36 metres  Lowe ant outside (East wall)
Metz, France              G12XL     3 sats(2d)     EPE  33-37meter rooftop
Sunnyvale, California USA G12XL     8 sats         EPE  21 ft      rooftop
Altus, Oklahoma USA       GIIIPilot 4-6 sats       EPE  20 ft      indoors ext. amplified ant
Chattanooga, Tennessee USA GIII+    4 sats         EPE  44 ft      indoors
Ancton, W. Sussex, England G12XL    3 sats         EPE  42 ft      Garage rooftop 
Manteca, CA, USA          GIII+     7 sats         EPE   9 ft      indoors
Emden Germany             GIII      4 sats         EPE  34 ft      external roof
Walla Walla, WA USA       eTrex     7 sats         EPE   5 ft      indoors
Colorado Springs, CO USA  GIII+     9 sats         EPE   7 ft      rooftop (Lowe Ext Antenna)

An xearth/xglobe marker file and a Street Atlas 6.0 latlon file are available that shows where previous connections have come from. Here are small and large earth pictures with the locations of DGPSIP users plotted on them. Europe is visible at approximately the 1:30 position. To display the markers in SA6 import the file into SA6 with the "import lat-lon file" pull-down. From a unix shell use the following:

xearth -once -noshade -pos 'fixed 37.55 -121.94' -markerfile markers
xglobe -nomarkers -once -ambientlight 100 -pos 'fixed 37.55 -121.94' -markerfile markers

Please note, the xearth screenshot only shows the parts of the world that are within 90 degrees of longitude of the WSRCC reference station. While users on the opposite side of the world could in theory have a thin ring of satellites in common with us, the probability of that is vanishingly small. In practice, those users 90 degrees or more away in longitude already have severe problems with DGPSIP.

If you want to be included in the "User Reports" listing, please make sure that you are running either a recent version of the Un*x dgpsip client, Jeff's WinDGPS, or SAWatch. Also make certain that your GPS is set up to send NMEA data back to the client as outlined in the previously mentioned README. The server will then automatically log the approximate latitude and longitude of the remote user.

The 6-month dgps-ip server Usage Summary complete with client software, version info, and approximate lat/lon is available.

Feedback

Enjoy and send EPE reports to dgpsip@charlotte.dontspam.wsrcc.com and bug reports to dgpsip-bugs@charlotte.dontspam.wsrcc.com

Miscellaneous Links

Single-Client Server Code

Due to popular demand, I've released a GPL-ed single-client server for Netbsd, Openbsd, Freebsd and Linux.


dgpsipd 1.06 BSD/Linux server sources (40k)

Using DGPS-IP with a third-party mapping program

If you want to simultaneously use both the dgps-program and a third party mapping program you have a small dilemma. Both programs will want to have exclusive use of the com port and to talk to the GPS directly. If you have two free serial ports you can make a Y-cable and let each program have its own port. You will still need to set your GPS to send NMEA out and expect RTCM as input.

                               tx ------------ rx 
     dgps-program  com port 1 gnd -------+---- gnd gps
                               rx -----+-|---- tx 
                                       | |
     map-program   com port 2  rx -----+ |
                              gnd -------+

If you don't have two free com ports, but have two computers with one free com port each then you can do the same thing by running the dgps-program on a second computer. Barring that, you'll have to push on your mapping program vendor to incorporate internet dgps into their program.

DGPSIP - A Look Back

A retrospective of the first 1.3 years of running the dgpsip server.

Mini FAQ

I get these questions quite a bit, so I decided to save a bit of time and answer them here.

Q: How does DGPS work?

A: Plain GPS's work by measuring the distance to each visible GPS satellite (called the pseudorange). The GPS then calculates its own position using triangulation from these pseudoranges. Atmospheric distortions and intentional errors (in the case of Selective Availability) will add errors to the pseudorange measurements. DGPS reference stations sitting in precisely surveyed locations can measure these errors and then send out pseudorange corrections for each of the satellites visible to it. In DGPS mode, the GPS simply corrects its own pseudorange measurements by the amount the DGPS reference station indicates. The GPS then performs the triangulation calculations to work out its own position.

Q: I don't have an internet connection where I am going. Can I just use two GPS's and subtract the readings?

A: This is jokingly referred to as "Poor Man's DGPS". It doesn't work in practice.

Q: Can I download some corrective data from the internet after taking a field reading?

A: Yes, if you have the right kind of GPS. Survey grade GPS'S will record enough information to allow this kind of post processing. The only consumer grade GPS that is advertised to do this is the Delorme Earthmate GPS when used in conjunction with Delorme's "Post Pro" software and a portable computer.

In addition, some Garmin handheld units may also implement an undocumented garmin/garmin packet type that can be used to generate the pseudorange from. See Garmin async packet tools.

Q: I've heard some internet sites can post-process NMEA. Is there anything to that claim?

A: I've never seen a before and after plot of such data. Until independent test results are published on the net, I'm inclined to believe that this is simply a variation of the poor man's dgps -- something that works sometimes but can't be counted upon.


Valid XHTML 1.0!.Valid CSS! [ Powered by Fedora Core ] IPv6 Ready

wolfgang.rupprecht+web@gmail.com (Wolfgang S. Rupprecht)
WSRCC Home Page || Up One Level
last updated $Date: 2007/05/25 03:15:52 $ ..