Replace the multiple if-else statements by a generic equation.
- For a multicopter, the attenuation factor is 2 and symmetrical
- For a fixedwing, the attenuation factor is 1 if the acceleration is
positive and that centripetal correction is available and 2 otherwise.
Note that the function "sq" needs to be const in order to be used in a
const function.
* ekf2: centralize mag covariance reset. A complete and clean reset of the
mag states covariances is now performed through the "resetMagCov"
function only. This avoid having slight differences of implementations
across the code.
* Ekf: reset quat cov with initial uncertainty instead of zero
* Add const modifiers
* Pass imu data as sampe
* Remove emergency reset request counter
* Improve matrix library usage
* Indentation fix
* Do not store innovation matrix for each model
* Make weights a separate vector
* EKF: Add missing alignment transfer to AHRS solutions
* EKF: Replace #define constants with static constexpr
* EKF: Move declaration for weights into GSF section
* EKF: Fix documentation error
Co-authored-by: Paul Riseborough <p_riseborough@live.com.au>
* EKF: Use common rate vector calculation for offset corrections
* EKF: Remove duplicate matrix entry calculations
* EKF: Create a EKF-GSF yaw estimator class
* EKF: add emergency yaw reset functionality
* EKF: remove un-used function
* EKF: Ensure required constants are defined for all builds
* EKF: Fix CI build error
* Revert "EKF: remove un-used function"
This reverts commit 93005309c7f3794414ad99c86218b3062e00bbd3.
* EKF: Replace in-lined Tait-Bryan 312 conversions with function call
Also remove unnecessary operations
* EKF: Remove unnecessary update of external vision rotation matrix
* EKF: Use const
* EKF: use const
* EKF: don't use class variable as a temporary variable
* EKF: update comments
* EKF: Improve efficiency of yaw reset
Use conversion from rotation matrix to Euler angles instead of quaternion to euler angles.
* EKF: use const
* EKF: remove un-used struct element
* EKF: more descriptive function name
* EKF: use existing matrix row operator
* EKF: remove unnecessary rotation matrix update
* EKF: Use square matrix type
* EKF: Improve protection for bad innovation covariance
* EKF: Use matrix library operations
* EKF: Replace memcpy with better alternative
memcpy bypasses compiler sanity checks and is unnecessary in this instance.
* EKF: Split EKF-GSF yaw reset function
Adds a common function to support yaw reset that can be used elsewhere.
* EKF: Use common function for quaternion state and covariance yaw reset
* EKF: Replace inlined matrix operation
* EKF: Use const
* EKF: Change accessor function name
* EKF: Use const
* EKF: Don't create unnecessary duplicate variable locations
* EKF: Remove duplicate covariance innovation inverse
* EKF: Don't create unnecessary duplicate variable locations
* EKF: Rely on geo library to provide gravity
* EKF: Improve protection from bad updates
* EKF: Reduce effect of vibration on yaw estimator AHRS
* EKF: Improve yaw estimator AHRS accuracy during manoeuvre transients
* EKF: do not fuse multiple times the same height
The _fuse_height flag was never set to zero, hence the fusion was called
at each iteration, even if no new data is available.
The effects were: high CPU usage and virtually less measurement noise
due to multiple fusion of the same sample
Also remve unused variables
In a velocity reset we only used the GPS measurement if _gps_check_fail_status.value was equal to zero. The value of this flag is independent of EKF2_GPS_CHECK so checks can fail even if they are not configured to have any effect.
To obtain the correct difference between two angles, we need to wrap
the result between -pi and pi. Otherwise, the difference between two
angles close to 180 degrees but with opposite signs will produce a large
error.
For example if a = -179 and b = 179, b - a = 258 instead of -2 degrees
As the name can be ambiguous, it gets renamed
"uncorrelateQuatFromOtherStates".
Also replace the loops storing the values and reapplying them by simply
zeroing two slices (this also saves 130B of flash).
The intent of the function "uncorrelateQuatStates()" is to uncorrelathe quaternions from the other states but not between each other as they are and should remain linked alltogether.
Clearing the quaternions to quaternion covariances introduced unstabilities in other states (especially accel biases).
* Add primitive logging for Ekf
* Add python script to extract sensor data from ULog
* Add primitive sensor replay
* Add iris_gps data for sensor replay
* Add CI for functional change indication
* Update sensor replay flow data type
* update iris_gps_change indication
* test: Update EKF replay test documentation
Co-authored-by: Paul Riseborough <priseborough@users.noreply.github.com>