I have a small robot (4tronix MARS Rover) and have added a MPU9250 unit which includes accelerometer (and gyro and magnetometer). I have calibrated it to determine offsets in a static situation. My hope was to measure acceleration when it starts moving and integrated that to velocity and then integrated that to displacement (since I don't have revolution counter on the wheels, yet). However, the base accelerometer data contains a lot of noise from the movement itself, even on a flat floor, and as result the acceleration seems hidden in the noise (same amplitude), especially in low power setting.
Some data: sample frequency 100Hz, period measured 5 seconds, engine start after 1 second, engine stop after 4 seconds, speed approx 0.12 m/s (at 50% power), distance covered approx 0.34 m (measured with ruler), start-up and shut-down well within 0.5 second.
A program I found uses butterworth filter and have a played around with some settings. At 100% power at least it recognises start-up and shut-down, but still there is noise in between which creates inaccuracy in acceleration, speed and displacement data.
**My question is: Is there any way to filter the data to make it more accurate? Or is the acceleration just to weak relative to the noise from the movement?**

Below are graphs based on unfiltered and filtered data. This is at 100% power setting, which make the startup and shutdown somewhat recognisable.

[![unfiltered data](https://i.stack.imgur.com/AGYVr.png)](https://i.stack.imgur.com/AGYVr.png)

[![filtered data](https://i.stack.imgur.com/sPayR.png)](https://i.stack.imgur.com/sPayR.png)