Commit Graph

154 Commits

Author SHA1 Message Date
Andrew Tridgell
17a45b2c44 AP_NavEKF2: fixes for new compass API 2020-05-11 19:38:53 +10:00
Randy Mackay
ae661ada20 AP_NavEKF2: initialise pre-arm failure message 2019-10-31 20:08:38 +09:00
Randy Mackay
e2d3afaaa7 AP_NavEKF2: reduce EK2_HRT_FILT max to 30 2019-10-18 11:15:25 +09:00
Paul Riseborough
c26c6fd078 AP_NavEKF2: Add missing vertical position derivative calculation
Use a third order order complementary filter to estimate the rate of change of vertical position output.
2019-10-18 11:15:25 +09:00
Andrew Tridgell
f7e138bddd AP_NavEKF2: use parent class for intermediate static variables
this makes the code faster as well as using less memory when both EK2
and EK3 are enabled
2019-10-01 15:39:03 +10:00
Andrew Tridgell
8dd2119b14 AP_NavEKF2: make it easy to do EK2 timing tests
for future benchmarking
2019-09-28 08:57:26 +10:00
Andrew Tridgell
255981c60c AP_NavEKF2: moved some of the intermediate vars to the stack
this keeps stack frames below 1k, while giving faster access to the
variables and saving more memory
2019-09-24 12:51:54 +10:00
Andrew Tridgell
0041874826 AP_NavEKF2: moved intermediate variables to common memory
this moves intermediate variables from being per-core to being common
between cores. This saves memory on systems with more than one core by
avoiding allocating this memory on every core.

This is an alternative to #11717 which moves memory onto the stack. It
doesn't save as much memory as #11717, but avoids creating large stack
frames
2019-09-24 12:51:54 +10:00
Andrew Tridgell
1d47f9186e AP_NavEKF2: fixed use of old irqsave() API 2019-09-21 15:36:47 +10:00
Andrew Tridgell
9372073f63 AP_NavEKF2: continuously update gpsGoodToAlign
use it to determine how to handle a height datum reset
2019-07-07 19:20:32 +10:00
Andrew Tridgell
1c4c5a6850 AP_NavEKF2: learn gyro biases for inactive gyros
this allows us to learn the gyro biases each lane would need if it had
to switch to another gyro due to a sensor failure. This prevents a
sudden change in gyro bias on IMU failure
2019-07-07 19:03:01 +10:00
Michael du Breuil
892b687c09 AP_NavEKF2: Fix AP_GPS.h include 2019-06-18 10:02:05 +10:00
Andrew Tridgell
e9ed3540f1 AP_NavEKF2: constrain field by table after fusion
this should make for faster convergence
2019-06-03 12:21:29 +10:00
Andrew Tridgell
3835d2613e AP_NavEKF2: added EK2_MAG_EF_LIM parameter
this sets a limit on the difference between the earth field from the
WMM tables and the learned earth field inside the EKF. Setting it to
zero disables the feature. A positive value sets the limit in mGauss.
2019-06-03 12:21:29 +10:00
Randy Mackay
e19d638c0f AP_NavEKF2: support higher optical flow updates rates 2019-05-11 16:23:57 +09:00
Paul Riseborough
aa6eee82f4 AP_NavEKF2: Rework opt flow terrain height logic 2019-04-02 10:51:12 +11:00
Arjun Vinod
a0e7c37f8c AP_NavEKF2: fixed typos 2019-02-22 10:21:35 +11:00
Tom Pittenger
b32e8a4424 AP_NavEKF2: remove HAL_CPU_CLASS_150 check, 150 is already a minimum requirement 2019-02-17 12:59:52 -08:00
Peter Barker
ebd12b30e8 AP_NavEKF2: adjust for Location_Class and Location unification 2019-01-16 11:45:29 +11:00
Pierre Kancir
49d20364cb AP_NavEKF2: pass quaternion by const reference 2018-12-20 09:05:01 +09:00
Andrew Tridgell
8ea7df3efe AP_NavEKF2: added filter reset if unhealthy for 5s and disarmed 2018-11-30 11:02:30 +11:00
Michael du Breuil
29db069c75 AP_NavEKF2: Suppress clearing non-trival type warning 2018-10-30 16:17:03 -07:00
Andrew Tridgell
805647df85 AP_NavEKF2: enable use of in-flight compass learning 2018-10-24 07:25:42 +10:00
Peter Barker
3a79ae4eca AP_NavEKF2: use union to alias array and struct access to states
This avoids creating two pointers of different types to the same memory.

Having two pointers to the same memory can lead to the compiler
optimising code such that a write to one pointer is rearranged to be
either before or after a read from the other pointer depending on which
is deemed faster - not a good outcome.
2018-10-19 08:46:43 +11:00
Peter Barker
fb176b544f AP_NavEKF2: correct compilation when running MATH_CHECK_INDEXES 2018-10-19 08:46:43 +11:00
murata
a9b2b9dddf AP_NavEKF2: Delete unused definitions 2018-06-11 09:11:44 +09:00
Paul Riseborough
c680b931dc AP_NavEKF2: Enable fusion of external nav position data 2018-03-27 20:28:42 +09:00
Peter Barker
40957ec430 AP_NavEKF2: use ins singleton 2018-03-16 00:37:35 -07:00
Peter Barker
9c8466dc03 AP_NavEKF2: use GPS singleton 2017-12-27 00:58:02 +00:00
Andrew Tridgell
97729a12f0 AP_NavEKF2: don't run IMU updates until buffer fills
this prevents us using bad initial data multiple times. It fixes a bug
where the IMU may pause during EK2 initialisation
2017-12-12 11:39:38 +11:00
Samuel Tabor
1b4705242c AP_NavEKF2: print reason for EKF2 arming failure when no GPS is available 2017-11-20 13:53:31 +09:00
priseborough
36e7dfb5f6 AP_NavEKF2: Improve GPS reference height estimator
Fix rounding error bug preventing state from updating after initial convergence.
Decouple GPS reference height from published EKf origin height.
Add bitmask parameter to control update and publishing of GPS reference height.
2017-06-14 12:44:41 +01:00
Andrew Tridgell
d799bacd7d AP_NavEKF2: fixed reset of coviariance matrix 2017-04-27 18:33:25 +10:00
priseborough
8c46d4316b AP_NavEKF2: handle position jump caused by change in GPS receiver
If the GPS receiver selection changes and we are using GPS for height, the
vertical position will be reset to the new GPS height measurement.
correct output observer history when doing a GPS height reset
2017-03-13 11:31:51 +11:00
Randy Mackay
fbecda7eeb AP_NavEKF2: change order of variable initialisation
No functional change, this modifies the init order to match the declaration order.
2016-11-30 17:56:49 +09:00
Randy Mackay
82854953e7 AP_NavEKF2: minor comment fix 2016-11-30 17:56:48 +09:00
Randy Mackay
14a73e499a AP_NavEKF2: initialise two range beacon structures 2016-11-30 17:56:47 +09:00
priseborough
ef03a85cd3 AP_NavEKF2: add range beacon interface and fusion method 2016-11-30 17:56:43 +09:00
priseborough
f6021c959d AP_NavEKF2: capture and publish vertical position reset deltas
Calculate the change in vertical position due to a internal EKF state reset or a EKF core switch
2016-11-24 19:57:45 +09:00
priseborough
c93c3d54f3 AP_NavEKF2: Don't correct for zero IMU position offset
The IMU offset correction involves a significant number of floating point operations and most users will leave the offset parameter at zero.
2016-10-27 14:54:44 +11:00
priseborough
13ca62b1c7 AP_NavEKF2: Correct velocity and position outputs for IMU offset
This can improve position hold performance where it is not practical to have the IMU located at the centroid.
Although this enables the effect of IMU position offsets to be corrected, users will still need to be instructed to place the IMU as close to the vehicle c.g. as practical as correcting for large offsets makes the velocity estimates noisy.
2016-10-27 14:54:43 +11:00
Mathieu OTHACEHE
152edf7189 Global: remove mode line from headers
Using a global .dir-locals.el file is a better alternative than
reincluding the same emacs header in every file of the project.
2016-10-24 09:42:01 -02:00
priseborough
60d8adcca0 AP_NavEKF2: Fix height drift on ground using range finder without GPS 2016-09-13 17:44:59 +09:00
priseborough
e6f36f04db AP_NavEKF2: Enable automatic use of range finder height
The EK2_RNG_USE_HGT parameter sets the height (expressed as a percentage of the maximum range of the range finder as set by the RNGFND_MAX_CM parameter) below which the range finder will be used as the primary height source when the vehicle is moving slowly.

When using a height reference other than GPS, the height datum can drift due to air pressure changes if using baro, or due to terrain height changes if using range finder as the primary height source. To ensure that a consistent height datum is available when switching between altitude sources, the WGS-84 height estimate of the EKF's local positi norigin is updated using a
single state Bayes estimator,

If rngfinder or gps height data is lost whilst being used, there will be a fall-back to baro data.
2016-08-08 10:56:44 +09:00
priseborough
9a23152ee4 AP_NavEKF2: Fix bugs and consolidate aiding switch logic
Switching in and out of aiding modes was being performed in more than one place and was using two variables.
The reversion out of GPS mode due to prolonged loss of GPS was not working.
This consolidates the logic and ensures that PV_AidingMode is only changed by the setAidingMode function.
2016-07-19 12:16:50 +10:00
priseborough
341d070db8 AP_NavEKF2: Separate filter status update and get functions
The filter status logic calculations were being repeated every time the get function was called.
The logic is now updated once per filter update step and a separate get function added
2016-07-19 12:16:49 +10:00
priseborough
280395afa1 AP_NavEKF2: Don't declare ready to do aiding unless gyro bias is learned 2016-07-19 12:16:48 +10:00
priseborough
169cd6625d AP_NavEKF2: clean up output predictor 2016-07-19 12:16:48 +10:00
priseborough
10470b2dc1 AP_NavEKF2: fix bug in initialisation of declination co-variances
Co-variances were being re-zeroed after being set. This meant that the initial declination learning was sensitive to measurement errors which could result in poor initial yaw accuracy.
2016-07-10 08:21:18 +10:00
priseborough
51dbed2338 AP_NavEKF2: remember mag field states between flight on same power cycle
Remember the mag bias and earth field states learned during flight when the vehicle  lands.
This improves performance for vehicles that do multiple flight on one power cycle
2016-07-10 08:21:18 +10:00