Paul Riseborough
403424d55d
EKF: fix cross compiler build errors
2016-11-07 09:38:44 +11:00
Paul Riseborough
d5b398ddb1
EKF: Minimise data buffer lengths
...
Saves RAM and reduces output predictor errors by using the smallest data buffer length that meets time delay and update rate requirements.
2016-11-07 09:06:45 +11:00
Paul Riseborough
750a8874c1
EKF: Improve recovery and reporting for badly conditioned sideslip fusion
...
Do not reset the entire covariance matrix if we are only using sideslip fusion to update wind states.
Improve reporting.
2016-11-05 12:19:01 +01:00
Paul Riseborough
6c7703d485
EKF: Update tuning for synthetic sideslip fusion
...
Used value that worked well for replay of flight logs
2016-11-05 12:19:01 +01:00
Paul Riseborough
f76a2a5ff7
EKF: fix bug in sideslip fusion and reduce RAM usage
...
The bug meant the Y velocity (state index 5) covariance was not being updated correctly when sideslip was being used to constrain velocity drift (extended GPS loss).
The rework of the covariance update to reduce RAM follows the same pattern as adopted for other fusion processes
2016-11-05 12:19:01 +01:00
Paul Riseborough
951c8b77af
EKF: Improve wind state reset logic
...
Enables wind estimation without an airspeed sensor and enables synthetic sideslip to be used with an airspeed sensor for improved wind state estimation.
Wind states and covariances are reset differently depending on whether airspeed is available.
2016-11-05 12:19:01 +01:00
Paul Riseborough
2fedbc8a18
EKF: Refresh sideslip fusion auto-code and improve covariance update efficiency
2016-11-05 12:19:01 +01:00
Paul Riseborough
352b4ca177
EKF: Allow sideslip fusion with airspeed fusion
2016-11-05 12:19:01 +01:00
Paul Riseborough
fb6f4be453
EKF: don't allow sideslip fusion to affect non-airspeed states if not deae-reckoning
2016-11-05 12:19:01 +01:00
CarlOlsson
a9182259a5
fixed bug in beta fusion
2016-11-05 12:19:01 +01:00
CarlOlsson
0e3ae4b323
fixed issue with the covariance update in synthetic sideslip fusion
2016-11-05 12:19:01 +01:00
CarlOlsson
e1d9d503e3
updated logic of when to fuse beta. Now synthetic sideslip measurements are fused after 5 seconds of cruise flight with airspeed sensor activated
2016-11-05 12:19:01 +01:00
CarlOlsson
dec686afd7
updated parameters
2016-11-05 12:19:01 +01:00
CarlOlsson
5205a8198b
added function to control when to fuse beta
2016-11-05 12:19:01 +01:00
CarlOlsson
f5d0228cd5
include ecl.h
2016-11-05 12:19:01 +01:00
CarlOlsson
beb90f008d
adopted code for upstream changes
2016-11-05 12:19:01 +01:00
CarlOlsson
b7a4a1358f
added sidelip_fusion.cpp
2016-11-05 12:19:01 +01:00
CarlOlsson
12aeaafbd3
adopted estimator_interface.h
2016-11-05 12:19:01 +01:00
CarlOlsson
c8e3c24150
adopted ekf_helper.cpp
2016-11-05 12:19:01 +01:00
CarlOlsson
8f6c75bb0b
adopted ekf.h
2016-11-05 12:19:01 +01:00
CarlOlsson
15768f6f93
adopted ekf.cpp
2016-11-05 12:19:01 +01:00
CarlOlsson
738414d36e
adopted common.h
2016-11-05 12:19:01 +01:00
CarlOlsson
6c9cc5691c
adopted EKF/CMakeLists
2016-11-05 12:19:01 +01:00
Paul Riseborough
8aee45dd96
EKF: Fix bug causing repeated resets if GPS sensor disconnected
2016-11-05 09:36:06 +11:00
Beat Küng
07c6aabd98
EKF: reduce KH to only the elements that are really needed, and merge the loops
2016-11-02 10:26:40 +01:00
Paul Riseborough
1b59a89a18
EKF: save some stack memory
2016-11-02 09:06:06 +01:00
Beat Küng
25cb400da9
EKF: remove Ekf::KHP and move KHP to the methods where it's used
...
Everywhere where KHP is used, it is first completely reset, thus making
it unnecessary to keep it as a class member.
This saves 2.3KB RAM.
Stack sizes don't need changing, since there is already a function
Ekf::predictCovariance(), which needs around 3KB of stack and is called
close to where the fuse* functions are called.
2016-11-01 22:49:20 +01:00
Paul Riseborough
d07692e87e
Merge pull request #204 from PX4/pr-gpsReset
...
ekf reset: more granular reset / timeout strategy for gps fusion
2016-10-26 06:52:10 +11:00
Paul Riseborough
79df7e8889
EKF: Reduce effect of bad airspeed when other aiding data available
2016-10-25 08:34:41 +02:00
Paul Riseborough
968cfae632
EKF: Fix bug preventing fallback from GPS mode if GPS is lost
2016-10-25 08:32:01 +11:00
Roman
63cf3d50be
ekf gps reset: do not bother checking for need of reset if gps is not
...
available
Signed-off-by: Roman <bapstroman@gmail.com>
2016-10-24 11:45:36 +02:00
Roman
c5f750dcca
ekf reset: more granular reset / timeout strategy for gps fusion
...
- if both gps position and velocity measurements are rejected for 7 seconds
do a reset
- if only gps position measurements are rejected then wait for 14 seconds
as we still have velocity measurements to constrain the drift in position
- introduced ecl internal parameter for the timeout
Signed-off-by: Roman <bapstroman@gmail.com>
2016-10-24 11:40:12 +02:00
Paul Riseborough
b10b0184c5
EKF: Add IMU vibration calculation and reporting
...
Add calculation and reporting of IMU delta angle and velocity coning and high frequency vibration
2016-10-19 21:46:55 +11:00
Roman
17c195d1cd
ekf2 height reset: do not apply height change to height state twice (bug)
...
Signed-off-by: Roman <bapstroman@gmail.com>
2016-10-18 07:58:19 +02:00
Paul Riseborough
1093e6d789
EKF: fix documentation error
2016-10-13 22:37:14 +02:00
Roman
f80b3481a4
reset the newest output sample for all possible resets
...
Signed-off-by: Roman <bapstroman@gmail.com>
2016-10-12 08:54:38 +02:00
Roman
238d947239
proper handling of position and velocity reset
...
- position reset method was returning before the actual delta values
were written and applied to the output buffer
- apply reset delta also to the output sample which was already taken out
from the output buffer, otherwise the complementary filter solution is
offset from the ekf solution
Signed-off-by: Roman <bapstroman@gmail.com>
2016-10-12 08:54:38 +02:00
Paul Riseborough
79b1d3018d
EKF: Fix magnetometer innovation test ratio reporting bug
2016-10-12 08:51:45 +02:00
Paul Riseborough
352750e5d1
EKF: publish ekf solution status summary data
2016-10-06 09:02:29 +02:00
Paul Riseborough
007e73379f
EKF: Improve reporting of position error
2016-10-06 09:02:29 +02:00
Paul Riseborough
744b79c1b2
EKF: Publish innovation test ratios
2016-10-06 09:02:29 +02:00
Paul Riseborough
5ab90048e1
Merge pull request #184 from PX4/pr-rngDelayFix
...
fixed computation of range measurement timestamp
2016-10-04 09:13:19 +11:00
Paul Riseborough
b29174d86b
Merge pull request #193 from PX4/pr-haglInit
...
Pr hagl init
2016-10-04 08:21:15 +11:00
Paul Riseborough
b5ba4f280f
EKF: reduce output predictor velocity time constant
2016-10-03 14:13:07 +11:00
Paul Riseborough
65762e5998
EKF: publish output predictor tracking errors
2016-10-03 14:13:07 +11:00
Paul Riseborough
c81f9f1dba
EKF: Reduce output predictor tracking errors
...
Implements a PI tracking loop
2016-10-03 14:13:07 +11:00
Julian Oes
616aeb9ad7
ekf_helper: fix forgotten return value
2016-09-27 16:36:29 +02:00
Julian Oes
fd403b733d
CMakeLists: don't always optimize for size
...
Going forward the optimization flags should be set for a platform,
rather than for each individual module.
2016-09-27 16:35:35 +02:00
Roman
c6e1d97176
terrain estimator: initialise with projection
...
Signed-off-by: Roman <bapstroman@gmail.com>
2016-09-20 14:09:42 +02:00
Roman
cc05db4985
terrain estimator: pass initialisation return value correctly
...
Signed-off-by: Roman <bapstroman@gmail.com>
2016-09-20 14:07:50 +02:00
Roman
d53f532079
fixed computation of range measurement timestamp
...
Signed-off-by: Roman <bapstroman@gmail.com>
2016-09-17 11:41:12 +02:00
CarlOlsson
8d60da1442
removed old wind initialization
2016-08-11 15:26:21 +02:00
CarlOlsson
51c8715638
fixed issue with airspeed never fused
2016-08-11 15:26:21 +02:00
Paul Riseborough
d1d56d9e5e
EKF: Add logic to to control wind state estimation
2016-08-11 15:26:21 +02:00
Paul Riseborough
75bec44b94
EKF: add function to initialise wind states
2016-08-11 15:26:21 +02:00
Paul Riseborough
6dff2df28e
EKF: Add method to reset wind state covariances
...
Set variances in polar coordinates and rotate into cartesian frame
2016-08-11 15:26:21 +02:00
Paul Riseborough
a9894d7e8c
EKF: improve efficiency of airspeed fusion
...
Don't compute array entries where the result will be zero
2016-08-11 15:26:21 +02:00
Roman Bapst
df0f8fed45
fixed wrong condition on which gps height would be fused ( #180 )
...
- this solves the issue where height innovations would jump
between two regimes
Signed-off-by: Roman <bapstroman@gmail.com>
2016-08-05 14:45:48 +02:00
Youssef Demitri
168d9add76
added getter function for wind states
2016-07-22 12:33:41 +02:00
Beat Küng
73b8ac954d
ekf_helper.cpp: remove unused includes
...
This fixes a compile error with GCC 5.2.0 and cross-compilation:
/usr/arm-none-eabi/include/c++/5.2.0/arm-none-eabi/armv7e-m/fpu/bits/error_constants.h:122:27: error: 'ENOTSUP' was not declared in this scope
not_supported = ENOTSUP,
The problem was that the #include <iomanip> was taken from the host system,
which conflicts with includes from NuttX (NuttX has only basic C++ STL
support)
2016-07-15 12:50:11 +02:00
Lucas De Marchi
2240eb6b4f
Move __STDC_FORMAT_MACROS to build system ( #174 )
...
__STDC_FORMAT_MACROS changes the behavior of inttypes.h to allow
defining format macros for printf-like functions. It needs to be defined
before any include is done, otherwise due to include chains and header
guards it may not take effect.
Instead of defining it everywhere it is used, let the PX4 build system
to deal with it.
2016-07-10 16:29:51 +02:00
Paul Riseborough
a2d866520a
EKF: perform innovation check in all axes before fusing 3D mag data ( #171 )
...
Perform the innovation consistency check on all axes first and exit if any axis fails. Reduces the likelihood of bad magnetometer data corrupting the attitude estimates.
2016-07-07 16:46:30 +02:00
Paul Riseborough
f5e9ea1626
EKF: Prevent potential divide by zero
2016-06-30 17:06:32 +10:00
Paul Riseborough
eb2afc522d
EKF: fix bug preventing use of baro as a backup height source
2016-06-30 17:06:32 +10:00
Paul Riseborough
573f252b73
EKF: fix bug preventing GPS use as a backup height source
2016-06-30 17:06:32 +10:00
Paul Riseborough
5f9752cac8
EKF: Improve function names
2016-06-30 17:06:32 +10:00
Paul Riseborough
7bc9217f00
EKF: Clean up control of observation fusion
...
All the decision for a sensor are made within a specific function for that sensor and when there is data to process at the fusion time horizon.
Information and warning messages are improved.
2016-06-30 17:06:32 +10:00
Beat Küng
9a95898414
gps_message: remove time_usec_vel from struct (unused)
2016-06-27 10:12:23 +02:00
Roman Bapst
1b394460a3
fix comment about filter bias states
...
Signed-off-by: Roman Bapst <roman@px4.io>
2016-06-21 14:13:47 +02:00
Roman Bapst
bec1a6831e
added method to get gyro bias
...
Signed-off-by: Roman Bapst <roman@px4.io>
2016-06-21 14:13:47 +02:00
Roman
703fb4e31b
do not return early in velocity reset method otherwise
...
some code will not be executed
2016-06-08 07:51:18 +02:00
Paul Riseborough
928a7dd059
Merge pull request #157 from PX4/pr-ekf2ResetInterface
...
Change state reset information interface
2016-06-08 14:18:31 +10:00
Paul Riseborough
2024252d65
Merge pull request #158 from CarlOlsson/act_ars_off_by_default
...
activate tas fusion, off by default
2016-06-08 14:17:31 +10:00
Paul Riseborough
f26aca55a1
EKF: Fix bug in quaternion covariance initialisation function
...
The covariances between quaternion and non-quaternion states were not being updated
2016-06-08 13:23:30 +10:00
Paul Riseborough
b3baab64f2
EKF: Updates to 3-axis mag fusion auto-code
...
The code fragments for the magnetometer fusion have been refreshed from the auto-coder.
Explicit floating point types used for constants.
The 3x24 observation Jacobian has been replaced with a 1x24 that is updated each axis iteration to save memory.
2016-06-08 12:56:59 +10:00
Paul Riseborough
21168f9929
EKF: fix bug in 3-axis mag fusion innovation test
...
The fault flag was not being set after an innovation test failure resulting in fusion of the failed measurement
2016-06-08 11:58:33 +10:00
Paul Riseborough
99b34f0df4
EKF: Only reset necessary terms when mag fusion covariance reset required
...
Only the quaternion and mag fusion state covariances are used in the mag fusion calculations.
2016-06-08 11:58:33 +10:00
Paul Riseborough
381d99aed6
EKF: Inform console of serious fusion numerical errors
2016-06-08 11:58:33 +10:00
Paul Riseborough
dbfe8c0242
EKF: remove approximation in mag fusion innovation variance calculation
...
The covariance was not being updated with the observation from one axis before the innovation variance was calculated for the next axis. This results in greater weighting on measurements for subsequent axes.
2016-06-08 11:58:33 +10:00
Paul Riseborough
79228352e9
EKF: Reset mag and wind state variances to 'reasonable' values
...
If an in-flight reset is required, we do not want these variances going to zero as that will significantly delay recovery
2016-06-08 11:58:33 +10:00
Paul Riseborough
34ffffa021
EKF: Prevent use of non time-stamped invalid data during initialisation
...
Fixes bad height initialisation seen intermittently with snapdragon
2016-06-08 11:56:07 +10:00
CarlOlsson
eded0a8f7e
activate tas fusion, off by default
2016-06-07 13:49:17 +02:00
Paul Riseborough
3c84d37175
Merge pull request #156 from PX4/fix_printfs
...
EKF: use ECL printfs everywhere
2016-06-07 09:45:00 +10:00
Paul Riseborough
081e17729c
EKF: delay commencement of 3D mag fusion until clear of ground
...
Wait until enough height has been gained to be clear of ground based magnetic anomalies. Failure to do so can result in incorrect earth field initialisation.
2016-06-06 21:59:46 +10:00
Roman Bapst
670c6ca019
change state reset information interface for more convenient handling
...
on firmware side
2016-06-06 13:22:20 +02:00
Paul Riseborough
f08aee0a7d
EKF: Fix covariance index bug
2016-06-04 00:36:07 +10:00
Julian Oes
b8e2f79005
EKF: correct include paths
2016-06-02 16:29:22 +01:00
Julian Oes
ecfd8c867a
EKF: use ECL printfs everywhere
...
- Changes all printfs to ECL printfs
- Add ECL_ERR.
- Include ecl.h where needed.
- Add forgotten pragma once.
2016-06-02 16:07:26 +01:00
Paul Riseborough
6a55d908c5
EKF: replace reset event times with event counters
...
Using a 64bit integer was unnecessary given it was only being used to detect a new reset event.
2016-06-01 17:13:00 +10:00
Paul Riseborough
70f76e1a6c
EKF: publish innovation consistency check fail status
2016-06-01 17:13:00 +10:00
Paul Riseborough
e371a303a9
EKF: publish the quaternion reset event
2016-06-01 17:13:00 +10:00
Paul Riseborough
81ca167da8
EKF: align output observer to EKF states on startup
2016-06-01 17:13:00 +10:00
Paul Riseborough
3ec9221c18
EKF: update output observer and capture reset event for EV yaw resets
2016-06-01 17:13:00 +10:00
Paul Riseborough
9ec09f5f4e
EKF: update output observer and capture reset event for magnetic heading resets
2016-06-01 17:13:00 +10:00
Paul Riseborough
2b0d5c28f0
EKF: capture full quaternion change for reset events
2016-06-01 17:13:00 +10:00
Paul Riseborough
b2e432e211
EKF: publish position and velocity reset data
2016-06-01 17:13:00 +10:00
Paul Riseborough
733862f649
EKF: move the reset status struct to the Ekf class
...
This protects it from being modified externally
2016-06-01 17:13:00 +10:00
Paul Riseborough
aca0336392
EKF: update vertical position and velocity reset capture
...
Use reset event struct members instead of separate variables
2016-06-01 17:13:00 +10:00
Paul Riseborough
0605c88ecc
EKF: capture horizontal position reset events
2016-06-01 17:13:00 +10:00
Paul Riseborough
e3a1b4a3b3
EKF: capture velocity reset events
2016-06-01 17:13:00 +10:00