From 7ad302279898e67277438e564ba1af94c06e9162 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Sat, 24 Jan 2026 09:31:32 +0300 Subject: [PATCH] Add parameter for configuring gyro bias lpf + reset the filter on `reset` command --- flix/cli.ino | 3 +++ flix/imu.ino | 4 ++-- flix/parameters.ino | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/flix/cli.ino b/flix/cli.ino index 2e4f9f8..bd67c30 100644 --- a/flix/cli.ino +++ b/flix/cli.ino @@ -6,6 +6,7 @@ #include "pid.h" #include "vector.h" #include "util.h" +#include "lpf.h" extern const int MOTOR_REAR_LEFT, MOTOR_REAR_RIGHT, MOTOR_FRONT_RIGHT, MOTOR_FRONT_LEFT; extern const int RAW, ACRO, STAB, AUTO; @@ -14,6 +15,7 @@ extern uint16_t channels[16]; extern float controlTime; extern int mode; extern bool armed; +extern LowPassFilter gyroBiasFilter; const char* motd = "\nWelcome to\n" @@ -178,6 +180,7 @@ void doCommand(String str, bool echo = false) { #endif } else if (command == "reset") { attitude = Quaternion(); + gyroBiasFilter.reset(); } else if (command == "reboot") { ESP.restart(); } else { diff --git a/flix/imu.ino b/flix/imu.ino index 22cf3e3..ffdc1ff 100644 --- a/flix/imu.ino +++ b/flix/imu.ino @@ -19,6 +19,8 @@ Vector acc; // accelerometer output, m/s/s Vector accBias; Vector accScale(1, 1, 1); +LowPassFilter gyroBiasFilter(0.001); + void setupIMU() { print("Setup IMU\n"); imu.begin(); @@ -50,8 +52,6 @@ void readIMU() { void calibrateGyroOnce() { static Delay landedDelay(2); if (!landedDelay.update(landed)) return; // calibrate only if definitely stationary - - static LowPassFilter gyroBiasFilter(0.001); gyroBias = gyroBiasFilter.update(gyro); } diff --git a/flix/parameters.ino b/flix/parameters.ino index e58abed..498bfb7 100644 --- a/flix/parameters.ino +++ b/flix/parameters.ino @@ -59,6 +59,7 @@ Parameter parameters[] = { {"IMU_ACC_SCALE_X", &accScale.x}, {"IMU_ACC_SCALE_Y", &accScale.y}, {"IMU_ACC_SCALE_Z", &accScale.z}, + {"IMU_GYRO_BIAS_A", &gyroBiasFilter.alpha}, // estimate {"EST_ACC_WEIGHT", &accWeight}, {"EST_RATES_LPF_A", &ratesFilter.alpha},