Hamish Willee
4a5c00d0e4
EKF2_GPS_POS_X/Y/Z have same long description ( #25068 )
2025-06-17 21:07:09 -08:00
bresch
457ce90541
ekf2: run simplified GNSS checks after initial fix
...
This prevents stopping GNSS fusion on slightly degraded solution when
tight checks are set
2025-06-06 15:59:56 +02:00
bresch
e487d59521
Vehicle_odometry: protect angular_velocity field against aliasing
...
Accumulate delta-angles between each publication to get the correct
angular velocity between two attitudes
2025-06-04 09:01:33 +02:00
bresch
0e32b155f3
ekf2: simplify names of scoped variables
2025-06-03 09:22:32 +02:00
bresch
c33d79cfb4
ekf2: move gnss_checks to their own class
2025-06-03 09:22:32 +02:00
bresch
2dbce4d958
ekf2: replace defines with enum class
2025-06-03 09:22:32 +02:00
bresch
5332010b13
ekf2: move on ground GNSS checks to separate function
2025-06-03 09:22:32 +02:00
bresch
6b8bf80423
ekf2-mag: never skip post-takeoff mag yaw reset
2025-05-06 11:24:31 -04:00
Marco Hauswirth
f0fdf0b53b
EKF2: distinguish airspeed source and use synthetic for wind
...
Enable wind-dead-reckoning with airspeed source to synthetic airspeed
2025-05-02 13:37:18 +02:00
bresch
e7250bc8d5
ekf2: do not let mag heading and declination update xy gyro biases
...
This can destabilize the tilt estimate when the mag field is disturbed
2025-05-02 10:23:43 +02:00
bresch
a40377e544
ekf2: always update IMU filters
2025-05-02 10:23:43 +02:00
bresch
6a105bcbdb
ekf2-grav: accelerate tilt alignment
2025-05-02 10:23:43 +02:00
bresch
c59101e8ed
ekf2-gravity: do not estimate accel bias when gravity fusion is active
...
Gravity fusion uses the bias corrected accelerometer data to correct the
tilt estimate. We should not continue to estimate the accel bias when
this is active as it creates an unwanted feedback loop.
2025-05-02 10:23:43 +02:00
bresch
ee30b70a3c
ekf2-gravity: start based on accel LPF instead of peak hold
...
This prevent rapid switching in presence of noise and the innovation
filter is good at rejecting spikes
2025-05-02 10:23:43 +02:00
bresch
6ec6f1b297
ekf2-decl: do not always update tilt
2025-05-02 10:23:43 +02:00
Matthias Grob
9404783c99
EKF2: more accurate unaided yaw calculation
...
to fix the yaw unlocking in StickYaw
when giving a lot of roll and pitch input
2025-04-22 15:55:38 +02:00
GuillaumeLaine
648e730c4a
ev_odom: always convert reference frame enum
2025-04-04 09:12:53 +02:00
bresch
e35c1f430c
EKF-AGP: only reset lat/lon when starting
2025-04-01 16:42:26 +03:00
bresch
f73c7977dd
ekf2-flow: limit minimum flow hagl
2025-03-31 11:34:25 +02:00
bresch
53bdceb895
ekf2-flow: check test ratio on Y axis separately
2025-03-31 11:34:25 +02:00
bresch
cdab0cb6e4
ekf2-flow: use same measurement prediction as in jacobian derivation
...
Also avoid double division in flow prediction
2025-03-31 11:34:25 +02:00
bresch
82ea544e8c
ekf2-test: add flow unit test for negative distance
2025-03-31 11:34:25 +02:00
bresch
82a482ec0b
ekf2: reset heading when mag calibration changed
2025-03-26 22:32:51 -04:00
bresch
9ac03f03eb
ekf2: consider GNSS vel as horizontal velocity aiding
2025-03-14 18:22:00 +01:00
bresch
2aaa54037c
ekf2: split gnss pos/vel flags
...
They can be selected independently in the control parameter, so there is
no reason why they should share the same flag.
2025-03-11 14:14:40 +01:00
bresch
7e0d04e446
ekf2: fix flow derivation for negative hagl
...
The partial derivative of the flow observation with respect
to the terrain and height states involve calculating the derivative
of 1/x, which is -1/x^2. This function is even, making the estimate
diverge in case x (the height above ground) is negative.
The solution is to take the derivative of 1/|x|,
which is -x/|x|^3 and is an odd function; preserving the sign of x.
Note that for positive values of x, the expression reduces to -1/x^2
2025-03-10 17:11:53 -04:00
Jacob Dahl
1ba9eeafd9
ekf2: silence output from symforce module check ( #24384 )
...
Co-authored-by: Alex Klimaj <alex@arkelectron.com >
2025-02-26 11:23:13 -07:00
bresch
5e06ab1430
ekf-agp: do not reset to AGP if GNSS fusion is active
2025-02-18 14:35:10 +01:00
RomanBapst
2b75d2e738
run fog check independently from stuck check
...
Signed-off-by: RomanBapst <bapstroman@gmail.com >
2025-02-11 09:08:25 +01:00
RomanBapst
8cedef2dc4
further cleanup
...
Signed-off-by: RomanBapst <bapstroman@gmail.com >
2025-02-11 09:08:25 +01:00
RomanBapst
2c4d38e303
fixed mistake
...
Signed-off-by: RomanBapst <bapstroman@gmail.com >
2025-02-11 09:08:25 +01:00
RomanBapst
806500fc4a
further improve logic
...
Signed-off-by: RomanBapst <bapstroman@gmail.com >
2025-02-11 09:08:25 +01:00
RomanBapst
73ade6d05c
range finder: remove potential deadlock
...
Signed-off-by: RomanBapst <bapstroman@gmail.com >
2025-02-11 09:08:25 +01:00
RomanBapst
35da86c85a
improve unit tests for range fog detection
...
Signed-off-by: RomanBapst <bapstroman@gmail.com >
2025-02-11 09:08:25 +01:00
Marco Hauswirth
4df65c133e
add cs_baro_fault to switch to fallback baro if available ( #24260 )
2025-01-28 10:37:16 +01:00
bresch
c76e74338b
ekf-replay: fix airspeed replay
...
If available, the EKF uses airspeed_validated, not airspeed
2025-01-26 23:05:39 -05:00
bresch
caaae6ed51
ekf2: allow sideslip fusion to always start with airspeed fusion
...
This allow sideslip fusion to start during VTOL front transition or even
on a multirotor with a vertical stabilizer and an airspeed sensor for example.
2025-01-22 09:33:16 +01:00
Marco Hauswirth
7a9608e54b
increase EKF2_RNG_FOG for FW and VTOL
2025-01-20 14:43:30 -05:00
Marco Hauswirth
4a5aa1e947
Fix max-hagl restriction to position/altitude control ( #23667 )
...
* fix max-hagl restriction to position/altitude control
* max hagl vel restriction in ManAcc position mode
* use interpolate func, change naming
* simplyfied vertical vel limitation
* move velocity-constraint adjustment to StickAccelXY
2025-01-20 15:50:21 +01:00
Daniel Agar
b1ca0495e2
ekf2: yaw estimator additional validity checks
2025-01-20 09:45:41 +01:00
bresch
c99cb6e94b
ekf2: do not auto-generate sideslip measurement jacobian
...
This is to trade a bit of CPU load for more flash space.
2025-01-15 11:05:50 -05:00
bresch
12a9087e92
ekf2: constrain max variance by zero innovation update
...
Clipping the variance of the covariance matrix has a destabilizing
effect as it increases the correlation between the states.
2025-01-14 21:42:33 -05:00
Silvan Fuhrer
e4e975806f
Enable CONFIG_EKF2_AUX_GLOBAL_POSITION by default
...
Signed-off-by: Silvan Fuhrer <silvan@auterion.com >
2025-01-14 02:19:49 -05:00
bresch
ab70ae3252
ekf2: fix GNSS drift false alarm
...
In SIH, the GNSS signal is zero-mean, but apparently not symmetric. The
issue is that saturating such a signal creates an artificial bias. This
made the check fail as the bias was above the threshold.
2025-01-08 21:40:25 -05:00
RomanBapst
1abc27dd1f
remove fixed-wing condition from airspeed fusion condition
...
- enables airspeed fusion to begin during transition already
- airspeed fusion is started based on airspeed being above defined threshold
Signed-off-by: RomanBapst <bapstroman@gmail.com >
2025-01-07 16:19:33 +01:00
bresch
b1773df441
ekf2: fix comments about primary height sources
...
Having the xxx_hgt flag set only means that the sensor is fused for
altitude/height aiding. It's not necessarily the height reference.
2025-01-07 10:23:13 +01:00
Nicolas MARTIN
4fe6d69966
local position acceleration: use mean value between two publications ( #24105 )
...
To avoid aliasing on the ned acceleration, add an accumulation of acceleration to improve the downsampling
2025-01-03 12:43:39 +01:00
bresch
c1589ddb18
ekf2-rng: do not continuously reset terrain in rng height ref
...
When the height reference datum is ground level (range finder height
ref), the terrain state is not updated through fusion and should stay at
a constant altitude.
2025-01-03 12:25:16 +01:00
Jacob Dahl
0b1838f233
test: add test for range finder fusion while on ground
2025-01-03 12:25:16 +01:00
bresch
6b10f1ca12
ekf: update change indicator
...
The calculation of "alpha" in the accel_horiz and height_rate lowpass
filters is slightly different than before.
2024-12-18 14:11:08 +01:00