12 memset(ec, 0,
sizeof *ec);
50#if APP_COMPARE_ORIGINAL
Phase-1 configuration: P-NUCLEO-WB55 (NUCLEO-WB55RG) + X-NUCLEO-IKS4A1 in Mode 3 (LSM6DSV16X is the s...
#define APP_CALIB_SAMPLES
mag samples at ~50 Hz -> ~2 s standing still
#define APP_STILL_ACC_TOL
#define IEKF_TANGENT_INNOV
#define APP_MAG_FAST
LIS2MDL 100 Hz, hub 120 Hz: halves the age of mag data.
#define APP_CALIB_GYRO_STILL
#define IEKF_ESTIMATE_BIAS
#define IEKF_PERSIST_TAU_S
#define IEKF_PERSIST_RATIO
#define IEKF_LOCKOUT_BUMP
#define IEKF_MAG_NIS_GATE
not recommended, see iekf.h
#define IEKF_DECOUPLE
tried: does not help, see 03 - Docs/theory/iekf-embedded.md
#define IEKF_SIGMA_VEC_MIN
#define IEKF_ACC_NIS_GATE
#define APP_STILL_GYRO_THR
#define IEKF_RESET_JACOBIAN
#define IEKF_TILT_COMP_MAG
#define APP_STEPS_PER_ACC
-> 240 Hz acc update + attitude loop
#define APP_STEP_HZ
propagation + rate loop
void app_est_config(est_config_t *ec)
Fills every field from app_config.h, including APP_COMPARE_ORIGINAL.
The production configuration of the attitude estimator, built from app_config.h in one place,...
void iekf_default_config(iekf_config_t *c)
float mag_latency_s
Age of the mag sample on arrival: the LIS2MDL converts at f_lis, the sensor hub re-reads it at f_sh >...
float calib_gyro_still
rad/s
float still_acc_tol
Stillness detector: if |a| ~ nominal and |omega| small for still_time_s, an external acceleration is ...
uint8_t gyro_per_step
2 with ODR 1920 Hz, 1 with 960 Hz
float still_gyro_thr
rad/s, e.g.
iekf_config_t ekf
sigma_acc/sigma_mag overwritten by calib
uint16_t calib_samples
mag samples while standing still
uint8_t steps_per_acc
4 -> acc update at 240 Hz
uint8_t decouple
1: acc corrects only roll/pitch, mag only yaw
float infl_max
— protection against "lockout" of the NIS inflation — If the estimate is truly wrong,...
uint8_t reset_jacobian
1: transport P after the retraction (default)
float sigma_bias
rad/s^2, bias random walk
float p0_att
initial attitude variance [rad^2]
uint16_t grace_updates
e.g.
float acc_nis_gate
— robustness to external accelerations / magnetic disturbances —
float persist_ratio
|mean|^2 / mean(|e|^2) above which it is persistent, e.g.
float p0_bias
initial bias variance [(rad/s)^2]
float sigma_gyro
rad/s, gyro white noise
float persist_decay
moving mean of the innovation: exp(-dt/tau), tau ~ 1 s
uint16_t lockout_updates
e.g.
float acc_tol
relative tolerance on the magnitude (gating)
float lockout_p_bump
rad^2, e.g.
float persist_min
minimum |mean| (sine of the error), e.g.