The GPS is an amazing piece of technology. Think about it. For less than $100, you can determine your position within a few meters anywhere in the world. One hundred years ago, you needed a compass, sextant, clock, and luck to estimate your position. I’ve used a Garmin Etrex Vista extensively for field checking during orienteering, and I’ve been pleased with the reliability and ease of use of both my Garmin receiver and GPS in general. However, the GPS has several limitations that you must be aware of whether building a robot or engaging in land navigation.
- A GPS tells you where you are, not how to get where you want to go. Sure, a GPS can tell you direction and distance to your destination, but the receiver knows nothing about the terrain and will mindlessly direct you over tall mountains, across deep canyons, or into alligator infested pits. Many receivers have integrated street maps, but those are no help when traveling off road.
- A GPS gives heading only while in motion. Many receivers incorporate magnetic compasses to provide heading while stationary.
- Most receivers provide heading relative to true north while compasses give heading relative to magnetic north. The difference can be significant. In the contiguous 48 US states, the difference ranges from about -20 to +20 degrees.
- A GPS is sensitive to interference. Buildings, trees, people, and clouds can and will degrade the accuracy and precision of the position fix, possibly to the point of preventing the receiver from getting any position fix.
- Even with good reception, the GPS reported position will wander. I’ve seen the position from my Garmin receiver jump hundreds of meters on a clear day.
- A GPS receiver requires batteries. This can be a big disadvantage in land navigation when power sources are not available and getting lost is potentially fatal.
A GPS receiver does not allow you to turn your brain off during land navigation. Similarly, a robot using a GPS receiver requires design and software that can deal with the limitations of GPS.
I originally intended to use my Garmin receiver in the robot because I already own the receiver. Also, the receiver has a built in magnetic compass and outputs NEMA data with the magnetic heading. But, my robot is small, and this receiver is, in comparison, large and heavy. Sparkfun sells many small and light weight GPS receivers. The selection is rather overwhelming, even with the Sparkfun GPS Buying Guide. As best as I can tell, nobody has done an objective hobbyist-level comparison of common GPS modules, so selection really is a shot in the dark based on availability, limited data sheets, and anecdotes turned up on Google. Anyway, I’ll summarize my findings:
- EM406 – Uses the well-respected although several year old SiRF III chipset. Only supports 1 Hz updates. Supports an optional binary protocol. Detailed documentation. Runs on 5V power supply, which is desirable for my robot.
- LS20031 – Uses the less well known but still common MediaTek chipset. This chipset is newer than the SiRF III. Some folks report that the receiver is very good, but I cannot find a useful comparison to the SiRF III. The latest revision (presently available from Pololu) provides 10 Hz updates. Does not support a binary protocol. Limited but adequate documentation. Runs on 3.3V power, which is a disadvantage for me.
- Venus – The specifications look very good, but I found an above average number of anecdotes about trouble getting good fixes. Also, the Sparkfun breakout board for this requires an external antenna.
- GS407 – Uses the uBlox chipset with 4 Hz updates. This chipset is highly regarded on some UAV websites, like DiyDrones and Paparazzi. But, the receiver is relatively expensive, has no on-board battery for quick startup using retained almanac and ephemeris data, and has a difficult to use connector. Detailed documentation. Also supports a binary protocol.
There are, of course, many more GPS modules. Sparkfun seems to have the biggest selection and carry all of the modules popular with hobbyists. I ignored some of the older Sparkfun modules simply to keep my search manageable. Based on the limited data I’ve found, I purchased a LS20031 module. The fast updates, low cost, and new chipset swayed my decision, but the EM406 and GS407 are strong candidates. Another day, I might have chosen either of those.
I just got my LS20031 in the mail. I soldered four wires to the VCC, TX, RX, and GND pads. Then, I applied 3.3V from a bench supply and attached the TX line to my TTL-232R-3V3 cable from Adafruit. The data sheet promises a 9600 bps 8N1 logic level serial interface, but my module runs at 57600 bps 8N1 ought of the bag. The module has a red LED that flashes briefly at power on then flashes once per second after acquiring a position fix. So far, I’m impressed with the module. It’s small and light. And, it got a position fix with six satellites quickly indoors where my Garmin cannot get a fix. I didn’t measure time to first fix, but cold start is on the order of minutes and warm start is less than a minute.
Next up, I’ll interface the GPS module to my micro-controller. Things are starting to come together, and my stack of parts should start looking like a robot soon.