aboutsummaryrefslogtreecommitdiff
path: root/src/modules/ekf_att_pos_estimator
diff options
context:
space:
mode:
authorLorenz Meier <lm@inf.ethz.ch>2014-08-07 07:25:20 +0200
committerLorenz Meier <lm@inf.ethz.ch>2014-08-07 07:25:20 +0200
commit13b9cd0cec2d10d6252d0e8015d000f4fcc1517f (patch)
tree8d559f658049e1f27b5910520a1b6e8b3cdabde3 /src/modules/ekf_att_pos_estimator
parent95fc701376b63cc8209f9e8ae4dfab0f3435d825 (diff)
downloadpx4-firmware-13b9cd0cec2d10d6252d0e8015d000f4fcc1517f.tar.gz
px4-firmware-13b9cd0cec2d10d6252d0e8015d000f4fcc1517f.tar.bz2
px4-firmware-13b9cd0cec2d10d6252d0e8015d000f4fcc1517f.zip
Do not fuse height after innovation consistency check fail
Diffstat (limited to 'src/modules/ekf_att_pos_estimator')
-rw-r--r--src/modules/ekf_att_pos_estimator/estimator_23states.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/modules/ekf_att_pos_estimator/estimator_23states.cpp b/src/modules/ekf_att_pos_estimator/estimator_23states.cpp
index ffdd29a5b..c619735c6 100644
--- a/src/modules/ekf_att_pos_estimator/estimator_23states.cpp
+++ b/src/modules/ekf_att_pos_estimator/estimator_23states.cpp
@@ -1070,10 +1070,18 @@ void AttPosEKF::FuseVelposNED()
// apply a 10-sigma threshold
current_ekf_state.hgtHealth = sq(hgtInnov) < 100.0f*varInnovVelPos[5];
current_ekf_state.hgtTimeout = (millis() - current_ekf_state.hgtFailTime) > hgtRetryTime;
- if (current_ekf_state.hgtHealth || current_ekf_state.hgtTimeout)
+ if (current_ekf_state.hgtHealth || current_ekf_state.hgtTimeout || staticMode)
{
current_ekf_state.hgtHealth = true;
current_ekf_state.hgtFailTime = millis();
+
+ // if we just reset from a timeout, do not fuse
+ // the height data, but reset height and stored states
+ if (current_ekf_state.hgtTimeout) {
+ ResetHeight();
+ ResetStoredStates();
+ fuseHgtData = false;
+ }
}
else
{