10#ifndef M5_UNIT_IMU_IMU_FILTER_VQF_HPP
11#define M5_UNIT_IMU_IMU_FILTER_VQF_HPP
28#ifndef VQF_SINGLE_PRECISION
29#define VQF_SINGLE_PRECISION
31#include "third_party/vqf/vqf.hpp"
106 virtual void reset()
override;
107 virtual void update(
const float dt,
const float accel[3],
const float gyro[3],
const float* mag)
override;
108 virtual void quaternion(
float& w,
float& x,
float& y,
float& z)
const override;
119 return static_cast<float>(_vqf->getParams().tauAcc);
131 return static_cast<float>(_vqf->getParams().tauMag);
145 return _vqf->getParams().restBiasEstEnabled;
159 return _vqf->getParams().motionBiasEstEnabled;
184 return _vqf->getParams().magDistRejectionEnabled;
209 return static_cast<float>(_vqf->getParams().biasClip);
218 return _vqf->getRestDetected();
237 const VQFState& state = _vqf->getState();
238 norm =
static_cast<float>(state.magNormDip[0]);
239 dip_deg =
static_cast<float>(state.magNormDip[1]) * (180.0f / 3.14159265358979323846f);
253 _vqf->getRelativeRestDeviations(out);
254 gyro_relative =
static_cast<float>(out[0]);
255 accel_relative =
static_cast<float>(out[1]);
269 return _vqf->getMagDistDetected();
275 void ensure_sample_period(
const float dt);
277 std::unique_ptr<::VQF> _vqf{};
Framework-independent contract shared by every AHRS attitude filter.
Definition filter_base.hpp:81
Adapter around the vendored VQF algorithm (Daniel Laidig, MIT license; see src/imu/filter/third_party...
Definition vqf.hpp:102
void writeRestBiasEstimation(const bool enabled)
Enable/disable gyroscope bias estimation while the device is at rest.
Definition vqf.cpp:135
bool writeTauMag(const float tau_mag)
Set the magnetometer heading correction time constant (VQFParams::tauMag)
Definition vqf.cpp:126
bool readMotionBiasEstimation() const
Whether motion bias estimation is enabled.
Definition vqf.hpp:157
float readBiasClip() const
Current maximum expected gyroscope bias (dps)
Definition vqf.hpp:207
virtual void reset() override
Reset the internal attitude estimate (and any filter state) to identity.
Definition vqf.cpp:41
bool writeTauAcc(const float tau_acc)
Set the accelerometer low-pass time constant (VQFParams::tauAcc)
Definition vqf.cpp:117
float readTauMag() const
Current magnetometer heading correction time constant.
Definition vqf.hpp:129
void readMagNormDip(float &norm, float &dip_deg) const
The magnetic field as VQF currently measures it, in earth frame.
Definition vqf.hpp:235
virtual void quaternion(float &w, float &x, float &y, float &z) const override
Current fused attitude.
Definition vqf.cpp:85
bool writeBiasClip(const float bias_clip_dps)
Set the largest gyroscope bias the estimator will accept (VQFParams::biasClip)
Definition vqf.cpp:150
void readRestDeviations(float &gyro_relative, float &accel_relative) const
How close the last sample was to being accepted as "at rest".
Definition vqf.hpp:250
float readTauAcc() const
Current accelerometer low-pass time constant.
Definition vqf.hpp:117
bool magDisturbanceDetected() const
Whether a magnetic disturbance is currently detected.
Definition vqf.hpp:267
void writeMotionBiasEstimation(const bool enabled)
Enable/disable gyroscope bias estimation while the device is moving.
Definition vqf.cpp:140
m5::math::Vector3 readGyroBias() const
Current estimated gyro bias (dps, body frame); zero unless bias estimation is enabled.
Definition vqf.cpp:166
bool readMagDisturbanceRejection() const
Whether magnetic disturbance rejection is enabled.
Definition vqf.hpp:182
bool readRestBiasEstimation() const
Whether rest bias estimation is enabled.
Definition vqf.hpp:143
bool restDetected() const
Whether the device is currently detected as resting (see writeRestBiasEstimation())
Definition vqf.hpp:216
void writeMagDisturbanceRejection(const bool enabled)
Enable/disable magnetic disturbance detection and rejection.
Definition vqf.cpp:145
virtual void update(const float dt, const float accel[3], const float gyro[3], const float *mag) override
Fuse one IMU sample into the attitude estimate.
Definition vqf.cpp:51
Common contract for AHRS attitude filters.
Top level namespace of M5Stack.
Definition ahrs_controller.cpp:26
Plain 3D vector (float)
Definition vector3.hpp:25
Minimal 3D vector arithmetic (framework independent)