Getting magnetic north from a xyz magnetometer (iPhone 3.0)

user130071 picture user130071 · Jun 28, 2009 · Viewed 16.1k times · Source

I'm actually reposting a question from the iphone development boards. I didn't ask it, but I found it when trying to find its answer. Nobody had yet responded there, so I thought I'd try posting it here.

Thanks in advance for any help!

Does anybody know any specifics about the algorithm of computing the magnetic heading from the raw xyz values of CLHeading? I am sure there must be a general approach to this that works for different magnetometers as well.

Answer

cube picture cube · Jun 28, 2009

If you don't want to use the trueHeading value, and assuming that the compass lies perfectly horizontal, the heading can be computed this way:

  • (y>0) heading = 90 - atan2(x,y)*180 / pi
  • (y<0) heading = 270 - atan2(x,y)*180 / pi
  • (y=0, x<0) heading = 180.0
  • (y=0, x>0) heading = 0.0

(these are from http://www.magneticsensors.com/datasheets/an203.pdf)

... plus the heading must be corrected for Magnetic deviation and Magnetic declination

in case the compass is not horizontal, you should use only the horizontal component (you can not ignore the z axis) by projecting the (x, y, z) vector to a plane that is parallel to the earth surface and then compute the heading from this projected x and y.

Hope it helps.