ここでは、たとえ話を含めて簡単に説明します。
詳しい方のご指摘を賜るかもしれませんが・・・
【GPS】
落雷があったとします。光が見えて、t秒後に音が聞こえました。音の速さを340m/秒としたら、落雷現場までの距離は、340×t〔m〕となります。つまり、距離は時間に比例しています。
次に、天井から糸で物体を吊るした様子を想像してください。物体を揺れないようにするには、最低3本の糸で、支点が一直線にならないように配置します。ここで、物体をGPS受信機に、糸の長さをGPS衛星からの距離、支点を各GPS衛星の位置と考えます。
GPS衛星には、高精度(1億年に1秒の誤差)の原子時計が搭載されており、正確な時刻情報、軌道情報などが電波(光と同じ速さ)で送信されています。
つまり、GPS衛星からの電波を受信した時刻からGPS衛星が電波を発信した時刻を差し引けば、電波が到達するまでに要した時間が求まり、GPS衛星からの距離が算出できます。
しかし、正確な受信時刻を知るためには、受信機側にも高精度の原子時計が必要になってきます。原子時計は、たいへん高価で、装置も大がかりなもので、小型の受信機に搭載するのは不可能です。
そこで、GPS衛星を、もう一つ受信し、その衛星が発信する時刻を基準時刻として、他の衛星から得た発信時刻との差分で計算しています。
つまり、距離を知るめに3個、基準時刻を知るために1個、合計4個以上のGPS衛星を受信すれば、現在位置が求まります。
GPS受信機内のCPUで、計算処理され、位置情報を出力しています。ここでの計算処理は連立方程式を解くプログラムとなります。
GPSからはL1(民生用)とL2(軍事用)とが発信されていますが、我々一般人が利用できるのはL1のみです。
GPS受信機は、L1 (1575.42MHz)を受信し、C/Aコードにより、どのGPS衛星から発信された信号かを識別しています。それぞれの衛星はC/Aコードに固有の拡散符号を使っているので、同じ周波数で同時に送信しても受信時に分離する事ができるわけです。
【コンパス】
XYZ軸方向に配置された、3つの磁気センサー(ホール素子など)の出力信号から方位を計算しています。
コンパスモジュールが、常に水平を保つ場合は2軸でもOKなのですが、傾くこともあるので、3軸の信号が必要となります。
弱い地磁気を検出していますので、使用する場所や、コンパスモジュールの置かれている周囲の条件(鉄などの磁性体など)が、大きく影響します。
コンパスのキャリブレーションとは、
XYZ軸方向の中心点(原点)を求める作業です。
コンパスを360°回転させ、各軸の最小値と最大値を求め、この中心値を原点とします。
加速度センサーとの連携により、自動キャリブレーションも可能になります。
NAZAアシスタントソフトウェアを起動して、周囲の磁性体が、どのくらい影響しているかを数値で確認してから、コンパスモジュールの設置場所を決めるのもよいでしょう。
これに関しての過去記事
http://www.wcnet.jp/lily/blog0/2013/05/naza_2.html