* 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
* Fix comment
* Ekf wrapper for testing
Add utility function for accessing information in the ekf object
* Add step function for Gps sensor
* Add RangeFinder and Flow to simulated sensors
* Add first fusion logic tests
* Add units to function name
* Use EXPECT_TRUE
* Adding missing qualifiers
* Improve EXPECT_ calls
* Improve naming
* ekf_control: Inhibit mag fusion when field magnitude is large
Move mag inhibition check in separate function
* ekf_control: pull out of functionalities out of controlMagFusion
- yaw abd mag bias observability checks
- mag 3D conditions
- load mag covariances
- set and clear mag control modes
* ekf_control: refactor mag heading/3D start/stop.
Move mag declination, mag 3d and mag heading fusion out of the main function
* ekf_control: extract mag yaw reset and mag declination fusion requirements
* ekf_control: use WMM in isStronMagneticField for mag fusion inhibition
- Correct units of WMM strength table
* ekf_control: extract mag_state_only functionality of AUTOFW (VTOL custom)
Also split inAirYawReset from onGroundYawReset
* ekf_control: extract mag automatic selection
- transform if-else into switch-case for parameter fusion type selection
* ekf_control: extract run3DMagAndDeclFusion, reorganize functions, fix
flag naming in Test script
* ekf_control: do not run mag fusion if tilt is not aligned.
Reset some variables on ground even if mag fusion is not running yet. It
could be that it runs later so we need to make sure that those variables
are properly set.
* ekf_control: move controlMagFusion and related functions to mag_control.cpp
* ekf control: check for validity of mag strength from WMM and falls back
to average earth mag field with larger gate if not valid
* ekf control: remove evyaw check for mag inhibition
* ekf control: change nested ternary operator into if-else if
* Ekf: create AlphaFilter template class for simple low-pass filtering
0.1/0.9 type low-pass filters are commonly used to smooth data, this
class is meant to abstract the computation of this filter
* ekf control: reset heading using mag_lpf data to avoid resetting on an outlier
fixes ecl issue #525
* ekf control: replace mag_states_only flag with mag_field_disturbed and
add parameter to enable or disable mag field strength check
* ekf control: remove AUTOFW mag fusion type as not needed This was implemented for VTOL but did not solve the problem and should not be used anymore
* ekf control: use start/stop mag functions everywhere instead of setting the flag
* ekf control: Run mag fusion depending on yaw_align instead of tilt_align
as there is no reason to fuse mag when the ekf isn't aligned
* AlphaFilter: add test for float and Vector3f
- calculate a theoretical value based on the knowledge of the direction
and strength of the magnetic field vector and X/Y sensor measurements
- needs knowledge about location on earth to work
This commit introduces a quality measure in the range data. It is
used to properly decide whether to initialize the HAGL estimate on
sensor data or MIN_HGT parameter, as well as in the decision of
whether a 'fake' measurement should be published on the ground to
allow for optical flow take-offs.
Heading data is assumed to be from a dual antenna array at a specified yaw angle offset in body frame, but with the heading data already corrected for antenna offset. The offset is required to apply the correct compensation for combined rotations and to determine when the yaw observation has become badly conditioned.
The parameter used to control the maximum dead reckoning time had 'gps' in the parameter name which was confusing because it was used for all measurement types capable of constraining horizontal velocity error growth. The parameter variable has been renamed and the documentation for it improved.
The parameter used to control the maximum time since fusing a measurement before the measurement is considered to be not contributing to aiding had misleading documentation which has been updated.
This brings all the range finder data checks (excluding innovation consistency checks) into one place and eliminates the need to perform range checking external to the library.
The hard coded optical flow tilt limit is changed to use the same value as the range finder.
Variable names are changed to make a clear distinction between the max/min values calculated by the stuck range check and the max/min valid values for the sensor.
* EKF collect_imu take const imu sample and populate buffer
* EKF calculateOutputStates cleanup
* EKF add calculate_quaternion output predictor method
* EKF: update documentation
* EKF: remove unnecessary getter function
* EKF calculateOutputStates only apply dt correction to bias
* EKF pytest assert attitude validity, not update() return
* EKF: correct documentation
* EKF: Do not make attitude validity dependent on yaw alignment status
Yaw alignment could fail in flight due to temporary loss of data and yet the quaternions would still usable for stabilisation even though the absolute earth yaw angle wrt true north was uncertain.
The gyro data accumulation needs to be across the same integration period as the flow sensor. The previous code didn't sample the accumulation until the midpoint of the flow data had fallen behind the fusion time horizon.
This PR changes the optical flow time stamp definition so that flow data is retrieved when the leading edge of the flow accumulation period falls behind the fusion time horizon. This enables the accumulated gyro data to be sampled at the correct time. Fusion is then delayed until the mid sample time has fallen behind the fusion time horizon.