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