* ekf2: make publishing of learned accel biases more robust
* ekf2: reset accel bias if calibration updated
* msg: add separate accel and gyro calibration counters
* ekf2: use separate accel and gyro calibration counters
* ekf2: rework logic to reset biases when calibration counters increment
* sensors: add saving of learned accel biases
* ekf2: generalized saving accel/gyro/mag in flight sensor calibration
* boards: holybro kakutef7 disable systemcmds/perf and systemcmds/top to save flash
Co-authored-by: Paul Riseborough <gncsolns@gmail.com>
Having a 2nd order low-pass filter in the derivative loop reduces
stability at low cutoff values as too much phase is lost through
the filter. Using a 1st order filter avoids this issue because its
maximum phase loss is 90 degrees instead of 180 degrees for a 2nd order
lpf.
- initial frequency peak tracking SNR increased from 10->15 db
- after initial detection the threshold decreases to SNR 5db
- gyro_fft large method refactored into smaller pieces
- sensors/vehicle_angular_velocity: dynamic notch FFT make sample rate
check a percentage and relax lower bound safety threshold
- this avoids any jitter in the integration timespan from impacting the vibration metrics
- vehicle_imu_status vibration metrics are not consumed by anything
(yet), so changing the scaling of the metric shouldn't matter
Below 1.5 mm the tube pressure drow compensation will result in unrealistic compensation factors causing the measured airspeed to be too high.
In addition sensirion recommends a diameter of 1.8 mm or larger for the tubes.
- IMU integrator set max dt based on final return size (uint16)
- improve integration consuming gyro as needed then integrate all available accel until caught up
- increase required number of samples for sensor rate measurement (online Welford mean)
- IMU init requires valid published data (device ids, etc)
- orb_group_count will include advertised instances before data is published, so this can't be used to throttle IMU init attempts
- apply sensor scaling immediately to keep things simple (FIFO vs regular)
- inline filter helpers (minor performance improvement)
- dynamic notch filtering
- reorder by axis (applied per axis)
- don't remove notch filters immediately if ESC or FFT data times out
- constrain notch filter frequency and bandwidth to safe range (minimum bandwidth for flaot precision, Nyquist, etc)
- add safe constraint on dt
- merge NotchFilterArray into regular NotchFilter (apply vs applyArray)
- only use direct form 1 to prevent reset confusion
- safe default field initialization
- update VehicleAngularVelocity usage
- use WelfordMean library to determine sensor sample rate average
- if gyro samples exceeds queue depth, instead round to nearest even integer to ease scheduling
- force update if publication latency is falling behind
- remove redundant sample interval perf counters
- status print accel & gyro interval standard deviation
-constrain range to -20..35°C
-do not use temperature readings if exactly 0 (as likley not filled by driver at all in this case)
Signed-off-by: Silvan Fuhrer <silvan@auterion.com>
- this fixes a minor edge case when you only have a single accelerometer and haven't made any parameter changes, the sensor sample rate (used for filtering) might not have been updated from default
If the GPS data is passed from companion computer, there may be inaccuracies
with timesync. This may cause time deltas to overflow.
Make the time delta calculation using floats directly, wich results in negative
numbers in case there are such inaccuracies.
Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>