The way I've seen this done is using an "optical flow sensor" (an optical mouse sensor) with a lens to set the focus at a greater range.
Working on an autonomous Quadcopter. It's stable up and down using pressure or ultrasonic. Faces the same direction using a compass. Plenty accurate when it's 300ft up using GPS. Can use laser or IR remote to find its landing spot within inches.How do I keep it hovering in one place without slowly drifting over an arbitrary location when it's low 10ft above the ground?GPS drifts around in a 50ft circle. It does better in the short term doing nothing to correct drift, ignore GPS, just stay level, without wind. That's my best result so far. Do nothing! Any suggesting for improvement would be appreciated.
As you note, GPS is not granular to the level you need. A trick with using GPS is to use one or more known ground location(s) that is/are fixed for reference, and triangulate off of that.
If you're talking about differential GPS, that helps compensate for the deliberate errors introduced to degrade the GPS accuracy,