kriswiner / MPU9250

Arduino sketches for MPU9250 9DoF with AHRS sensor fusion
1.03k stars 472 forks source link

Accelerometer bias #412

Open Mounir146 opened 4 years ago

Mounir146 commented 4 years ago

Hey Kris

I am convinced that such a work has required from you a lot of efforts and time, so i want to thank you for sharing such a great work with us.

I still have plenty of questions, let's start by :

1- Did you figure out why the acceleration biases are not working for the MPU-9250 ? 2- Does the DMP inside the MPU9250 accomplish the 9Dof sensor fusion ? 3- What are the advantages of using a Dual MPU9250 ?

Thank you

kriswiner commented 4 years ago
  1. Yes, it has to do with the fact the LSbit in the accel offset register is also a temperature compensation bit, and I couldn;t figure out how to manage this properly. Others claim they do, but in the end it is more convenient to simply manage this in the main loop anyway.

  2. No, 6 DoF only. The newer ICM20948 does do this correctly using several DMPs.

  3. None.

On Mon, Apr 6, 2020 at 1:53 AM Mounir146 notifications@github.com wrote:

Hey Kris

I am convinced that such a work has required from you a lot of efforts and time, so i want to thank you for sharing such a great work with us.

I still have plenty of questions, let's start by :

1- Did you figure out why the acceleration biases are not working for the MPU-9250 ? 2- Does the DMP inside the MPU9250 accomplish the 9Dof sensor fusion ? 3- What are the advantages of using a Dual MPU9250 ?

Thank you

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/kriswiner/MPU9250/issues/412, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABTDLKVTWTRTWRUE7TB6NY3RLGKADANCNFSM4MCCTVKQ .

Mounir146 commented 4 years ago

Thank you for the quick response !

Can you please tell me where did you exactly invoke the 6Dof DMP in your code ? and if you did, what's its role exactly ?

Another thing, the link you gave for details about Madgwick's filter is not working anymore ! PS : http://www.x-io.co.uk/category/open-source/

Delta time between two readings is about 28ms, is that ok ?

kriswiner commented 4 years ago

I do not use the DMP ever.

On Tue, Apr 7, 2020 at 3:24 AM Mounir146 notifications@github.com wrote:

Thank you for the quick response !

Can you please tell me where did you exactly invoke the 6Dof DMP in your code ? and if you did, what's its role exactly ?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/kriswiner/MPU9250/issues/412#issuecomment-610305964, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABTDLKUQKRF2PHLSXMTSTXLRLL5M3ANCNFSM4MCCTVKQ .

Mounir146 commented 4 years ago

Thanks again for the quick response

Can you please tell me what is exactly the principle of the device self test ? And what is it used for ?

kriswiner commented 4 years ago

Take look in the documents in the repository for these answers.

On Thu, Apr 9, 2020 at 3:20 AM Mounir146 notifications@github.com wrote:

Thanks again for the quick response

Can you please tell me what is exactly the principle of the device self test ? And what is it used for ?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/kriswiner/MPU9250/issues/412#issuecomment-611451319, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABTDLKWRMTFJOVAJPYMUSZLRLWOPVANCNFSM4MCCTVKQ .

drankinatty commented 3 years ago

Just a note on accelerometer X, Y, Z offset values (e.g. registers XA_OFFS_H - ZA_OFFS_L). I could not make them work either. The Register Map documentation isn't that helpful on the issue. Preserving bit-0 of each low-byte register, saving the original content and adding the new offset, results in behavior that doesn't add a bias. Bit-0 of the low-byte will either be 0 or 1 -- which seems trivial to preserve and restore, but even writing 0 back to the offset registers, does not restore the original X, Y, Z acceleration values -- strange. The registers are additive in some way, because you cannot simply write the same values you obtain from the registers back either. Given this chip is out of production -- I'm not sure how much more effort is warranted here. They gyro offsets work verbatim, so there is some piece of information in the accelerometer case that is missing.

kriswiner commented 3 years ago

There are some who have claimed to have fixed this and/or gotten it to work properly. I wouldn;t waste any time on this since it is just as easy to subtract the bias values in the main loop.

On Fri, Aug 20, 2021 at 12:45 AM David C. Rankin @.***> wrote:

Just a note on accelerometer X, Y, Z offset values (e.g. registers XA_OFFS_H - ZA_OFFS_L). I could not make them work either. The Register Map documentation isn't that helpful on the issue. Preserving bit-0 of each low-byte register, saving the original content and adding the new offset, results in behavior that doesn't add a bias. Bit-0 of the low-byte will either be 0 or 1 -- which seems trivial to preserve and restore, but even writing 0 back to the offset registers, does not restore the original X, Y, Z acceleration values -- strange. The registers are additive in some way, because you cannot simply write the same values you obtain from the registers back either. Given this chip is out of production -- I'm not sure how much more effort is warranted here.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/kriswiner/MPU9250/issues/412#issuecomment-902502635, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABTDLKXVWWMVKZWVLFRP4TDT5YB2PANCNFSM4MCCTVKQ . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email .

drankinatty commented 3 years ago

Chuckling... I'm with you there. 3 floating-point additions is simple solution to guessing how Invensense actually intended to the accelerometer offsets to the calculated and stored. (but due to my failed attempts to set them, I did become much more familiar with SIGNAL_PATH_RESET and SIG_COND_RST... From a curiosity standpoint, the raw register values originally read from XA_OFFS through XZ_OFFS were 4772, 237 and 29184 respectively with the chip set in a self-test config of full-scale 250 and 2 and bandwidth 92Hz and FS of 1kHz.