bresch
9ebfed010f
mag_cal: increase uncertainty of calibration parameters
...
in air bias estimation is usually really accurate and should be weighted
more heavily compared to the calibration parameters that are often
more approximate given the worse magnetic environment near the ground.
2023-07-11 11:33:53 -04:00
bresch
9e2e888f5e
ekf2-bias_cal: reduce required stability period
...
For the mag, 30s of bias learning is a lot, given that it is only active
during turns and that it usually converges in < 5 seconds
2023-07-11 11:33:53 -04:00
bresch
2f52926972
mag_cal: fix mag bias estimate to mag cal
...
- since last_us is set to 0 every time the bias is not observable, the
total time was also reset -> needed 30 consecutive seconds in mag 3D
to be declared "stable"
- after landing, the mag_aligned_in_flight flag is reset. Using this for
bias validity makes it invalid before we have a chance to save it to
the calibration.
2023-07-11 11:33:53 -04:00
bresch
f5edff2647
ekf2 - preflt checks: scale flow innovation checks
...
Opt flow raw innovations can be really large on ground due to the small
distance to the ground (vel = flow / dist). To make the pre-flight check
more meaningful, scale it with the current distance.
2023-07-11 08:18:32 -07:00
bresch
672b29d555
ekf2: report dist bottom also when using flow for terrain
...
Terrain height can be estimated using a range finder and/or optical flow
2023-07-11 08:18:32 -07:00
bresch
afa085da7f
geofence: fix altitude change fence check
...
When asking for an altitude change only, the current position needs to
be used, otherwise the geofence check is be skipped
2023-07-06 22:39:39 -04:00
Mathieu Bresciani
288e3ae74a
EKF2: vision attitude error filter ( #21791 )
...
* ekf2-ev: filter q_error for frame correction
* ekf2: filter EV attitude error centrally
2023-07-03 11:13:59 -04:00
bresch
8d1b0e45fa
opt-requirements: bump SymForce version
2023-06-26 14:10:54 -04:00
bresch
eb70c9f6f3
ekf2: update auto-generated code to SymForce 0.9.0
2023-06-26 14:10:54 -04:00
bresch
fdf7867a3e
ekf2: update derivation to SymForce 0.9.0
2023-06-26 14:10:54 -04:00
bresch
c99f56f010
wind_estimator: update generated code to Symforce 0.9.0
2023-06-26 14:10:54 -04:00
bresch
73e5ff109c
wind_estimator: update derivation to use SymForce 0.9.0
2023-06-26 14:10:54 -04:00
Mathieu Bresciani
24de623989
EKF2: Zero gyro update ( #21691 )
...
When at rest, directly fuse the gyro data as an observation of its bias.
This allows to strongly observe the gyro biases without having to fuse a
constant heading that makes the ekf too confident about its heading.
2023-06-09 21:13:18 -04:00
bresch
8b67fa91a1
factory cal: exclude _PRIO params
2023-06-09 21:05:40 -04:00
bresch
5233b33242
update change indicator
2023-06-05 11:58:42 -04:00
bresch
403a6310c4
gnss yaw: compare auto-generated Jacobian against autodiff
2023-06-05 11:58:42 -04:00
bresch
c6b259d5f6
yaw_fusion: compare auto-generated Jacobian against autodiff
2023-06-05 11:58:42 -04:00
bresch
d4528dc53a
sideslip: compare auto-generated Jacobian against autodiff
2023-06-05 11:58:42 -04:00
bresch
e7c4a22be8
mag_3d: compare auto-generated Jacobian against autodiff
2023-06-05 11:58:42 -04:00
bresch
c6f1a63659
opt_flow: compare auto-generated Jacobian against autodiff
2023-06-05 11:58:42 -04:00
bresch
d03f242c04
DCM: use simplified conversion from unit quaternion
...
This is exactly equivalent for a unit quaternion (and only unit
quaternions should be used to encode a rotation)
2023-06-05 11:58:42 -04:00
bresch
9d7abf2552
ekf2: symforce - use builtin Rot3 and Quaternion operations
2023-06-05 11:58:42 -04:00
bresch
616a71a959
MC_auto: avoid yaw step if previous setpoint is NAN
...
A VTOL plane in MC mode has no yaw setpoint during takeoff because of
weather-vane. To align for the front transition, the yaw target jumps
and caused a step in the controller, making it reach saturation.
With this commit, the previous yaw setpoint is set to the current yaw
when no yaw setpoint is sent in order to create a smooth yaw trajectory
starting at the current orientation when yaw target is suddenly finite.
The yawspeed filter also now contains the yaw speed instead of dyaw in
order to prevent chattering due to dt jitter.
2023-05-12 13:42:09 +02:00
1e4fcfc614
mc_pos_control: fix potential thrust spike on hover thrust change
...
Co-authored-by: Josh Henderson <hendjoshsr71@gmail.com >
Co-authored-by: Matthias Grob <maetugr@gmail.com >
2023-05-08 21:42:25 -04:00
bresch
521abecbbf
ekf2: remove all remaining uses of EKF2_AID_MASK
2023-04-28 22:31:17 -04:00
bresch
98a8d080b6
ekf2 params: fix my bad english
2023-04-28 22:31:17 -04:00
bresch
2a2e43b620
ekf2: move flow fusion activation from AID_MASK to OF_CTRL
2023-04-28 22:31:17 -04:00
bresch
39c2f95669
ekf2: move drag fusion activation from AID_MASK to DRAG_CTRL
2023-04-28 22:31:17 -04:00
bresch
17806a9608
ekf2: robustify wind init using airspeed
...
Tests showed that sideslip fusion often starts just before airspeed
fusion, resetting the wind states to 0 instead of using the airspeed
data. A quick look at the wind uncertainty allows to know if the current
wind estimate is meaningful or if we should rather reset it using the
airspeed data.
2023-04-08 14:12:21 +02:00
bresch
fb3b4a3151
ekf2: remove duplicate buffer push of system flags
2023-04-04 15:56:09 -04:00
bresch
89bb4622ef
gazebo_tailsitter: disable multi-EKF for replayable logs
2023-03-31 15:22:38 -04:00
bresch
50b084cf17
MC auto: allow yawing during hold
2023-03-31 17:32:33 +02:00
bresch
ed7c4bc5d7
ekf2: init tilt using quaternion from gravity vector
2023-03-31 10:15:12 +02:00
bresch
6bee0893de
add circle intersection unit tests
2023-03-22 10:03:48 +01:00
bresch
af345c88e9
TrajMath: use fmaxf instead of max
2023-03-22 10:03:48 +01:00
bresch
c7bddda1db
MC auto: add maximum RC assist distance during landing
2023-03-22 10:03:48 +01:00
bresch
d6fa42fefd
mc att: add unit tests for AttitudeControlMath helper
2023-03-22 10:01:27 +01:00
bresch
edaf5bf0cd
mc att: extract tilt yaw error compensation to lib
2023-03-22 10:01:27 +01:00
bresch
f65daf7259
mc att: do not pass by euler angles to generate att sp from sticks
2023-03-22 10:01:27 +01:00
bresch
3e3307c0d0
ekf2: fix mag declination innovation angle wrapping
2023-03-21 21:07:28 -04:00
bresch
91364ba901
mc land detect: use z_deriv and vz for vert movement check
...
z_deriv is less prone to bias errors
2023-03-21 09:22:58 -04:00
bresch
fd33e60f78
ekf: fix GNSS yaw fusion wrapping
2023-03-13 10:46:34 +01:00
bresch
fafcdbf4ed
tests: empty parentheses were disambiguated as a function declaration
2023-02-17 21:10:44 -05:00
bresch
8ebf47edb1
ekf2: stop mag fusion when there is no data anymore
2023-02-17 08:51:55 -05: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
bresch
3d50a7ce44
CAL_MAG_SIDES: do not save with factory cal
2023-01-13 10:48:01 -05:00
bresch
3d73e273e6
MAG_SIDES: don't spam user to not change parameter
...
otherwise this will always show up on every boot if factory calibration
was done in an earlier release
2023-01-13 10:48:01 -05:00
bresch
ced41febb7
hide legacy read-only parameter under Developer category
2023-01-13 11:40:56 +01:00
Mathieu Bresciani
767fcb2774
sensors: prefix mag config param SENS instead of CAL ( #20723 )
...
* sensors: prefix mag config param SENS instead of CAL
* mag sides: keep CAL_MAG_SIDES required by QGC
2023-01-12 09:42:36 -05:00
bresch
49f8bcfc69
ekf2: purge old ekf2 derivation
2023-01-06 18:35:19 -05:00
bresch
26122886ae
ekf2: drag fusion - improve parameter description
...
The user should refer to the online documentation for tuning guidelines
and not the parameter description.
2023-01-05 12:03:24 -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
14bf04b9a4
SIH: add to px4_fmu-v5_default and auto start GPS sim driver
...
- add simulator kconfig dependencies
- exclude SIH (+deps) where sufficient flash isn't available
2023-01-04 16:26:15 -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
bresch
3e4e5c991c
ekf2: add mag unit tests
2022-12-29 12:56:36 -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
0388c161e7
ekf2: compare yaw estimator sympy vs symforce
2022-12-23 10:28:19 -05:00
bresch
7c33019510
EKF2: move yaw estimator to symforce
2022-12-23 10:28:19 -05:00
bresch
41abf695a8
ekf2: use more efficient covariance update computation
...
KSK' is faster to compute than KHP and is mathematically equivalent
2022-12-12 12:31:54 -05:00
Mathieu Bresciani
a187bb3b80
ekf2: predict covariance before predicting state ( #20715 )
...
* To predict the covariance, the jacobian from the previous to the current state is required.
2022-12-07 09:34:19 -05:00
bresch
8e3517fae0
DataValidator: fix unexpected failover
...
Instead of always starting with instance 0 (potentially an internal
mag), first take the current sensor as reference to compare the other
ones against it.
The issue is that otherwise we can end up in a
situation where a switch occurs because the currently used sensor isn't
much better than a sensor with a lower index: because the selected one
isn't much better, we cannot "fail-over" to it and get stuck on another
sensor, triggering a fail-over.
2022-12-06 08:16:23 +01:00
bresch
5155346d60
ekf2: do not use gnss data when no lock
2022-11-30 08:50:34 -05:00
bresch
5d7faefa84
ekf2: don't add invalid GNSS samples to the buffer
2022-11-30 00:22:15 -05:00
bresch
7888cc8cfd
GyroCalibration: update sensor correction before using it
...
Otherwise, the thermal offset value can be outdated
2022-11-23 13:24:43 -05:00
bresch
dae37803da
TC: erase current calibration when temp cal is completed
2022-11-23 13:24:43 -05:00
bresch
60c448ce3a
ekf2: GNSS yaw, use reported yaw accuracy when available
2022-11-22 09:59:31 -05:00
bresch
b25bc1b982
ekf2: GNSS yaw, update->fuse pattern
2022-11-22 09:59:31 -05:00
bresch
4cb327fba3
ekf2: remove old GPS yaw autogenerated code
2022-11-22 09:59:31 -05:00
bresch
16a3fee54f
ekf2_test: check behavior of GNSS yaw fusion at singularities
2022-11-22 09:59:31 -05:00
bresch
4116de31ad
ekf2: compare GNSS yaw fusion sympy vs symforce
2022-11-22 09:59:31 -05:00
bresch
eff2c6adcf
ekf2: migrate GNSS yaw fusion to SymForce
2022-11-22 09:59:31 -05:00
bresch
22420a7bf1
ekf2: do not fuse ZVU if other velocity source is active
2022-11-15 11:17:07 -05:00
bresch
c67f03f383
ekf2: update change indicator
2022-11-14 11:51:32 -05:00
bresch
f319cc528b
ekf2: remove old flow fusion generated code
2022-11-14 11:51:32 -05:00
bresch
2a83dbf81d
ekf2_test: compare flow fusion sympy vs symforce
2022-11-14 11:51:32 -05:00
bresch
93564baccf
ekf2_flow: recalculate innovation after fusing 1st axis
...
The state changed so we need to recalculate the innovation of the 2nd
axis after fusing the 1st one
2022-11-14 11:51:32 -05:00
bresch
4dbdf23346
ekf2: update _R_to_earth when the state quat changed through fusion
2022-11-14 11:51:32 -05:00
bresch
28458340e6
ekf2_flow: check innov variance health after fusing 1st axis
2022-11-14 11:51:32 -05:00
bresch
73a8c388e8
ekf2: fuse by looping through axes
2022-11-14 11:51:32 -05:00
bresch
b54a4417fa
ekf2: migrate flow fusion to SymForce
2022-11-14 11:51:32 -05:00
bresch
7d1f1d0f84
ekf2: replace macro constants by typed constexpr
2022-11-14 10:45:23 -05:00
bresch
06702da003
ekf2: add GNSS yaw max interval
...
yaw data usually comes at lower rate than vel/pos
2022-11-14 10:45:23 -05:00
bresch
9834c7917b
ekf2: use yaw emergency estimator more aggressively
...
During the whole flight, if the difference between the yaw estimate from
EKF2 and the emergency estimator is large and that the GNSS velocity
fusion is failing continuously, immediately reset to the emergency yaw
estimate.
2022-11-14 10:45:23 -05:00
bresch
96e7ea7a08
ekf2: remove old mag declination auto-code
2022-10-20 18:16:25 -04:00
bresch
f0a0a3e545
ekf2_test: compare mag decl fusion sympy vs symforce
2022-10-20 18:16:25 -04:00
bresch
2f3ea88099
ekf2: migrate mag declination to SymForce
2022-10-20 18:16:25 -04:00
bresch
89bc28e836
wind_est: extract utility functions to separate file
2022-10-20 11:41:46 +02:00
bresch
2549054b28
wind_est: remove old derivation
...
replaced by derivation.py
2022-10-20 11:41:46 +02:00
bresch
7115d5643c
wind_est: auto-generate initialization of state and cov matrix
2022-10-20 11:41:46 +02:00
bresch
a7124d3738
wind_est: auto-generate beta fusion using Symforce
2022-10-20 11:41:46 +02:00
bresch
487b84e90b
wind_est: place codegen details in function
2022-10-20 11:41:46 +02:00
bresch
cf9859965a
ekf2: remove old yaw fusion auto-code
2022-10-19 17:34:31 +02:00
bresch
e33215b61c
ekf2_test: compare yaw fusion sympy vs symforce
2022-10-19 17:34:31 +02:00
bresch
42f683fa64
ekf2_test: test using positive definite covariance matrix
...
A covariance matrix needs to be positive definite
2022-10-19 17:34:31 +02:00