Commit Graph

1072 Commits

Author SHA1 Message Date
Daniel Agar d2b3e7fe16 ekf2: new kconfig to enable/disable GNSS (enabled by default) 2023-10-11 14:02:34 -04:00
bresch ec15fe3d90 ekf2-derivation: fix terrain and yaw estimator derivations
fix compatibility issues with symforce-0.9.0
2023-10-11 09:49:17 -04:00
bresch cf1c6a8b84 ekf2-derivation: remove old wind covariance derivation 2023-10-11 09:49:17 -04:00
Daniel Agar 5352a64042 ekf2: symforce derivation allow optionally disabling mag and wind states 2023-10-10 17:31:11 -04:00
Daniel Agar b5f3d089c4 ekf2: mag_fusion remove direct state index usage 2023-10-10 09:18:04 -04:00
Daniel Agar cf4c565e4a ekf2: mag_fusion.cpp cleanup includes 2023-10-10 09:18:04 -04:00
Daniel Agar c85840c4dd ekf2: mag_fusion only set fault status flags if mag_3D updating all states
- other parts of the system are blanket checking for any fault status
   flag
2023-10-10 09:18:04 -04:00
Daniel Agar e58ceba4b1 ekf2: mag_fusion consolidate duplicate error handling 2023-10-10 09:18:04 -04:00
bresch fc32820e19 ekf2: initialize wind covariance using symforce 2023-10-09 21:03:38 -04:00
Daniel Agar 28d58a947f ekf2: cleanup more optional mag (CONFIG_EKF2_MAGNETOMETER) 2023-10-09 10:18:02 -04:00
Daniel Agar 5f87f3a046 ekf2: drag fusion add aid source status topic 2023-10-09 09:26:28 -04:00
Daniel Agar 028733e1c7 ekf2: add kconfig to disable wind estimation (off by default) 2023-10-09 09:22:29 -04:00
Mathieu Bresciani 05fd8c5976 EKF2: centralized auto-generated state (#22183)
* ekf2_derivation: use single source of state definition

The state is defined as an ordered dictionary of group elements and
everything else is generated using that state definition

* ekf2: generated state sample add const reference getter

---------

Co-authored-by: bresch <[brescianimathieu@gmail.com](mailto:brescianimathieu@gmail.com)>
Co-authored-by: Daniel Agar <daniel@agar.ca>
2023-10-06 10:28:21 -04:00
Mathieu Bresciani d61743412c ekf2: fix flow gyro bias corrections (#22145)
* ekf2-flow: fix flow gyro bias compensation
* ekf2-flow: apply flow gyro bias when used
* ekf2: log optical flow gyro bias
* ekf2: optical flow control always use provided flow gyro (with bias applied)
* ekf2-flow: log flow gyro and gyro reference
* ekf2-flow: support senrors with XY flow gyro

---------

Co-authored-by: Daniel Agar <daniel@agar.ca>
Co-authored-by: bresch <[brescianimathieu@gmail.com](mailto:brescianimathieu@gmail.com)>
2023-10-05 10:51:30 -04:00
bresch 10db6b6eda ekf2: remove sparse vector optimization
The sparse vector template requires to know which states are non-zero in
the observation jacobian. This complicates the modularity of the code
when the state vector or the derivation is changed.
The computation cost difference is almost negligible for this size.
2023-10-02 10:12:53 -04:00
Silvan Fuhrer 700402a031 EKF2: improve/shorten param descriptions
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
2023-09-29 11:07:46 +02:00
Daniel Agar b817eb0370 ekf2: collect_gps() don't throttle updates until WMM set initially 2023-09-29 09:37:30 +02:00
Daniel Agar 1e594747ab ekf2: fix WMM NAN checks
- if any of the stored WMM is NAN then it should be updated
2023-09-29 09:37:30 +02:00
Daniel Agar 14a967e2ca ekf2: remove aid src status fusion_enabled flag 2023-09-26 10:30:16 -04:00
bresch 99197919d7 ekf2: access state covariance using helper functions 2023-09-26 06:41:04 +02:00
Daniel Agar aa97ef9d50 EKF: covariance remove extra semicolon 2023-09-25 12:26:12 -04:00
Mathieu Bresciani b3f460f30c ekf2: update quaternion covariance at yaw reset(#22123)
- Preserve tilt variance while doing a yaw reset
 - Yaw variance is now correctly set instead of increased

---------

Co-authored-by: Dominique <dominique.leblanc@donecle.com>
Co-authored-by: bresch <[brescianimathieu@gmail.com](mailto:brescianimathieu@gmail.com)>
2023-09-25 09:36:42 -04:00
bresch 514e0330e5 ekf2_terrain: handle height reset 2023-09-25 09:34:14 -04:00
bresch db97a38a9d ekf2 rng kin: allow check to become true during horizontal motion
Even if there is some horizontal motion, a passing check should be
accepted as the terrain can be flat. However, the vehicle must not be
moving horizontally to invalidate the consistency as a change in terrain
can make the kinematic check temporarily fail.
2023-09-22 09:02:35 -04:00
bresch 9e962f3efa ekf2: update more hardcoded indexes 2023-09-21 08:27:52 -04:00
bresch ebf962bf68 ekf2: remove size in name of state vector and matrix types
Then the state vector size can be changes without having to update the
name
2023-09-21 08:27:52 -04:00
bresch dac337efc4 ekf2: auto-generate state vector size constant 2023-09-19 09:37:50 -04:00
Daniel Agar 8a9a303354 ekf2: update include guards 2023-09-19 09:37:50 -04:00
bresch 51dbd8ee4c ekf2: simplify state var constraint 2023-09-19 09:37:50 -04:00
bresch 779ea3f4d1 ekf2: access state covariance using enum 2023-09-19 09:37:50 -04:00
Daniel Agar 153f7bbced ekf2: update all copyright headers 2023-09-15 10:02:09 -04:00
Daniel Agar 1e9f0ad2c6 ekf2: add kconfig for barometer support (enabled by default) 2023-09-15 10:02:09 -04:00
Daniel Agar 10b54d08fc ekf2: add dedicated EKF2_CONFIG_TERRAIN in kconfig
- new estimator_aid_src_terrain_range_finder for HAGL RNG
2023-09-15 10:02:09 -04:00
Daniel Agar 845b01a00d ekf2: add kconfig for magnetometer support (enabled by default) 2023-09-15 10:02:09 -04:00
Daniel Agar 016db84d69 ekf2: covariance update use IMU sample dt (#22032)
- usually the delta angle and delta velocity dt is the same, but they can be slightly different
2023-09-13 09:58:56 -04:00
bresch 78eb0cdb72 opt flow: fix msg naming
optical_flow got replaced by sensor_optical_flow and vehicle_optical_flow
2023-09-11 10:12:16 -04:00
bresch 0aa4afdbce ekf2: add unaided_yaw for more resilient yaw control
This estimate doesn't converge to the true yaw but can be used as a
more consistent but drifting heading source.
It can be used by a setpoint generator to adjust its heading setpoint
while the true yaw estimate is converging in order to keep a constant
course over ground.
2023-08-30 09:56:19 +02:00
bresch 52bcf1e0c2 update change indicator
The yaw variance is now initially zero
2023-08-29 10:57:49 -04:00
bresch 71f12b2c4d ekf2: do not initially increase yaw variance
Yaw variance is automatically increased as soon as a yaw aiding source
is activated
2023-08-29 10:57:49 -04:00
bresch 78d75ada3e update change indicator
The result is slightly different because we now only set the tilt
covariance (before, tilt variance was applied to all axes)
2023-08-29 10:57:49 -04:00
bresch 0282f85cd4 ekf2: compute quat tilt variance using SymForce 2023-08-29 10:57:49 -04:00
Daniel Agar 0f260fc26c ekf2: gravity fusion don't use any accel samples that are clipping 2023-08-28 14:35:13 -04:00
Daniel Agar 2c76109a94 ekf2: drag fusion don't use any accel samples that are clipping 2023-08-28 14:35:13 -04:00
bresch 9551c1b614 ekf2: send global position if origin is set manually
Even if the aiding is local only, a valid global estimate can be sent as
long as we know the EKF's origin.
2023-08-26 14:48:49 -04:00
Mathieu Bresciani 74a54b3b12 EKF2: improve resilience against incorrect mag data
- when GNSS is used require low mag heading innovations during
  horizontal acceleration (yaw observable) to validate the mag
- only fuse mag heading just enough to constrain the yaw estimate
  variance to a sane value. Leave enough uncertainty to allow for a
  correction when the yaw is observable through GNSS fusion
2023-08-17 09:55:15 -04:00
bresch 1f02d55103 ekf2: update change indicator
change caused by fixing the yaw variance increase calculation
2023-08-08 12:09:56 -04:00
bresch 39a83ab138 ekf2_test: test yaw variance after reset 2023-08-08 12:09:56 -04:00
bresch b6fb95247b ekf2_derivation: fix typo 2023-08-08 12:09:56 -04:00
bresch de702a2e63 ekf2: fix function to increase yaw variance 2023-08-08 12:09:56 -04:00
bresch cd77d52dc1 ekf2: calcRotVecVariances using SymForce 2023-08-07 14:28:06 -04:00