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.

