Copter attempts to fly home using dead reckoning if the GPS quality deteriorates or an EKF failsafe triggers
CAUTION: This script only works for Copter 4.3 (and higher)
Deadreckoning will only be activated while the vehicle is in autonomous modes (e.g. Auto, Guided, RTL, Circle, Land, Brake, SmartRTL or AutoRTL modes). Deadreckoning is not activated in pilot controlled modes (e.g. Loiter, PosHold, etc) because we assume the pilot could simply switch to AltHold and fly the vehicle home manually.
## Parmeter Descriptions
- DR_ENABLE : 1 = enabled, 0 = disabled
- DR_ENABLE_DIST : distance from home (in meters) beyond which the dead reckoning will be enabled
- DR_GPS_SACC_MAX : GPS speed accuracy maximum, above which deadreckoning home will begin (default is 0.8). Lower values trigger with good GPS quality, higher values will allow poorer GPS before triggering. Set to 0 to disable use of GPS speed accuracy.
- DR_GPS_SAT_MIN : GPS satellite count threshold below which deadreckoning home will begin (default is 6). Higher values trigger with good GPS quality, Lower values trigger with worse GPS quality. Set to 0 to disable use of GPS satellite count.
- DR_GPS_TRIGG_SEC : GPS checks must fail for this many seconds before dead reckoning will be triggered.
- DR_FLY_ANGLE : lean angle (in degrees) during deadreckoning. Most vehicles reach maximum speed at 22deg
- DR_FLY_ALT_MIN : min alt (above home in meters) during deadreckoning. zero to return at current alt
- DR_FLY_TIMEOUT : timeout (in seconds). Vehicle will attempt to switch to NEXT_MODE after this many seconds of deadreckoning. If it cannot switch modes it will continue in Guided_NoGPS. Set to 0 to disable timeout
- DR_NEXT_MODE : flight mode vehicle will change to when GPS / EKF recovers or DR_FLY_TIMEOUT expires. Default is 6=RTL, see FLTMODE1 parameter description for list of flight mode number. Set to -1 to return to mode used before deadreckoning was triggered
## How to use
1. set SCR_ENABLE = 1 to enable scripting (and reboot the autopilot)
2. set SCR_HEAP_SIZE to 80000 or higher to allocate enough memory for this script
3. set DR_ENABLE = 1 to enable dead reckoning
4. optionally set DR_GPS_SACC_MAX and/or DR_GPS_SAT_MIN parameters to adjust how bad the GPS quality must be before triggering
5. confirm "DR: waiting for dist (Xm <50m)"messageisdisplayedongroundstation(soyouknowscriptisworking)
6. arm and takeoff to a safe altitude
7. fly at least DR_ENABLE_DIST meters from home and confirm "DR: activated!" is displayed on ground station
If this script senses low GPS quality or an EKF failsafe triggers
- vehicle will change to Guided_NoGPS mode
- vehicle will lean in the last known direction of home (see DR_FLY_ANGLE)
- if GPS recovers or EKF failsafe is cleared the vehicle will switch to DR_NEXT_MODE (if -1 then it will switch back to the mode in use before the GPS/EKF failure)
- if the timeout is surpassed (see DR_FLY_TIMEOUT) the vehicle will try to switch to DR_NEXT_MODE. If it fails to change it will continue in Guided_NoGPS but keep trying to change mode
- the pilot can retake control by switching to an "unprotected" mode like AltHold, Loiter (see "protected_mode_array" below)
## Testing in SITL
- set map setshowsimpos 1 (to allow seeing where vehicle really is in simulator even with GPS disabled)