Instrument Neutral Distributed Interface INDI 2.2.5
Public Member Functions | List of all members
INDI::MahonyFilter Class Reference

Mahony AHRS filter (9-DOF and 6-DOF). More...

#include <imusensorfusion.h>

Inheritance diagram for INDI::MahonyFilter:
INDI::IMUSensorFusion

Public Member Functions

 MahonyFilter (double kp=2.0, double ki=0.005)
 
virtual ~MahonyFilter ()=default
 
void update (double gx, double gy, double gz, double ax, double ay, double az, double mx, double my, double mz, double dt, bool useMag=true) override
 Perform one filter update step.
 
void getQuaternion (double &w, double &i, double &j, double &k) const override
 Return the current orientation quaternion.
 
void reset () override
 Reset the filter to the identity quaternion.
 
void setKp (double kp)
 Set proportional gain Kp.
 
double getKp () const
 
void setKi (double ki)
 Set integral gain Ki.
 
double getKi () const
 
- Public Member Functions inherited from INDI::IMUSensorFusion
virtual ~IMUSensorFusion ()=default
 

Detailed Description

Mahony AHRS filter (9-DOF and 6-DOF).

A complementary filter based on a Proportional-Integral (PI) controller on the SO(3) Lie group. Two tuning parameters:

Kp — Proportional gain: how strongly the accelerometer/magnetometer corrects the gyroscope integration. Higher → faster convergence. Ki — Integral gain: compensates for systematic gyroscope bias drift. Set to 0 to disable integral correction.

Recommended starting values: Kp = 2.0, Ki = 0.005.

Reference: Mahony, R. et al. (2008) "Nonlinear Complementary Filters on the Special Orthogonal Group"

Definition at line 162 of file imusensorfusion.h.

Constructor & Destructor Documentation

◆ MahonyFilter()

INDI::MahonyFilter::MahonyFilter ( double  kp = 2.0,
double  ki = 0.005 
)
explicit
Parameters
kpProportional gain. Default 2.0.
kiIntegral gain. Default 0.005.

Definition at line 235 of file imusensorfusion.cpp.

◆ ~MahonyFilter()

virtual INDI::MahonyFilter::~MahonyFilter ( )
virtualdefault

Member Function Documentation

◆ getKi()

double INDI::MahonyFilter::getKi ( ) const
inline

Definition at line 196 of file imusensorfusion.h.

◆ getKp()

double INDI::MahonyFilter::getKp ( ) const
inline

Definition at line 186 of file imusensorfusion.h.

◆ getQuaternion()

void INDI::MahonyFilter::getQuaternion ( double &  w,
double &  i,
double &  j,
double &  k 
) const
overridevirtual

Return the current orientation quaternion.

Parameters
wScalar (real) component
iVector X component
jVector Y component
kVector Z component

Implements INDI::IMUSensorFusion.

Definition at line 253 of file imusensorfusion.cpp.

◆ reset()

void INDI::MahonyFilter::reset ( )
overridevirtual

Reset the filter to the identity quaternion.

Implements INDI::IMUSensorFusion.

Definition at line 242 of file imusensorfusion.cpp.

◆ setKi()

void INDI::MahonyFilter::setKi ( double  ki)
inline

Set integral gain Ki.

Definition at line 192 of file imusensorfusion.h.

◆ setKp()

void INDI::MahonyFilter::setKp ( double  kp)
inline

Set proportional gain Kp.

Definition at line 182 of file imusensorfusion.h.

◆ update()

void INDI::MahonyFilter::update ( double  gx,
double  gy,
double  gz,
double  ax,
double  ay,
double  az,
double  mx,
double  my,
double  mz,
double  dt,
bool  useMag = true 
)
overridevirtual

Perform one filter update step.

Parameters
gxGyroscope X-axis angular rate (rad/s)
gyGyroscope Y-axis angular rate (rad/s)
gzGyroscope Z-axis angular rate (rad/s)
axAccelerometer X-axis (m/s² or any unit — only direction used)
ayAccelerometer Y-axis
azAccelerometer Z-axis
mxMagnetometer X-axis (µT or any consistent unit)
myMagnetometer Y-axis
mzMagnetometer Z-axis
dtTime step in seconds since last update
useMagIf false the magnetometer data is ignored (6-DOF mode)

Implements INDI::IMUSensorFusion.

Definition at line 261 of file imusensorfusion.cpp.


The documentation for this class was generated from the following files: