Briswell Tech Blog

ブリスウェルのテックブログです

人工衛星軌道アニメーション

週末から暖かい日が続いています。春が近づいていますね!

今回は、「PyEphem」という天文分野のPythonライブラリを使用して、人工衛星軌道をシミュレートし、アニメーション表示してみます。

pyEphemの使い方 〜Pythonで人工衛星軌道をシミュレートする〜 | korintje.com

こちらの記事を参考にさせていただきました。ありがとうございました。

記事の中で

readtleメソッドを使えば、2行軌道要素形式(TLE)のパラメータを読み込むことも出来ます。

との情報もありましたので、TLEパラメータを使用してみます。

LIVE REAL TIME SATELLITE TRACKING AND PREDICTIONS

こちらのサイトで公開されている準天頂衛星システム「みちびき」4号機のTLE情報をパラメータに設定します。

1. モジュールのインポート

import ephem
import matplotlib.pyplot as plt
import os
from datetime import datetime as dt
from datetime import timedelta as td
from matplotlib.animation import ArtistAnimation #アニメーション作成用
from mpl_toolkits.basemap import Basemap #世界地図描画用

matplotlibの「ArtistAnimation」を使うことで、複数の図からアニメーションを作成することができます。

2. TLEパラメータを設定

line1 = 'QZS-4 (MICHIBIKI-4)'
line2 = '1 42965U 17062A   22057.72757807 -.00000328  00000-0  00000-0 0  9995'
line3 = '2 42965  40.7914   3.5343 0749421 269.5117 284.1873  1.00283299 16058'

TLE情報の「42965U」の「U」は、未分類(Unclassified)を意味し、公開されているTLEに付いています。

3. 時刻データを作成

epoch_date = "22057.72757807" 
year = int(epoch_date[:2])
year += 2000
datetime = float(epoch_date[2:])
decimal_time = dt(year, 1, 1) + td(datetime - 1)
time_list = [(decimal_time + td(hours=i/60)).strftime("%Y/%m/%d %H:%M:%S") for i in range(0,3600)]

TLE情報の一つの観測時刻をフォーマット変換します。また、その時刻を起点として3600個の時刻データを作成します。

4. 人工衛星のプロット画像をアニメーション化

images = [] #画像リスト用
fig = plt.figure() #描画領域を作成

m = Basemap() #世界地図を表示
m.drawcoastlines() #海岸線を表示

for time in time_list:
    image = []
    satellite = ephem.readtle(line1, line2, line3) #TLEパラメータを読み込む
    satellite.compute(time) #指定時刻で実行
    latitude = satellite.sublat / ephem.degree #緯度を取得
    longitude = satellite.sublong / ephem.degree #経度を取得
    x,y = m(longitude, latitude) #XY座標を取得
    image += m.plot(x, y, 'bo', markersize=7) #青丸でプロット
    images.append(image) #画像リストに追加

save_dir = "./" #動画の格納先
ani = ArtistAnimation(fig, images, interval=10, repeat=False) #10ミリ秒毎に図を切り替える
ani.save(os.path.join(save_dir,'orbit.mp4')) #動画を格納

5. 作成されたアニメーション

f:id:KenjiU:20220228205224g:plain

「みちびき」の特徴的な軌道である8の字を描いてますね!