# Differential GPS or Simple GPS for Robot navigation and odometry?

I am building a rover which can navigate autonomously. I do not want to use wheel encoders for generating robot odometry since it causes drifts due to slippage etc. I want to use GPS for generating odometry. Will it be useful for me to use the differential GPS approach or shall I use a simple GPS? I am thinking of using DGPS because it enhances the accuracy to great extent, But at the same time, I think that in generating odometry, absolute gps values are not of importance. Instead, relative gps values are important to find for example, the distance covered by the robot.

Any suggestions on this ? Thanks

Do not give up on encoders. They are a great complement to GPS. I don't know what precision you want to reach, or what terrain your robot will operate in, but wherever it will be, encoders will give you good information about momentary position changes. Of course it will have some error, but when measured over small time period (i.e. 1s) it will be typically much smaller than accuracy of even DGPS.

The problem is encoder error will accumulate over time, so eventually your robot will end up in a completely different position than it should. That's why you should use your GPS data to correct data from encoders (possibly using Kalman filter). Check out this great answer about a sensor fusion.

Benefits of using GPS + encoders:

• GPS signal may be lost (indoors, tall buildings nearby, tunnels, etc.) - how will you know where are you then?
• Even when you lay down your GPS receiver on a table, the position will slowly drift around some central point - data from encoders may be used to correct for that. This is also the reason why you can't use GPS data to calculate distance covered by the robot (not with a ~1m accuracy at least)
• encoders are useful to controlling robot speed, and making sure that it drives straight (which is very hard using open loop PWM)

GPS vs DGPS

Remember that accuracy of i.e. +/- 2m doesn't mean that you will have a constant offset from real position to the north, or any other direction. The readings will float around some position. That's why I would suggest going for higher precision modules

• Thanks for the detailed explanation. The rover will always be working outdoors like in parks etc. So, GPS signal loss won't be problem in my case. All that I need is that the GPS should give the same value at a specific point. The value at the same point should not vary in different iterations. Secondly, If I move from point A to point B, then the calculated distance using gps values at both points should match the actual distance covered on ground. Based on above reqs, is DGPS is a solution for this, or do I only need a simple high precision gps with no need of dgps implementation. – nxr Sep 8 '16 at 14:54
• @b2meer What I'm saying is: whatever GPS you will use, the position it returns will float around true position. The only difference is how big the oscillations will be. Anyhow, you won't get exactly the same readings of the same position between iterations, when using only GPS data. Of course if you get high precision module the error might be small enough to ignore it. – mactro Sep 8 '16 at 16:56
• Alright. Can you recommend any high precision module with high frequency update rate as well ? – nxr Sep 9 '16 at 11:42

If your budget is large (>\$5000) then use an off-the-shelf RTK GPS and you will get a precision of around 1.5cm$\sigma$. You will also need a RTK subscription and internet connection, or set up your own base station to provide atmospheric corrections (valid for 20-30km). Alternatively there is this low-cost RTK unit. However I have previously used a low cost (< \$300USD) setup with a L1 GPS, IMU and camera (making observations of landmarks) using an extended Kalman filter in order to get <7cm $\sigma$ accuracy. I say accuracy rather than precision because I did a simulation using the sensor specs and so I knew the ground truth. I didn't use encoders but I would highly recommend it. From memory it took me around 4 days to implement and debug the filter.