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