Daniel Agar
19a2b4ec31
ekf2: GNSS yaw only reset test ratio for new samples
...
- otherwise external test ratio monitoring could trigger a false positive
2023-03-14 21:49:24 -04:00
bresch
fd33e60f78
ekf: fix GNSS yaw fusion wrapping
2023-03-13 10:46:34 +01:00
Daniel Agar
b3cc945a5a
ekf2: merge runOnGroundYawReset() + runInAirYawReset() into unified magReset()
2023-03-09 09:08:27 -05:00
Daniel Agar
c1f244a6fd
ekf2: decrease EKF2_MAG_YAWLIM default 0.25 -> 0.2 rad/s ( #21264 )
2023-03-09 09:07:54 -05:00
Daniel Agar
4dda5a97d8
ekf2: mag_3d check mag bias variance before allowed to update all states (orientation)
2023-03-08 15:12:48 -05:00
Daniel Agar
d45aeae1de
ekf2: add and share centralized method to clear inhibited state Kalman gains
2023-03-07 13:27:57 -05:00
Daniel Agar
3fac85369e
ekf2: gps control use adjusted velocity and position for reset
2023-03-06 09:03:39 -05:00
Daniel Agar
b5a6d6db0d
ekf2: fix controlEvYawFusion() yaw reset
2023-02-24 16:59:59 -05:00
Daniel Agar
98263de17b
ekf2: move aux vel helpers to auxvel_fusion.cpp
2023-02-22 09:08:33 -05:00
Daniel Agar
a199df78cc
ekf2: move mag control helpers to mag_control.cpp
2023-02-22 09:08:33 -05:00
Daniel Agar
c20e4e4421
ekf2: move stopFlowFusion() to optical_flow_control.cpp
2023-02-22 09:08:33 -05:00
Daniel Agar
3a317ec18c
ekf2: move gps helpers to gps_control.cpp
2023-02-22 09:08:33 -05:00
Daniel Agar
9ec3f30ae1
ekf2: move gps buffer pop to controlGpsFusion()
...
- controlGpsFusion() now owns yaw estimator update
2023-02-22 09:08:33 -05:00
Daniel Agar
a867bb7d88
ekf2: let controlAirDataFusion() update yaw estimator TAS
2023-02-22 09:08:33 -05:00
Daniel Agar
60856ebe62
ekf2: move range buffer pop to controlRangeHeightFusion()
2023-02-22 09:08:33 -05:00
Daniel Agar
08f111f694
ekf2: consolidate airspeed fusion logic and helpers
...
- pass new airspeed sample around when available
- can't completely eliminate _airspeed_sample_delayed until resetWind()
called from sideslip fusion is updated
2023-02-22 09:08:33 -05:00
Daniel Agar
241cee2bb7
ekf2: move airspeed buffer pop to controlAirDataFusion
2023-02-22 09:08:33 -05:00
Daniel Agar
0711a34d0e
ekf2: move flow buffer pop to controlOpticalFlowFusion
2023-02-22 09:08:33 -05:00
Daniel Agar
ed8cef6cf0
ekf2: move controlAuxVelFusion control.cpp -> auxvel_fusion.cpp
2023-02-22 09:08:33 -05:00
Daniel Agar
b4e845d7c0
ekf2: move controlDragFusion control.cpp -> drag_fusion.cpp
2023-02-22 09:08:33 -05:00
Daniel Agar
c08a387c5a
ekf2: move controlBetaFusion control.cpp -> sideslip_fusion.cpp
2023-02-22 09:08:33 -05:00
Daniel Agar
d61b8c21b2
ekf2: move controlAirDataFusion() control.cpp -> airspeed_fusion.cpp
2023-02-22 09:08:33 -05:00
Daniel Agar
d840f7f39f
ekf2: move controlGpsYawFusion() control.cpp -> gps_control.cpp
2023-02-22 09:08:33 -05:00
bresch
8ebf47edb1
ekf2: stop mag fusion when there is no data anymore
2023-02-17 08:51:55 -05:00
Daniel Agar
2ea25804a1
ekf2: allow filter init with only IMU ( #21041 )
...
- if mag enabled heading init is now pushed to controlMagFusion()
2023-02-13 22:07:15 -05:00
Daniel Sahu
fa6fda6cce
ekf2: new gravity observation ( #21038 )
...
Signed-off-by: Daniel M. Sahu <danielmohansahu@gmail.com >
2023-02-07 13:28:58 -05:00
Daniel Agar
04d3e549f5
ekf2: resetQuatStateYaw() set _time_last_heading_fuse
2023-02-03 10:03:09 -05:00
Daniel Agar
66ad7fd06c
ekf2: include 0 timestamp checks in helpers (isTimedOut(), isRecent(), etc)
...
- EKF isTimedOut(), isRecent(), and isNewestSampleRecent() need to handle the case where the timestamp has never been set
- reset() more thoroughly reset fields (mainly impacts unit tests)
2023-02-03 10:00:51 -05:00
Daniel Agar
264a99fb77
ekf2: new EKF2_IMU_CTRL parameter and gyro bias inhibit mechanism
...
- EKF2_AID_MASK accel bias inhibit moves to EKF2_IMU_CTRL
2023-02-03 09:52:24 -05:00
Daniel Agar
f668ea5aa6
ekf2: RingBuffer add reset method
2023-02-03 08:49:44 -05:00
Daniel Agar
e3d73cd837
ekf2: mag control reset mag_lpf on first sample
2023-02-02 16:12:09 -05:00
Daniel Agar
efe1d43550
ekf2: symforce codegen remove reserved identifier naming
...
- from the C standard, "All identifiers that begin with an underscore and either an uppercase letter or another underscore are always reserved for any use"
2023-01-30 09:24:32 -05:00
Hamish Willee
f25abbc80a
Fix magnetometer typo
2023-01-30 10:24:16 +01:00
bresch
6e30f8f5cb
ekf2: use dedicated aid_src message for flow for terrain aiding
2023-01-21 15:31:19 -05:00
bresch
b4b48cae75
ekf2: terrain flow - migrate to Symforce
2023-01-21 15:31:19 -05:00
Daniel Agar
95300d5637
ekf2: refactor output predictor to class
...
- refactor all EKF backend output predictor pieces into new OutputPredictor class
- output states are now calculated immediately with new high rate IMU rather than after EKF update
- IMU delayed sample is passed as around as control data to avoid storing an extra copy and make the requirement clear
2023-01-18 10:59:34 -05:00
Daniel Agar
674a59e48f
ekf2: new gyro bias limit parameter EKF2_GYR_B_LIM
...
- default is now a more conservative 0.15 rad/s (~8.6 deg/s) instead of the previous hardcoded 20 deg/s
2023-01-14 09:15:46 -05:00
bresch
49f8bcfc69
ekf2: purge old ekf2 derivation
2023-01-06 18:35:19 -05:00
bresch
06ef39d05e
ekf2: MC drag fusion - interpolate between X an Y "b" coefficients
...
Use the current sideslip angle to generate a drag coefficient that is a
mixture of X and Y coefficients, creating an elliptic distribution.
2023-01-05 12:03:24 -05:00
bresch
420f5ef2b7
ekf2: migrate drag fusion derivation to SymForce
2023-01-05 12:03:24 -05:00
bresch
04f76c932e
ekf2: decompose drag vector into x-y components
...
The drag force is a vector.
drag_x = drag.norm() * vx / v.norm()
2023-01-05 12:03:24 -05:00
bresch
0509f612dd
ekf2: fix drag data downsampling
...
setDragData needs the imu data at full speed to downsample it without
skipping samples.
2023-01-05 12:03:24 -05:00
bresch
28d664aed5
EKF2: purge outdated matlab scripts
...
Those files are no longer maintained and will just confuse new users
2022-12-30 13:01:58 -05:00
Daniel Agar
20a1c73cf0
ekf2: reinit baro height on sensor or calibration change
...
- handle reset on delayed time horizon
2022-12-29 16:37:34 -05:00
bresch
657bd6cf72
ekf2: stop mag fusion when inhibited for too long
...
Also do not try to run anything if mag is inhibited
2022-12-29 12:56:36 -05:00
bresch
c75a9058a5
EKF2: only fuse zero innovation if yaw var is large
2022-12-29 12:56:36 -05:00
bresch
86a3d2459a
ekf2: remove old yaw estimator generated code
2022-12-23 10:28:19 -05:00
bresch
7c33019510
EKF2: move yaw estimator to symforce
2022-12-23 10:28:19 -05:00
Daniel Agar
54a32eb2f7
ekf2: EV overhaul yaw and position fusion ( #20501 )
...
- move EV yaw and EV position to new state machines
- EV yaw and EV pos now configured via EKF2_EV_CTRL (migrated from EKF2_AID_MASK)
- new EV position offset estimator to enable EV position while GPS position is active (no more EV pos delta fusion)
- yaw_align now strictly means north (no more rotate external vision aid mask)
- automatic switching between EV yaw, and yaw align north based on GPS quality
2022-12-20 10:23:56 -05:00
Daniel Agar
696eeb9a49
ekf2: update EV height state machine (small piece of EV overhaul)
...
- respect new EKF2_EV_CTRL parameter for VPOS usage
- EV hgt rotate EV position before usage (there's often a small offset in frames)
- EV hgt reset use proper EV velocity body frame
- try to keep EV hgt and EV vel state machines consistent
- small incremental piece of https://github.com/PX4/PX4-Autopilot/pull/19128
2022-12-13 13:29:18 -05:00