Non-GPS Navigation¶
These are the available options that allow a vehicle to estimate its position without a GPS. Once enabled this allows all autonomous and semi-autonomous modes just as they do would a GPS is available.
Note
unless added via a custom build (see ArduPilot Custom Firmware Builder), Beacon functionality is not included in standard firmware for autopilots having less than 2MB of flash.
Note
Most of the above systems (except Beacons) require that the ORIGIN be set manually, except if a GPS is present. In order to do this the user must either use the GCS to set Origin, as shown below using Mission Planner, or use a lua script like this one
Persistent Origin Storage¶
In ArduPilot 4.7 and later, the EKF origin can be automatically saved and restored across power cycles using the following parameters:
AHRS_OPTIONS bit 3 (RecordOrigin): When enabled, the current EKF origin is automatically saved to parameters whenever it becomes valid (e.g. after GPS lock or manual origin set). The saved origin is stored in:
AHRS_ORIGIN_LAT - Last known origin latitude (degrees)
AHRS_ORIGIN_LON - Last known origin longitude (degrees)
AHRS_ORIGIN_ALT - Last known origin altitude (meters)
AHRS_OPTIONS bit 4 (UseRecordedOriginForNonGPS): When enabled, the AHRS will automatically restore the saved origin on boot when GPS is not being used. This allows position-controlled flight modes (Loiter, Auto, Guided, etc.) to work indoors without GPS after the origin has been recorded from a previous flight.
This eliminates the need to manually set the origin via GCS or Lua script on every power cycle when flying indoors with non-GPS position sources.
Typical setup for indoor flight with optical flow or external navigation:
Enable AHRS_OPTIONS bit 3 to auto-record the origin
Fly outdoors first (or manually set AHRS_ORIGIN_LAT, AHRS_ORIGIN_LON, AHRS_ORIGIN_ALT) to establish a valid origin
Enable AHRS_OPTIONS bit 4 to auto-restore the origin for non-GPS flights
On subsequent indoor flights, the origin will be automatically restored from the saved parameters
Note
ArduSub enables bit 4 (UseRecordedOriginForNonGPS) by default since underwater vehicles typically operate without GPS.
Note
The low cost IMUs (accelerometers, gyros, compass) used in most autopilots drift too quickly to allow position estimation without an external velocity or position source. In other words, low-cost IMUs on their own are not sufficient for estimating position.
Note
A board with more than 1MB of flash is required to run non-GPS navigation, except for Vicon as 1MB boards still support the GPS_INPUT message, although they don’t support the GLOBAL_VISION_POSITION_ESTIMATE so they have to be run using the GPS_INPUT message. See Firmware Limitations for details.