GPSによる位置測位について調べたこと
GPSは高度約2万kmの6つの軌道に4個ずつの衛星を配置し、約12時間で地球を一周する衛星で、これから発信している信号(衛星の位置、送出時刻)を地上で受信し、現在地と衛星の距離を計算する。距離の計算は、受信時刻と送出時刻の差に、電波の速度約30万km/sをかけて計算できる。
誤差が受信時刻の誤差のみだとした時(実際は、様々な誤差要因がある)、
発出時刻は、衛星に搭載されている時計の時刻であり、この時計の精度は10億分の1秒で、とても正確な時刻である。10億分の1秒で、約30cmの距離誤差となるが、約2万kmの大きさに比べて約30cmなので充分正確な値である。
受信時刻は、衛星の原子時計に比べて精度が高くない。オリンピックなどで使われる高精度時計であっても10万分の1秒の精度だそうです。これは、約3kmの誤差であり、無視できない大きさである。
位置測位には、最低4機のGPSからの信号が必要で、緯度、経度、地球中心からの距離(高さ)、正確な時刻(衛星の原子時計に同期した時刻)を、現在地と4つの衛星までの距離を計算することで求めている。
距離に誤差がある場合(2次元の場合で作図)
衛星の位置 赤(5)、青(3.54)、緑(5)
()内は、黄色からの距離
これらに、0.3の距離を誤差として加えた場合
赤と緑の円の交点と黄色の位置がずれている(受信時刻に含まれる誤差)
3つ目の青い円を利用することで、距離の誤差を計算できる。右辺の()内は、誤差を含む受信時刻を使って計算した衛星までの距離である。
3つの衛星からの情報をつかって、「xの位置、yの位置、距離の誤差e」を未知数とした連立方程式(式1)を解くことで求めることができる。下図は、距離の誤差を修正した時の図。
距離の誤差がわかれば、正確な時刻(衛星の時刻と同期)が計算できる。
実際は、3次元空間なので、4つの以上の衛星からの信号を利用し、計算すると、4つの球面をふくむ点が2つ求まる。地表面近くでない1点を破棄することで、現在位置を特定することができる。
4つ以上の衛星からの信号を利用して、「緯度、経度、地球中心からの距離、原子時計に同期した時刻」を求めることができる。
衛星の位置、現在地の環境、大気の状態など誤差を生じさせる要因はさまざまであり、受信機1台では約20m程度、複数の受信機を使って数cmから5m程度、干渉測位で3cm前後の誤差がある。また、高さは水準点の情報が必要となるため、標高の誤差はGPSでの測位以外の要素が含まれる。
GPSは米国以外も打ち上げていて、日本は「みちびき」を4機(2023年度現在)運用している。これは、日本、東南アジア、オセアニア付近で利用できる。日本国内で、できるだけ天頂近くに位置するように配置し、GPSを補いより正確な位置測位ができるようにしている。
現在のスマートフォンでの測位誤差は、3m程度である。ただし、スマートフォンは、他の信号も利用して修正しているので、地下などでも実用上問題ない誤差の範囲で位置情報を利用できる場合がある。
(参考)作図に利用したPythonのコード
import matplotlib.pyplot as plt
import matplotlib.patches as patches
fig = plt.figure()
ax = plt.axes()
e=0.3
c1 = patches.Circle(xy=(0, 0), radius=5+e, ec='r', fill=False)
c2 = patches.Circle(xy=(7, 1), radius=5+e, ec='g', fill=False)
c3 = patches.Circle(xy=(3.5, 0.5), radius=3.5+e, ec='b', fill=False)
ax.add_patch(c1)
plt.plot(0,0,marker='.',color = "r")
ax.add_patch(c2)
plt.plot(7,1,marker='.',color = "g")
ax.add_patch(c3)
plt.plot(3.5,0.5,marker='.',color = "b")
plt.plot(4,-3,marker='.',color = "y")
plt.axis('scaled')
ax.set_aspect('equal')
この記事が気に入ったらサポートをしてみませんか?