views:

1246

answers:

3

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.

+3  A: 

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 pareallel to the earth surface and then compute the heading from this projected x and y.

Hope it helps.

cube
+1  A: 

Note in the above the divide by pi is missing and apple and Honeywell's x and y definitions are opposite.

andrewMac
thanks for the correction about PI :-)
cube
A: 

So, any success with this? I'm trying implement 3D heading too.

tesla