Commit Graph

42 Commits

Author SHA1 Message Date
Daniel Agar ca893e55a5 ekf2: allow yaw estimator to run on ground (not at rest) and init yaw align
- add a common resetMagStates() that uses the WMM to reinit mag states (I & B) if possible
2022-04-04 10:42:56 -04:00
Daniel Agar 2f0c2fa126 ekf2: replace _inhibit_ev_yaw_use with local flag 2022-04-04 10:42:56 -04:00
Daniel Agar cdf9e6d35a ekf2: merge runOnGroundYawReset() and runInAirYawReset() 2022-04-04 10:42:55 -04:00
Daniel Agar f8a33e551c ekf2: allow yaw estimator to run when disarmed (if not at rest) 2022-04-04 10:42:55 -04:00
Daniel Agar 741310bc36 ekf2: reset mag_lpf (by zeroing _mag_counter) when resetting mag bias (or changing mags)
- so that there's new filtered data avaiable for reset
2022-04-04 10:42:54 -04:00
Daniel Agar 4234e9a390 ekf2: clear test ratios, flags, etc when stopping mag fusion 2022-04-04 10:42:54 -04:00
Daniel Agar a8824b4e60 ekf2: resetMagHeading() split out simple init case 2022-04-04 10:42:53 -04:00
Daniel Agar 7ef38112d2 ekf2: return saved mag bias variance when not in 3d magnetometer fusion
- the estimated mag bias was requiring > 30 seconds of continuous 3d
mag fusion to be reported stable (and saved back to mag cal), this
restores the original intent requiring 30 seconds of accumulated valid
3d mag fusion
2022-03-14 21:03:41 -04:00
Daniel Agar a430f0ccae ekf2: add simple zero velocity update when vehicle at rest (#19149)
- further decreases initial tilt alignment time (now down to 2.5 seconds if still) and improves initial bias estimates
2022-03-12 12:56:31 -05:00
Daniel Agar b7e0f17c6a ekf2: minor position/velocity reset cleanup
- try to use avoid resetVelocity() call where possible
 - reset timeouts centrally
2022-03-08 11:16:35 -05:00
Daniel Agar c10ea97967 ekf2: fusion helpers return success/fail and set pos/vel update timestamps centrally (if healthy) 2022-03-08 11:16:35 -05:00
Daniel Agar d6d529539d ekf2: consolidate and simplify gnd effect logic 2022-02-22 16:59:10 -05:00
Daniel Agar 1d7791dad6 commander: monitor GPS validity and EKF2 dead reckoning
- ekf2: expose dead reckoning as control status flags
 - commander:
    - add GPS validity check
    - in AUTO MISSION if dependent on GPS then a loss of GPS will
2022-02-22 09:46:21 -05:00
bresch edabfd2f0e ekf_hgt: call specific height reset function instead of generic one
- Also use the delayed current data instead of newest that might not be
available (gps buffer is sometimes empty if the dt between samples is
larger than the delayed horizon).

- Separate "baro fault" from "baro intermittent": intermittent is a
  temporary failure and should prevent from switching to baro right now,
  but "fault" means that it should never be used anymore

- In case of height timeout, check for metrics but not for consistency
  as the filter is likely to have diverged already.
2022-02-22 11:49:25 +01:00
bresch cba73585e1 use recorded last sensor timestamp for intermittent check 2022-02-22 11:49:25 +01:00
Daniel Agar 591b7b6934 ekf2: add new estimator_gps_status.msg
- includes the estimator status check fail bits broken out as descriptive booleans
 - absorbs ekf_gps_drift.msg
2022-02-21 08:58:59 -05:00
bresch 917910f3e2 ekf: pass a float by copy instead of a constant ref 2022-02-02 17:43:25 -05:00
Daniel Agar 88ffc177f7 ekf2: utils add getEulerYaw() that uses the best rotation sequence 2022-02-02 08:54:03 -05:00
Daniel Agar 999737ddd5 ekf2: refactor mag control
- remove class _mag_sample_delayed
 - update mag fusion call graph to use mag sample delayed functionally
 - Ekf::resetMagHeading()
   - use low pass mag directly, but check if valid (magnitude)
   - MAG_FUSE_TYPE_INDOOR treat like auto if heading required
2022-01-31 11:47:10 -05:00
Daniel Agar 90358f078f add odometry reset counter (ekf2, mavlink, etc) 2022-01-31 09:19:36 -05:00
Daniel Agar ae3070bbf1 ekf2: make filter update period configurable
- introduces new parameter EKF2_PREDICT_US to configure the filter
update period in microseconds
 - actual filter update period will be an integer multiple of IMU
2022-01-26 10:57:09 -05:00
bresch e89e3c1b0c ekf2: extract logic to test yaw emergency estimate quality 2022-01-19 09:05:41 -05:00
bresch ea80c5027e ekf2: split yaw estimator state getter into several functions 2022-01-19 09:05:41 -05:00
Daniel Agar 92a5bbe97f ekf2: improve ring buffer sizing and dynamically allocate 2022-01-19 09:04:53 -05:00
Daniel Agar 35502c249d ekf2: don't use Vectors for height innovations (baro, rng, etc) 2022-01-03 09:20:20 -05:00
bresch 9147d5ea5c ekf2: use ground as ekf altitude datum when in range primary hgt mode 2021-12-10 15:18:10 +01:00
bresch 5e790da634 ekf2: reset the timeout timer in the reset function directly 2021-12-10 15:18:10 +01:00
bresch 0d874cf00a ekf2: move aiding start details in dedicated function
When an aiding source needs to be started, simply call the corresponding
starting function and any required reset is handled in there.
2021-12-10 15:18:10 +01:00
Matthias Grob 68e2940f58 math: support max of three values additional to min and use it everywhere 2021-12-07 21:06:51 +01:00
Matthias Grob 10ceea2fe6 geo: refactoring on comments and usage 2021-12-06 14:30:14 +01:00
Thomas Debrunner 8db7a6225b geo: Moved the map_projection_* functions and state into a self-contained C++ class 2021-12-06 14:30:14 +01:00
bresch 8aae39e82a ekf2: move GPS control logic to separate source file 2021-11-01 13:59:34 +01:00
bresch 9afc390552 ekf2: move gps yaw reset in starting function 2021-11-01 13:59:34 +01:00
bresch d0f89f7fff ekf2: refactor wind reset functions 2021-10-26 10:18:56 +02:00
bresch 6e8f0e92ff ekf2: refactor airspeed fusion control logic 2021-10-26 10:18:56 +02:00
bresch 8873e92c7c ekf: force fallback to baro if GPS is stopped while in GPS height mode
Otherwise, no height aiding source is used
2021-10-26 10:05:28 +02:00
bresch 01d0b8800e commander: report GNSS yaw fault to user 2021-08-05 11:10:02 +02:00
bresch 11cd51c132 EKF: allow emergency reset in GNSS yaw and EV yaw aiding modes 2021-08-05 11:10:02 +02:00
Daniel Agar 93aa6e3f78 ekf2: baro bias publish minor cleanup
- naming consistency (estimator prefix as "namespace")
 - only publish if baro is available and bias is changing as a small logging optimization
 - avoid unnecessary copying (get const reference to status directly)
 - trivial code style fixes
2021-08-02 13:59:38 -04:00
bresch 54c7e74de3 EKF: add baro bias estimator using GNSS altitude 2021-07-19 16:53:45 -04:00
Daniel Agar c8e6d93cc0 ekf2: backend apply code style (generated code still exempt) 2021-07-15 21:15:41 -04:00
Daniel Agar 2cf66a5d8f ekf2: move EKF out of ecl 2021-07-15 10:38:24 -04:00