ekf2: add unit test for earth mag field reset to WMM

This commit is contained in:
bresch 2023-07-21 10:54:46 +02:00 committed by Mathieu Bresciani
parent c8738e3a0d
commit 99824c445c
2 changed files with 16 additions and 0 deletions

View File

@ -372,6 +372,8 @@ public:
Vector3f getAccelBiasVariance() const { return Vector3f{P(13, 13), P(14, 14), P(15, 15)} / sq(_dt_ekf_avg); } // get the accelerometer bias variance in m/s**2
float getAccelBiasLimit() const { return _params.acc_bias_lim; }
const Vector3f &getMagEarthField() const { return _state.mag_I; }
// mag bias (states 19, 20, 21)
const Vector3f &getMagBias() const { return _state.mag_B; }
Vector3f getMagBiasVariance() const

View File

@ -83,6 +83,20 @@ TEST_F(EkfMagTest, fusionStartWithReset)
EXPECT_FALSE(_ekf_wrapper.isIntendingMag3DFusion());
EXPECT_EQ(_ekf_wrapper.getQuaternionResetCounter(), initial_quat_reset_counter + 1);
// AND WHEN: GNSS fusion starts
_ekf_wrapper.enableGpsFusion();
_sensor_simulator.startGps();
_sensor_simulator.runSeconds(11);
// THEN: the earth mag field is reset to the WMM
EXPECT_EQ(_ekf_wrapper.getQuaternionResetCounter(), initial_quat_reset_counter + 2);
Vector3f mag_earth = _ekf->getMagEarthField();
float mag_decl = atan2f(mag_earth(1), mag_earth(0));
float mag_decl_wmm_deg = 0.f;
_ekf->get_mag_decl_deg(&mag_decl_wmm_deg);
EXPECT_NEAR(degrees(mag_decl), mag_decl_wmm_deg, 1e-6f);
}
TEST_F(EkfMagTest, noInitLargeStrength)