IMU Roll Angle: Correct when Stopped, Wrong when Moving

Hi,

I have been using an MPU6050 (3 axis gyro, 3 axis accel, built in motion filter called DMP) on a car axle to measure axle angle when driving. On a long banked corner (2 degrees) the sensor reads 0 degrees while moving (~40km/hr), but when stopped it reads correctly (2 degrees). The physical axle angle is the same though in both scenarios.

I believe the lateral force from going through the corner is affecting the sensors interpretation of which way gravity is, and is adjusting the roll angles accordingly. See image;

Can anyone comment on how this might be solved?

For example;
-Using a sensor with a magnetometer?
-Using a sensor with a different filter?
-Is this solveable at all or just an inherent factor of MEMS sensors?

Time is a critical factor at the moment in my project.

Thanks in advance for your input.

I believe the lateral force from going through the corner is affecting the sensors interpretation of which way gravity is

Correct. This particular problem can't be solved with MEMS sensors, as the rate gyro is nearly useless on long, shallow turns.

It can be solved with much, much more expensive sensors ($10K - $50K).

The OP in [u]this thread[/u] seemed to have the same issue with MPU6050 and went to the BNO055 with some luck but had calibration issues. Then said the problem was solved with MPU9250 and RTIMULib in the last post.

I wonder if adding in a magnetometer helped as it gives a fixed 3D reference point which is not affected by acceleration forces. Or perhaps he tweaked the algorithms in RTIMULib to get his desired output. I have yet to delve into the motion-fusion/filter algorithms. To date I have just been letting the MPU6050 do that internally in the DMP.

Any thoughts on these potential solutions?

Please state your requirements.

None of those MEMS sensors can do better than about +/- 1 degree in absolute orientation accuracy in any case, and even that requires very careful calibration.

A magnetometer could certainly help, but is problematic in a car or any environment with ferrous materials.

The BNO055 has very poor documentation with respect to calibration, and if you look at the constants stored by the internal procedure, it only involves offsets. No individual scale factors are calculated to correct the gain on the individual axes.

RTIMUlib does calculate gain errors and is clearly the best open source code available. It should do much better than the BNO055, with proper calibration, and can use the magnetometer.

Thanks again.

The requirement is to mount the sensor on a car axle, and by measuring the car axle angle as it drives I am measuring the road angle. It will be used on a special vehicle and I am very happy with the field test results to date and it has proven to be accurate enough for my requirements, all except the cornering at speed issue.

The vehicle will travel on lots of flat straights in between corners. I feel as though some method where the IMU measures gravity on the flat (such as a startup procedure when the device is powered), then determines the horizontal plane as perpendicular to the gravity vector, and then 'locks' that plane in place, so when lateral acceleration is experienced later it won't affect the horizontal plane, which it is measuring roll from.

Or perhaps using a magnetometer for an external reference that it can also use to 'lock' the horizontal plane in place.

The next best step to test may be the MPU9250 with RTUIMULib and try and tweak to get the results I need. I will also try and manage any magnetic interference from ferrous surroundings.

I do recommend RTIMUlib. The sensors it supports are pretty much state of the art, and more or less equivalent in terms of noise and other errors.

Ok great. One thing I did not mention is that my system uses a GPS as well. I have read some things of people using GPS in their IMU applications, but this may be to improve position estimates and not orientation estimates...

GPS is useless for determining body orientation.

Some time ago, I posted a quick how-to guide on implementing RTIMULib here.

For best results, you should calibrate the accelerometer as well, but a procedure for that is not built in to RTIMULib. A comprehensive overview and discussion of calibration can be found at Edward Mallon's site.

Some further research is giving me more insight into how others solve the problem. Primarily using a method to calculate the centrifugal acceleration, and then compensating for it.

These solutions come from William Premerlani in the fixed-wing UAV community.

Using GPS;

Using only Accel and Gyro;

This solution coming from a research paper for fixed-wing UAV;