Hi Josh
I think you are correct. Actually my project has mutated a little now and I will be adding GPS destination control which will dictate how much to + or - a compass regulated bearing. I.e. compass will take on a role as a high speed inner control loop with less emphasis on accuracy. Because of this I am forced to upgrade my MCU to deal with more floating point trig operations. Of course this means I can once again try to tackle compass tilt compensation, hopefully without memory issues as I have gone from 368 bytes to 8 kbytes RAM and moved to 16 bit core.
The actual tilt compensation using floating point trig should not be an issue but I am scratching my head over how calibration can be implemented.
1. Linearity of magnetic heading as influenced by soft iron interference is not of concern as I don't currently have any issues using existing 2D compass.
2. True heading to target location will be 'integrated out' by use of GPS, leaving the compass for relative direction control only ("maintain whatever direction"), so if it happens to think South is North it does not matter, likewise true north vs magnetic north will not matter, so long as it can work in any orientation.
3. The device is small enough for a human to rotate in any dimension for initial calibration.
Will simply instructing the user to do 3 rotations one after the other (pitch, roll and yaw) while capturing the min/max of each axis of motion suffice? How does this work if the user combines motions or moves around? It seems this could seriously skew the min/max values to the point of swamping the hard iron bias (min+max)/2. Is there a more robust method that is small mcu friendly?
Could accelerometer calibration potentially be avoided by assuming some nominal scaling factors?
Regards
M