今回使用したAK8963でそのまま読み取ると以下の感じである。
(マンションの中で、15cm程度の近くにPCや汎用電源、スマホがある状態で使っている。)
まず、目的はローバーへの搭載のためなので、基本水平として想定しZ軸は無視。
とは言いつつも、地軸は斜めになっているので以下のイメージとなる。

でも、欲しいのは方位なので、実際にはX軸、Y軸さえあればよい。ローバーがその場で360度回転するとすると地軸の動作はぐるっと回る。 まぁ。 結局X-Yでいいのだが。

では、実際にサンプルデータとして水平に置いて水平旋回させて読み取ったデータを散布図に表してみると。

思った以上に円になってる。中心がずれているのはしょうがない。
ここでの構成としては、150個のデータを取得して各軸の最大値/最小値を取得して中点を求めるもの。
至極簡単だが、校正した結果は下記となる。

校正自体より磁気センサとの通信に時間がかかったというのが正直なところ。 このプログラムはシリアルモニターで見ていれば、校正結果がモニターに一定時間表示するので、その値をプログラムの中にハードコーディングしておくことを進める。
また、キャリブレーション指令としてはシリアルモニタに’1’を入力してください。

測定は約15秒間で150センシングします。 この間に2-3周回するとよいでしょう。

すると 測定されたBIASが表示されるので参考としてください。
Gainは正規可用途で作っていましたが、今のところどこでも使っていません。
この測定されたBIASは自動的に磁気センサからの読み込みデータの補正に使用されますが、
電源を切ってしまうと無くなってしまうので、この値を初期値として入れておくことを薦めます。