Autonomous Lawn Mower Navigation

My group is trying to navigate a lawn mower in an open field using one of two methods.

Having two GPS units and using what we are referring to as relative GPS:
Essentially we have one stationary GPS that assumes the first point it reads is the point it is at and all other data it receives has error in it. It calculates this error and sends it over to the "rover" so that it may calculate what the error is and subtract it from its own coordinates. We are assuming since the units will be in a 30 m radius the errors received by both GPS will be similar. Is this a correct assumption. Is there a way to get <1m accuracy using 2 GPS units?

The second method is using an accelerometer, gyroscope, and single GPS combined with a Kalman filter.
While there is information on combining the accelerometer and gyroscope, I'm not sure how to begin filtering the the GPS into this system.

Any advice is appreciated on how to waypoint navigate our lawn mower with a minimum of 1m of accuracy.

You need marks in the ground to get 1 meter accuracy, or perhaps a IR detection system or a laser beam.

If you are going to use an accelerometer and gyro, perhaps you could add a magnetometer.

I have read that if you do the Differential / Real-Time Kinematic GPS right you should get accuracy of a few centimeters. I would think that is more than sufficient.

Khamey:
Essentially we have one stationary GPS that assumes the first point it reads is the point it is at and all other data it receives has error in it. It calculates this error and sends it over to the "rover" so that it may calculate what the error is and subtract it from its own coordinates.

After you try this please come back and tell us how well it worked. I'd considered trying it out myself but ... too many projects.

So far it seems that the errors that each GPS gets are independent of each other. At about a foot apart our Due calculates the approximate distance between the two is anywhere between 9m and 90m which makes no sense. Worse case scenario is that they should read about 20m apart assuming each GPS has 10m accuracy and each is assumed to be right next to each other at first reading then eventually drifts to the farthest part away of its accuracy.

The first locations from a GPS might not be as precise as subsequent fixes. They often give you a less accurate answer in order to give you a fast answer.

What I think I would do is send the base station location to the mobile station and give an indication when the two agree within some reasonable margin (like 100 cm). Then switch to Differential GPS.

A possible alternative is to get accuracy data from the base station GPS itself. Then you can throw out data until accuracy gets into the expected range.

After being outside a while the readings went from about 9m to 0m when they were about 1m apart. I think it's safe to assume the two GPS receive different errors therefore making the an infeasible solution. You keep mentioning differential GPS but I don't know how that would work, is it significantly different than what I am trying to do?

Khamey:
You keep mentioning differential GPS but I don't know how that would work, is it significantly different than what I am trying to do?

Not if you are doing it right. "Differential GPS" uses a fixed ground station to provide error data to moving stations.

Are your two GPS modules the same make, model, and version?

Yes exactly the same. How long does a base station need to gather data before it has a known location?

Don't you need a surveyed point for the GPS to compare with to do differential?

JimEli:
Don't you need a surveyed point for the GPS to compare with to do differential?

You should only need a surveyed position if you want absolute coordinates. If you just want relative coordinates ("Where am I relative to the lawn boundary?") I think you just need a fixed location that both agree on. I would think that once both units have current ephemeris data they would agree on where they are.

If the base station is going to be in the same place each time you could calculate a long-term median position to use as the 'known' position.

johnwasser,

could you give a short explanation of the process you are describing.

Do we put the GPS units in the same location until they agree on a coordinate then start doing calculations? Or are we surveying for a set time until they have a good average location and then doing locations. Things are clearing up and we are doing a test today. Your advice is very helpful.

RTK (Realtime Kinematics) is another way to get accurate positioning from a GPS. It takes more computer power than an Arduino can supply but a Beagle Board (or maybe a Raspberry Pi) can run it:

I don't think you can do "differential GPS" just with two regular GPS modules. You need a special device
which is in the thousand dollar ballpark rather than the $50 ballpark.

I have done a bunch of experiments with two regular GPS modules to see if I got a more precise location
from them, and the answer seems to me, to be no. You do get some situations where one has a fix
and the other doesn't have a fix, but in terms of precision, not much improvement over the normal
position distribution noise.

Perhaps you could use one of these to cover the differential aspect.

I would imagine with some basic calculus programming you could at least know fairly accurately your relationship
with your starting point or any other via you have exact coordinates of.

I read quite extensively about this IMU until I realized the accelerometer wasn't accurate enough for my project. Seems like a pretty good product.