Complementary Filter

The ComplementaryFilter provides a simple implementation of a filter specifically designed to combine the outputs of a gyroscope and an accelerometer to produce a more accurate estimate of the orientation of an object. This filter is provided for completeness and simplicity, but the KalmanFilter or MadgwickFilter are generally preferred for this purpose.

API Reference

Header File

Classes

class ComplementaryFilter

Complementary filter for estimating pitch and roll angles from accelerometer and gyroscope readings. The filter is defined by the following equation: angle = alpha * (angle + gyro * dt) + (1 - alpha) * accel where:

  • angle is the estimated angle,

  • alpha is the filter coefficient (0 < alpha < 1),

  • gyro is the gyroscope reading,

  • accel is the accelerometer reading,

  • dt is the time step.

Public Functions

inline explicit ComplementaryFilter(float alpha = 0.98)

Constructor

Parameters

alpha – Filter coefficient (0 < alpha < 1)

inline void update(const std::span<const float, 3> &accel, const std::span<const float, 3> &gyro, float dt)

Update the filter with accelerometer and gyroscope readings.

Note

The accelerometer and gyroscope readings must be in the same coordinate system.

Parameters
  • accel – Accelerometer readings (m/s^2)

  • gyro – Gyroscope readings (degrees/s)

  • dt – Time step (s)

inline void update(float ax, float ay, float az, float gx, float gy, float gz, float dt)

Update the filter with accelerometer and gyroscope readings.

Note

The accelerometer and gyroscope readings must be in the same coordinate system.

Parameters
  • ax – Accelerometer x-axis reading (m/s^2)

  • ay – Accelerometer y-axis reading (m/s^2)

  • az – Accelerometer z-axis reading (m/s^2)

  • gx – Gyroscope x-axis reading (degrees/s)

  • gy – Gyroscope y-axis reading (degrees/s)

  • gz – Gyroscope z-axis reading (degrees/s)

  • dt – Time step (s)

inline float get_pitch() const

Get the estimated pitch angle (degrees)

Returns

The estimated pitch angle

inline float get_roll() const

Get the estimated roll angle (degrees)

Returns

The estimated roll angle