週末から暖かい日が続いています。春が近づいていますね!
今回は、「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. 作成されたアニメーション
「みちびき」の特徴的な軌道である8の字を描いてますね!