Pythonで人工衛星の軌道を描く

ありがたいことに、北米航空宇宙防衛司令部(NORAD)が人工衛星の監視をしていて、そのデータを公開しています。そのデータを使うと、人工衛星がどこにいるかがわかるので、軌道を描くことも可能になります。

データは、TLE(Two-line elements:2行軌道要素形式)で提供されていて、次のようなデータです。

JAXAがデータの意味を解説してくれています。

GPS BIIR-2  (PRN 13)    
1 24876U 97035A   24208.16661746  .00000010  00000+0  00000+0 0  9993
2 24876  55.6808 125.6087 0081778  52.9015 307.8605  2.00565530198095

Pythonには衛星軌道計算に必要なライブラリも揃っているので、それを使えば簡単に衛星位置がわかります。

ライブラリとしては、PyEphemやSkyfieldなどがあります。Skyfieldの方が使い勝手が良さそうなので、そちらでシミュレーションしてみました。

あらかじめ、NORADのCelesTrakから、データをダウンロードしておくと便利です(データはテキスト形式)。

import skyfield.api
from skyfield.framelib import itrs
sats = skyfield.api.load.tle_file("gnss.txt")
print(len(sats))
print(sats[0])

GNSSのTLEデータを読み込み、衛星の数と最初の衛星のデータを出力してみると、

164
GPS BIIR-2  (PRN 13) catalog #24876 epoch 2024-07-26 03:59:56 UTC

3次元の位置情報を出力してみます。

from skyfield.api import load, Topos
from skyfield.api import EarthSatellite

# 衛星のTLEデータをロード
sats = load.tle_file("gnss.txt")
ts = load.timescale()

# 最初の衛星を取得
sat = sats[0]

# 指定時刻を設定(2024/7/24/0:00:00)
t = ts.utc(2024, 7, 24, 0, 0, 0)

# 指定時刻の衛星の位置を取得(Kmで表示)
position = sat.at(t).position.km

# 座標を表示
print(f"Sat Position(x, y, z): {position}")
Sat Position(x, y, z): [ 18795.29105888  -4841.92871682 -18454.39533754]

上記は、地球に固定されていない座標系から見た位置情報(GCRS:地上から電車に乗っている人を見る感じ。電車とともに人も動いている)になります。これを使えば、衛星軌道のシミュレーションが簡単にできます。以下では、GNSSのうち、日本の準天頂衛星システム「みちびき」のみを取り出してみました。ワイヤーフレームで表示した地球の周りを衛星が回っています。

出典:CelesTrakのデータより衛星軌道を算出

これに対して、地球に固定されている座標系から見た位置情報(ECEF:外から電車と同じスピードで動いて電車に乗っている人を見る感じ。電車の位置は固定され人だけが動いている)を取得するには、以下のコードになります。

from skyfield.api import load, Topos
from skyfield.api import EarthSatellite
from skyfield.framelib import itrs

# 衛星のTLEデータをロード
sats = load.tle_file("gnss.txt")
ts = load.timescale()

# 最初の衛星を取得
sat = sats[0]

# 指定時刻を設定(2024/7/24/0:00:00)
t = ts.utc(2024, 7, 24, 0, 0, 0)

# 指定時刻の衛星の位置を取得(Kmで表示)
position = sat.at(t).frame_xyz(itrs).km

# 座標を表示
print(f"Sat Position(x, y, z): {position}")
Sat Position(x, y, z): [ 14064.46737018  13436.69522509 -18409.72368022]
出典:CelesTrakのデータより衛星軌道を算出

8の字の軌跡を描いているのがわかります。

目次