jremington / LSM9DS1-AHRS

Mahony 3D fusion filter and tilt compensated compass, with sensor calibration code
39 stars 12 forks source link

LSM9DS1 Successors & Icebergs #7

Open adamgarbo opened 2 months ago

adamgarbo commented 2 months ago

Hi @jremington,

Following along a similar vein to #6, I would be interested to get your thoughts on the current (2024) selection of IMUs available from Adafruit.

In my application, I am deploying tracking beacons on icebergs in the Canadian Arctic and using the IMUs to determine the iceberg's rotation (and orientation of the instrument): https://github.com/cryologger/ice-tracking-beacon

In the past, I've had very good success with the LSM303 (DLHC/D). When the LSM303 was discontinued, I switched to the LSM6DS33+LIS3MDL and using your LSM9DS1 calibration methods and tilt-compensated code, also achieved good results.

When the LSM6DS33 was discontinued, I switched to the LSM303AGR and again adapted your LSM9DS1 code. However, this time, the results were poor. Despite a seemingly successful calibration, the tilt-compensated heading measurements from deployed instruments were very limited in range (see include figure for example dataset) for icebergs that were confirmed to be making full 360° rotations. I suspect this was likely due to inadequate calibration and/or the magnetometer being less suitable for this application. I would happy for any additional ideas.

As the LSM303AGR doesn't appear to be the best choice of sensor, I'm in the market for a suitable drop-in replacement. Adafruit's offerings are not currently overly plentiful, but I'd be keen to get your thoughts of the most suitable sensor for my application. The LSM6DSOX + LIS3MDL looks like it could be a good option. I intend to continue using your tilt-compensated heading code.

Cheers, Adam

imu

jremington commented 2 months ago

"the tilt-compensated heading measurements from deployed instruments were very limited in range" sounds like an error in the code, in the magnetometer calibration, or both.

The apparent discontinuities in the Euler angle output might be a concern, but no conclusions can be drawn without further information on the X-axis sampling interval, whether this is observed in parallel experiments with other examples of the LSM303AGR, etc.

adamgarbo commented 2 months ago

Hi Jim,

The dataset is from a single tracking beacon collecting hourly data. During this time, the LSM303AGR recorded heading values between 42-54°. However, satellite imagery confirmed the iceberg experienced greater rotation than this during this period. I have several more datasets of beacons in geographically distinct regions exhibiting the same behaviour, so this is some form of systematic error.

The pitch and roll discontinuities are likely due to the shifting of the beacon on the ice surface during different times of the year (i.e., due to weather, surface ablation, polar bears, etc.)

Cheers, Adam

jremington commented 2 months ago

It is 99% certain that either the magnetometer calibration or the code is incorrect. Check the handedness correction and axis alignment, as the sensor axis configurations differ between the LSM9DS1 and the LSM303AGR.

The LSM303AGR accelerometer and magnetometer coordinate systems are both left handed, according to the data sheet labeling scheme.