From a37daf4cec1b8b0bd1eb65cf516ce8801010c7e5 Mon Sep 17 00:00:00 2001 From: Paul Riseborough Date: Wed, 3 Feb 2016 18:41:38 +1100 Subject: [PATCH] ekf2: Add position observation noise parameter for flying without GPS A larger position uncertainty is required when flying without GPS to reduce tilt attitude estimation errors caused by vehicle manoeuvring. This needs to be tuneable to allow optimisation for different use cases (e.g. outdoor vs indoor). --- src/modules/ekf2/ekf2_main.cpp | 6 ++++-- src/modules/ekf2/ekf2_params.c | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/modules/ekf2/ekf2_main.cpp b/src/modules/ekf2/ekf2_main.cpp index bc36e01769..8ee74cd207 100644 --- a/src/modules/ekf2/ekf2_main.cpp +++ b/src/modules/ekf2/ekf2_main.cpp @@ -164,7 +164,8 @@ private: control::BlockParamFloat *_gps_vel_noise; control::BlockParamFloat *_gps_pos_noise; - control::BlockParamFloat *_baro_noise; + control::BlockParamFloat *_pos_noaid_noise; + control::BlockParamFloat *_baro_noise; control::BlockParamFloat *_baro_innov_gate; // innovation gate for barometric height innovation test (std dev) control::BlockParamFloat *_posNE_innov_gate; // innovation gate for GPS horizontal position innovation test (std dev) control::BlockParamFloat *_vel_innov_gate; // innovation gate for GPS velocity innovation test (std dev) @@ -214,7 +215,8 @@ Ekf2::Ekf2(): _wind_vel_p_noise(new control::BlockParamFloat(this, "EKF2_WIND_NOISE", false, &_params->wind_vel_p_noise)), _gps_vel_noise(new control::BlockParamFloat(this, "EKF2_GPS_V_NOISE", false, &_params->gps_vel_noise)), _gps_pos_noise(new control::BlockParamFloat(this, "EKF2_GPS_P_NOISE", false, &_params->gps_pos_noise)), - _baro_noise(new control::BlockParamFloat(this, "EKF2_BARO_NOISE", false, &_params->baro_noise)), + _pos_noaid_noise(new control::BlockParamFloat(this, "EKF2_NOAID_NOISE", false, &_params->pos_noaid_noise)), + _baro_noise(new control::BlockParamFloat(this, "EKF2_BARO_NOISE", false, &_params->baro_noise)), _baro_innov_gate(new control::BlockParamFloat(this, "EKF2_BARO_GATE", false, &_params->baro_innov_gate)), _posNE_innov_gate(new control::BlockParamFloat(this, "EKF2_GPS_P_GATE", false, &_params->posNE_innov_gate)), _vel_innov_gate(new control::BlockParamFloat(this, "EKF2_GPS_V_GATE", false, &_params->vel_innov_gate)), diff --git a/src/modules/ekf2/ekf2_params.c b/src/modules/ekf2/ekf2_params.c index bd033980ed..5c4a43d5d7 100644 --- a/src/modules/ekf2/ekf2_params.c +++ b/src/modules/ekf2/ekf2_params.c @@ -260,6 +260,16 @@ PARAM_DEFINE_FLOAT(EKF2_GPS_V_NOISE, 0.5f); */ PARAM_DEFINE_FLOAT(EKF2_GPS_P_NOISE, 1.0f); +/** + * Measurement noise for non-aiding position hold. + * + * @group EKF2 + * @min 0.5 + * @max 50.0 + * @unit m + */ +PARAM_DEFINE_FLOAT(EKF2_NOAID_NOISE, 10.0f); + /** * Measurement noise for barometric altitude. *