we are currently trying to get an LSM6DSV (specifically LSM6DSV16X) IMU working, which has in-built sensor fusion. It's important for us, that there is very little drift over time, and the sensor itself lists ~0.7 degrees per 5 minutes in the sort of conditions we assume to belong in. We do get fusion vectors out of the sensor, however, they seem to drift very heavily, when in movement, with very little back and forth rotation, I can get upwards of 2 degrees of drift every minute, even though that's past even the worst case drift from the datasheet.
The relevant code can be found here: https://github.com/wigwagwent/LSM6DSV16X/blob/main/src/sensors/lsm6dsv16xsensor.cpp
But in short, we mainly used the example provided by st themselves, and we only really use the provided "game vector". The algorithm can output a gravity vector and a gyroscope bias that we don't know how to utilize properly, if it's necessary.
The module was soldered onto an off the shelf bmi160 breakout board like this, as that one has the same footprint and passive components that the lsm family requires. This being a soldering issue isn't out of the question either.
We tried increasing the gyroscope and accelerometer ODR values, but that didn't solve the issue. We are currently looking into manually setting the gyroscope bias, but we aren't sure how that could be done effectively.
Any insight would be greatly appreciated!