Commit Graph

220 Commits

Author SHA1 Message Date
Peter Barker 2b0bf45891 AP_InertialSensor: remove separate calls to get delta-times for vel and ang 2021-03-13 11:29:29 +11:00
Andrew Tridgell 25dd08a1fd AP_InertialSensor: added force_save_calibration() 2021-02-15 07:24:40 +11:00
Andrew Tridgell 6c8a57c2d7 AP_InertialSensor: review fixes 2021-01-21 13:09:21 +11:00
Andrew Tridgell 5e60fac37e AP_InertialSensor: remove unused variable 2021-01-21 13:09:21 +11:00
Andrew Tridgell 285b53fe07 AP_InertialSensor: use vector polyfit
this reduces memory usage
2021-01-21 13:09:21 +11:00
Andrew Tridgell ffe20f7958 AP_InertialSensor: use a fixed reference temperature of 35C
this allows us to timeout the calibration when the temperature stops
rising as the polynomial no longer depends on the maximum temperature
2021-01-21 13:09:21 +11:00
Andrew Tridgell c9a83c8127 AP_InertialSensor: added INS_TCAL_OPTIONS
make persistent params optional, and allow save of accelcal
2021-01-21 13:09:21 +11:00
Andrew Tridgell 1ddc21c9bb AP_InertialSensor: support saving tempcal params persistently 2021-01-21 13:09:21 +11:00
Andrew Tridgell 8caea96ab1 AP_InertialSensor: start auto-learning at boot
This makes it easier to setup the params. The ENABLE=2 value only
takes effect at boot
2021-01-21 13:09:21 +11:00
Andrew Tridgell 30e55d8dfc AP_InertialSensor: cope with user changing TMAX while calibrating 2021-01-21 13:09:21 +11:00
Andrew Tridgell e2e97c67ce AP_InertialSensor: catch user attempt to change TMAX during cal 2021-01-21 13:09:21 +11:00
Andrew Tridgell 3fb720354d AP_InertialSensor: added notify events for temperature calibration 2021-01-21 13:09:21 +11:00
Andrew Tridgell cc3579ea5d AP_InertialSensor: change TCAL sampling to be even in temperature 2021-01-21 13:09:21 +11:00
Andrew Tridgell fc0f8b990a AP_InertialSensor: added online learning of temp cal
use INS_TCAL1_ENABLE=2 to start learning
2021-01-21 13:09:21 +11:00
Andrew Tridgell 0f6f6bac6b AP_InertialSensor: expose TCal class for use in SITL 2021-01-21 13:09:21 +11:00
Andrew Tridgell 7921e042f1 AP_InertialSensor: added IMU temperature calibration support
this adds parameters that can be setup by an external script for
compensating for temperature variation in gyros and accels using a 3rd
order polynomial
2021-01-21 13:09:21 +11:00
Andrew Tridgell b74e5c0e2f AP_InertialSensor: added ExternalAHRS backend 2021-01-05 21:13:12 +11:00
Peter Barker 72acc8bfc8 AP_InertialSensor: use primary gyro (not accel) for get_delta_angle_dt 2020-11-29 13:21:53 +11:00
Andrew Tridgell f6c45c3bcd AP_InertialSensor: cope with INS_MAX_INSTANCES < 3 2020-11-10 16:15:45 +11:00
Michael du Breuil c86dcf91d6 AP_InertialSensor: Run vibration monitoring on all instances 2020-10-24 09:54:04 +11:00
Andy Piper faf9bbbf3a AP_InertialSensor: make the backend fast gyro rate configurable
raise gyro rate default on F7 and H7
clean up gyro rate docs and output startup banner
2020-07-10 16:45:29 +10:00
Andy Piper 61bb42cc0c AP_InertialSensor: allow up to four distinct notch center frequencies to be updated
apply the LPF after the notch filters to reduced notch-induced noise
2020-06-21 19:09:35 +10:00
Andy Piper 8ac79da643 AP_InertialSensor: FFT gyro window would overflow on windows >= 256
convert FFT buffers to ObjectBuffer<float> for lock-free access
push gyro samples directly into the FFT ring buffer from the gyro thread
2020-05-24 07:43:34 +10:00
Andy Piper 0e9b2a26c5 AP_InertialSensor: SITL the raw sample rate is not the same as the sensor rate
use regulated time for frequency noise to avoid spurious harmonics
SITL sensors must be true separate instances
don't compile in FFT structures if DSP disabled
2020-02-22 11:15:37 +11:00
Andy Piper 3d9776dd6d AP_InertialSensor: expose statically filtered gyro values for FFT analysis and allow sampling to gyro window for FFT analysis.
FFT windows can be dynamically allocated
add harmonic notch dynamic tracking mode
unwind gyro window allocation in the case of failure
allow access to harmonic notch harmonics
2020-02-22 11:15:37 +11:00
Andrew Tridgell 9dc618ddd4 AP_InertialSensor: added gyro_harmonic_notch_enabled() 2019-11-19 07:08:01 +08:00
Andrew Tridgell 77d21f9f5d AP_InertialSensor: return HarmonicNotchDynamicMode 2019-11-19 07:08:01 +08:00
Andy Piper 6381183aa3 AP_InertialSensor: expose harmonic notch tracking mode 2019-10-31 11:18:40 +08:00
Andy Piper 50f7e50634 AP_InertialSensor: add harmonic notch filter to gyro filter chain
Allow dynamic updates to the calculated frequency. Convert bandwidth and frequency to floats.
backend variables do not need to be indexed per-backed
2019-09-11 18:41:05 +10:00
Andrew Tridgell 3444e82ef9 AP_InertialSensor: added RC switch for killing IMUs 2019-07-07 19:03:01 +10:00
Andrew Tridgell 053f0cb689 AP_InertialSensor: try much harder to get all IMU samples
this we ensures we get new data for all active IMUs on each loop,
rather than sometimes returning with some IMUs not having data.

This matters as not having a sample on an IMU for a single loop can
cause an EKF IMU failover, which will degrade the learned bias
variances

The issue is usually only seen under high load, such as requesting a
loop rate beyond what the hardware is capable of
2019-07-07 19:03:01 +10:00
Andy Piper 36878e9b3c AP_InertialSensor: Allow all filter frequencies to be 16bit. 2019-06-06 17:09:17 +10:00
Andy Piper 18d403c3ac AP_InertialSensor: Rework notch filter allocation and sampling
https://github.com/ArduPilot/ardupilot/issues/11346

Allocate a notch filter per-IMU.
Update the notch filters in the backend at the sensor sample rate.
Allow raw logging of post-filtered gyro and accel values.
2019-06-06 17:09:17 +10:00
Andrew Tridgell 9c48d001ac AP_InertialSensor: skip gyro cal on watchdog reset 2019-04-22 16:53:35 +10:00
Siddharth Purohit 8c2d3945de AP_IneertialSensor: add support for custom accel scale
adds support for 30g measurement on ICM20649
2019-03-21 18:54:32 +11:00
Tom Pittenger 9347e6d36f AP_InertialSensor: unify singleton naming to _singleton and get_singleton() 2019-02-10 19:09:58 -07:00
Peter Barker b47733142f GLOBAL: rename DataFlash_Class to AP_Logger 2019-01-18 18:08:20 +11:00
Michael du Breuil 983356213a AP_InertialSensor: Remove unused parameter 2018-12-23 12:46:37 -08:00
Peter Barker 011c93f38e AP_InertialSensor: add override keyword 2018-11-08 11:30:12 +11:00
Peter Barker 1a640e3405 AP_InertialSensor: parameterise sensor-rate logging, generalise it
AP_InertialSensor: add parameters for push-to-log interval and count

AP_InertialSensor: rename BAT_RAW to BAT_OPT

This becomes a bitmask of options for the BatchSampler

AP_InertialSensor: rename 'fast sample' to 'sensorrate sample'

AP_InertialSensor: const sensor-rate filter method

AP_InertialSampler: remove hard-coding of sample rate multiplier

AP_InertialSensor: use parameter to enable/disable sensor-rate logging

AP_InertialSensor: use a parameter to control sensor-rate logging

AP_InertialSensor: allow backends to override sensor data multiplier

e.g. some accelerometers are sensitive over wider ranges than the default 16G

AP_Inertialsensor: correct sample rate multiplier
2018-05-01 09:35:29 +10:00
Andrew Tridgell 44131202cd AP_InertialSensor: 4kHz batch sampling 2018-05-01 09:35:29 +10:00
Jacob Walser ad4e928e7d AP_InertialSensor: add support for custom board orientations 2018-04-24 13:04:37 +01:00
Peter Barker be634a893f AP_InertialSensor: remove unused ins error count logging 2018-04-04 14:21:20 +01:00
Peter Barker 2396a248ed AP_InertialSensor: use ahrs singleton for simple accelcal 2018-04-02 23:25:05 +01:00
Andrew Tridgell e8726865ab AP_InertialSensor: Correct scaling of batch data 2018-03-08 18:00:16 -08:00
Peter Barker 096f7367bf AP_InertialSensor: add ins() to AP:: namespace 2018-02-13 17:15:05 +11:00
Andrew Tridgell c0c5f23aa5 AP_InertialSensor: added INS_ENABLE_MASK
this allows for only a specified subset of IMUs to be probed, so you
can disable IMUs that aren't needed.

The back corresponds to bits in the order the IMUs are normally probed
on the board
2018-01-20 10:36:22 +11:00
Andrew Tridgell 99499dece2 AP_InertialSensor: removed create() method for objects
See discussion here:

  https://github.com/ArduPilot/ardupilot/issues/7331

we were getting some uninitialised variables. While it only showed up in
AP_SbusOut, it means we can't be sure it won't happen on other objects,
so safest to remove the approach

Thanks to assistance from Lucas, Peter and Francisco
2017-12-14 08:12:28 +11:00
Andrew Tridgell 39c206ca03 AP_InertialSensor: limit delta-time from INS
limit delta-time to 2x average time

DEBUG CODE - DO NOT MERGE
2017-12-12 11:39:38 +11:00
Peter Barker 161e2145cb AP_InertialSensor: tighten type of simple_accel_cal result 2017-12-01 17:01:10 +00:00