mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-05-25 16:56:25 +08:00
ekf2: block process noise increment without constraining the variance
The wind variance can be reset to a value larger than the wind init variance (e.g.: when the reset occurs when flying close to the N or E axis). Constraining the variance after a covariance initialization would artificially increase the correlation and could destabilize the filter.
This commit is contained in:
committed by
Mathieu Bresciani
parent
39abd87949
commit
79e0e00d8c
@@ -201,14 +201,15 @@ void Ekf::predictCovariance(const imuSample &imu_delayed)
|
||||
#if defined(CONFIG_EKF2_WIND)
|
||||
|
||||
// wind vel: add process noise
|
||||
if (!_external_wind_init) {
|
||||
float wind_vel_nsd_scaled = math::constrain(_params.wind_vel_nsd, 0.f, 1.f)
|
||||
* (1.f + _params.wind_vel_nsd_scaler * fabsf(_height_rate_lpf));
|
||||
float wind_vel_process_noise = sq(wind_vel_nsd_scaled) * dt;
|
||||
float wind_vel_nsd_scaled = math::constrain(_params.wind_vel_nsd, 0.f, 1.f)
|
||||
* (1.f + _params.wind_vel_nsd_scaler * fabsf(_height_rate_lpf));
|
||||
float wind_vel_process_noise = sq(wind_vel_nsd_scaled) * dt;
|
||||
|
||||
for (unsigned index = 0; index < State::wind_vel.dof; index++) {
|
||||
const unsigned i = State::wind_vel.idx + index;
|
||||
P(i, i) = fminf(P(i, i) + wind_vel_process_noise, sq(_params.initial_wind_uncertainty));
|
||||
for (unsigned index = 0; index < State::wind_vel.dof; index++) {
|
||||
const unsigned i = State::wind_vel.idx + index;
|
||||
|
||||
if (P(i, i) < sq(_params.initial_wind_uncertainty)) {
|
||||
P(i, i) += wind_vel_process_noise;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user