La boussole du smartphone est certainement couplée avec l'accéléromètre. A mon humble avis.
Je dirais plutôt que c'est couplé au gyroscope ;=)
En entrée, tu as la donnée de la boussole et la donnée d'un gyroscope (axe z uniquement, ça suffit si tu as un robot qui se déplace sur le sol). Tu utilises un algo qui fusionne ses donnée et te sort l'orientation du robot par rapport aux pôles magnétiques terrestres.
Tu peux avoir un truc super précis avec ça.
Si tu ne peux pas ajouter de gyroscope, tu es alors obligé de faire une estimation de l'orientation avec seulement les données du magnétomètre. En faisant une moyenne ou en choisissant une valeur médiane parmi X valeurs consécutives, tu peux gagner en précision, mais ça restera pas super je pense...