GPS: When is HDOP "good enough?"
Phil Pilgrim (PhiPi)
Posts: 23,514
In my attempts to help get a decent GPS guidance system working for my students' floating ROVs, I had the program wait until the status message from GPRMC changed to "A" before it started navigating. Well, that wasn't good enough, since the first waypoint became a moving target as more satellites were acquired.
So I've decided to add monitoring of the HDOP (horizontal dilution of position) field in the GPGSA message. This is a unit-less value where smaller is better and 1.00 is considered "perfect," although I've seen values as low as 0.90. When the GPS first comes on, and after the status changes to "A," you can watch the HDOP begin to fall. But I'm wondering, "How low is low enough to begin navigation?"
The program in the attached archive waits until HDOP is less than 1.10, then begins writing a KML file to the Activity Board's SD card. This continues for two minutes, at which point the file is closed. The SD card can then be inserted into a PC and the file loaded directly into Google Earth, which shows the track traversed. Here's an example:
The 1.10 threshold seems to be low enough for accurate positioning, but I wonder if there are situations outdoors under an open sky when that cannot be attained. If so, the ROV would be waiting forever to begin navigating.
-Phil
So I've decided to add monitoring of the HDOP (horizontal dilution of position) field in the GPGSA message. This is a unit-less value where smaller is better and 1.00 is considered "perfect," although I've seen values as low as 0.90. When the GPS first comes on, and after the status changes to "A," you can watch the HDOP begin to fall. But I'm wondering, "How low is low enough to begin navigation?"
The program in the attached archive waits until HDOP is less than 1.10, then begins writing a KML file to the Activity Board's SD card. This continues for two minutes, at which point the file is closed. The SD card can then be inserted into a PC and the file loaded directly into Google Earth, which shows the track traversed. Here's an example:
The 1.10 threshold seems to be low enough for accurate positioning, but I wonder if there are situations outdoors under an open sky when that cannot be attained. If so, the ROV would be waiting forever to begin navigating.
-Phil
Comments
That didn't work out very well, unfortunately. True differential GPS only works when both units are receiving from the same satellites. The other issue with navigation is that the mobile unit requires real-time updates. Although the ROVs can have XBees plugged in, I have not found their range to be adequate for the kinds of surveys we're undertaking.
All that aside, the PAM-7Q GPS units work fine by themselves, once enough satellites have been acquired. My only question is how to set a reasonable threshold on HDOP that ensures accuracy and which can reasonably be obtained from every power-up after a not-too-long interval. So far 1.10 seems reasonable, but I've only been at this a day; and there might be days when the satellites are so poorly distributed that that's not attainable.
-Phil
It assumes with 7 satellites your GDOP is reasonably low...
Maybe the satellite count is the way to go. OTOH, with my Garmin 405 wrist GPS, I just wait until the velocity value goes to zero and stays there for a couple minutes. That's another possibility for the ROV.
-Phil
How about watching HDOP and when it stops falling, even if above 1.10, then consider that as good as you are going to get and go?
Except that when there are nearby tall buildings or narrow areas the accuracy may suddenly drop catastrophically, but this varies a lot with the type of unit I use. MKT or Sirf Star III handle that pretty good.
I like Sapphire's suggestion BTW. It makes intuitive sense, although I've not tried that.
-Tor
Here is an example of a high HDOP with a lot of satellites in view, it happens:
2. If, after 5 minutes it's lower than 2.00, that's good enough.
3. Otherwise, continue waiting until it's lower than 2.00.
Their programming exercise for the day is how to express the until condition that causes the repeat loop to terminate per the above conditions.
-Phil