I am using this algorithm to estimate roll,pitch and yaw for an electric scooter. The use case requires providing relatively accurate attitude estimation on sustained accelerations and vibrations.
What i have done
constexpr uint16_t GYRO_SAMPLE_RATE_HZ = 100;
FusionAhrsSettings settings = {
.convention = FusionConventionNed,
.gain = 0.05f,
.gyroscopeRange = 2000.0f,
.accelerationRejection = 10.0f,
.magneticRejection = 10.0f,
.recoveryTriggerPeriod = 10 * GYRO_SAMPLE_RATE_HZ,
};
The problem is that, scooter might go through sustained acceleration for very long time. And if the vehicle is still accelerating when the recovery is initiated, it will use invalid data to correct for the current state.
As per my understanding, accelerationRejection will reject any sensor values from accelerometer if the difference between system state (gyro predicted) and accelerometer only attitude is greater than accelerationRejection.
Now the question is:
- How does acceleration recovery work ? Is my understanding correct or there is some sort of logic for using only valid sensor measurements for recovery ?
- What if high acceleration is still present when recovery is initiated ?
- If i set recoveryTriggerPeriod to 0, will accelerationRejection and magneticRejection still work ?
- What should i do to be completely dependent upon gyro in cases of high acceleration ?
The used IMU sensor is LSM6DSOX and magnetometer is IIS2MDCTR.
I am using this algorithm to estimate roll,pitch and yaw for an electric scooter. The use case requires providing relatively accurate attitude estimation on sustained accelerations and vibrations.
What i have done
The problem is that, scooter might go through sustained acceleration for very long time. And if the vehicle is still accelerating when the recovery is initiated, it will use invalid data to correct for the current state.
As per my understanding, accelerationRejection will reject any sensor values from accelerometer if the difference between system state (gyro predicted) and accelerometer only attitude is greater than accelerationRejection.
Now the question is:
The used IMU sensor is LSM6DSOX and magnetometer is IIS2MDCTR.