GPS-Denied Loiter via Object Recognition


UPDATE: There has been recent interest in developing this code feature further. Currently, it is in a buggy prototype form (code link).

15 Minutes of Vision-based position-hold with 3DR Solo: This is the first iteration of a vision-based position hold controller. This initial implementation is simply a roll/pitch angle PD controller. However, it works surprisingly well after limited tuning.

The video shows a full flight with limited pilot input (during take-off and landing only). During the ~15min flight, the copter autonomously loiters above the beacon placed on the ground. Wind gusts push the copter around, but no pilot corrections were required. Thoughts on controls improvements are included below.

The current system is fully-functional in any lighting condition (night/day) up to altitudes of 15 meters. The system iuses object-recognition, which eliminates position drift over time, enabling GPS-denied autonomous flight for extended periods (i.e., much longer than the battery will last).


3DR Solo (*disconnected GPS)
IR-LOCK Sensor (*custom-calibrated)
MarkOne Beacon
SF Rangefinder
Modified ArduCopter-Solo Code


As aforementioned, the current iteration of the controller is simplistic, and is sensitive to wind gusts. The object recognition and rangefinder readings are used as input to the roll/pitch angle PD controller. The controls performance could be improved via more sophisticated sensor fusion and filtering. It should also be noted that this demo includes a custom-calibrated sensor/lens, which we use for particular commercial projects. This calibration should be improve further in future iterations.


After disconnecting the GPS module and modifying the flight code, the heading state estimated by the flight code drifts in a strangely consistent manner. During the 15 minute flight, the copter slowly makes a 360 degree yaw rotation. This needs to be investigated further (see log file linked above). Perhaps, the issue can be solved with some simple parameter modifications.

1 Like

Hi~ Thomas

I want to do this experiment.
I change ArduCopter V3.6.7 Code.
ignore_checks = true
pass GPS check when to switch Loiter mode,
If drone see IR-LOCK, drone will make a sound, This is test video

about 1.5 Minutes of Vision-based position-hold with F450 Cube-Pixhawk2
but drone will fly away…
i change PLND_EST_TYPE = 0 , The same result

this is log file

Do you have this experience?

Have a nice day.

The GPS-denied code used in our Blog post is not in the ArduCopter master code. It was experimental, and it requires more development work if you want to use it reliably.

In the ArduCopter master code, GPS is required for Precision Land and Precision Loiter.