
Your drone uses two separate systems to hold its position near the ground: a visual positioning system (VPS) that reads surface texture through downward-facing cameras, and a set of ultrasonic sensors that bounce sound pulses off whatever's below. Over land, both work reliably. Over water, both fail in specific and predictable ways.
The VPS problem: your drone sees a mirror
The VPS cameras expect a textured, opaque surface, something like pavement, grass, or gravel. Water gives them none of that. In calm conditions, the drone is essentially looking at a near-perfect reflection of the sky. The system can't lock onto anything meaningful, so it starts drifting. The drone may sink slowly, jerk sideways, or hover erratically as it constantly misreads its own altitude.
Choppy or moving water is worse. The constantly shifting texture confuses the system even more than a mirror-flat surface, because the system detects movement and tries to compensate for it. Pilots sometimes report their drone appearing to "chase" wave patterns across the surface.
The ultrasonic sensor problem: water absorbs sound
Ultrasonic sensors work by measuring how long a sound pulse takes to bounce back from the ground. Hard surfaces reflect cleanly. Water partially absorbs the pulse, which throws off the timing. Some drones interpret this as being closer to the ground than they actually are and begin a slow, uncommanded descent toward the surface.
At very low altitudes, under about 3 meters, this effect becomes pronounced. A drone that would hold 2 meters perfectly over grass may slowly sink toward the water without any input from you.
The fix is simple
Turn off VPS before flying over water. On DJI drones, go to Settings > Safety > Advanced Safety Settings and disable Visual Positioning. Once VPS is off, the drone relies on GPS and barometric pressure for altitude hold, both of which work identically over any surface. The baro reads air pressure, not the ground below. GPS reads satellites. Neither cares that you're over a lake.



