<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>I struggle (translation: I am a doofus) with linear algebra, let
      alone the matrix theory involved with "soft iron calibration" of
      magnetometer chips when they are in arbitrary orientations close
      to ferrous metals. I'm looking for OSS solutions and suspect
      they're plentiful in some problem spaces such as drone software.
      But when searching the repos I run into code that is either
      trivial (only smart enough to pull X/Y/Z samples out via polled
      I/O) or requiring a return to 'State's math department for a few
      months before I have any hope of recognizing the specific code I
      need. My application involves a six axis
      accelerometer/magnetometer and a Particle board with bags of
      compute and memory resources.<br>
    </p>
    <p>I understand the principles of hard iron correction (i.e. a
      competing magnetic field "pulls" the origin of the magenetometer
      and it's a simply a matter of using X, Y, and Z corrections to
      "recenter" the response to be linear and describing a sphere).
      Some chips even fully or partially automate this process. But soft
      iron correction (nearby metal distorting the sensor response to
      Earth's field lines and changing it from a sphere to an elipsoid
      that has to be corrected back to a sphere) is currently mystical.</p>
    <p>The scheme for restoring linearity of response with soft iron
      distortion is to get bunches of samples (the ubiquitous "figure
      eight" manoevers we do with our smart phones). It's the "plugging
      in of these samples and getting and applying the resulting
      correction" that I don't understand properly to get the sensor
      back to an effectively spherical pattern of response in the
      presence of soft iron.<br>
    </p>
    <p>Anybody come across a library that one can simply poke a lot of
      samples into and end up with the necessary corrections to handle
      this case? Any sources of OSS solutions for this you've come
      across? Nirvana would be something like the old Usenet groups like
      comp.sensor.magnetometer.calibration-for-the-math-impaired that is
      likely to have a solution for an appliance operator like me in
      this particular space.<br>
    </p>
    <p>Also, I'm looking for simple pitch/yaw correction of magnetometer
      measures to have a "tilt insensitive" response such that an
      accelerometer can provide the axis measures needed to correct the
      magnetometer's measures for a given pitch and yaw (and roll). The
      best discourse I've found so far is <a moz-do-not-send="true"
href="https://stackoverflow.com/questions/24639529/tilted-magnetometer-output-pitch-and-roll-tilt-compensation-i-am-lost">this
        one</a> in which the petitioner shows some example code but goes
      on to explain that he had to invert the roll radian angle
      parameter and swap X and Y to compensate and get the proper
      results after the revelation that his Bosch datasheet had bad
      mistakes. My hope is I can mutate his example code until my test
      fixture matches the behavior of a smart phone running a compass
      application after it has been calibrated, but this is tangled up
      with the calibration process. I assume I can keep that simple and
      get joy (i.e. see the above function work properly with my sensor
      and the specified mods to it) by keeping any ferrous metal or
      magnetized material well away from the mag test fixture during my
      tests. Does that seem sensible? <br>
    </p>
    <p>Best Regards,</p>
    <p>Pete<br>
    </p>
  </body>
</html>