- 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>
- no warning if accel is disabled
- threshold increased 100 -> 1000 (only warn if severe ongoing clipping)
- more generic warning message (vehicle isn't necessarily in air flying)
For the sake of efficiency (at 8 kHz) all filtering is performed on the raw data before the calibration and rotation is applied to only the final output. As a result we have to be a bit more careful when switching between sensors or in cases where the gyro scale factor changes (eg icm42688p 20 bit data rescaled to fit in int16 output).
- rotates accel & gyro FIFO data before publication both to simplify downstream usage (including log review) and fix other issues
- to best handle int16_t data rotations are now either performed with swaps if possible, otherwise promoted to float, rotated using the full rotation matrix, then rounded back to int16_t
- fix sensors/vehicle_angular_velocity filter reset both with proper rotation and new calibration uncorrect helper
- in FIFO case filtering is done before calibration is applied, but we need to handle a possible reset from a completely different sensor (vehicle body angular velocity -> sensor frame uncorrected data)
- in multi-EKF mode the EKF selector becomes repsonsible for sensor
selector rather than the sensors module
- this updates the sensors module to still make the initial primary IMU
selection on startup before the EKF selector (including if the
estimators never fully initialize)