たぶん動く...

多分GIS系の人。あくまで個人的見解であり、所属団体を代表するものではありません。

pythonで火星まで行ってみる(その4)

2020年に火星へ向かった探査機

2020年夏に中国の天問1号、UAEのHope、アメリカのMars 2020 Perseverance が火星に向かって5か月くらい経ちました。火星までの航程の半分以上をこなしています。 順調ということでいいのかな?
今回はNASA/JPLが公開している HORIZONS System を使って火星探査機の現在位置を取得してみたいと思います。

ssd.jpl.nasa.gov

HORIZONS System

小惑星や惑星の位置を計算してくれるNASA/JPLのサイトになります。TELNETが使えるとかかなり古めかしく、とっつきにくいところもありますが、システムがわかれば面白いです。メールなんかでも処理をリクエストできるらしいね。

Perseverance の位置を取得してみる。

HORIZONS SYSTEMのサイトにアクセスし、パラメタを以下のスクショのように設定すると、Perseverance の2020年9月1日から2020年12月1日までの一日毎の太陽を中心とした座標がとれます。

f:id:TTY6335:20201129204437p:plain
Mars2020 Perserverance の座標を取得する設定

「Generate Ephemeris 」をクリックすると、値が返ってきます。

f:id:TTY6335:20201129205800p:plain
Mars2020 Perserverance の座標

XYZは太陽を中心とした座標になっています。うーん、分かりにくい。 地球の現在地はどこ? ということで、衛星の軌跡、惑星の位置なんかの可視化にチャレンジしてみたいと思います。

HORIZONS SYSTEM をAPIで取得する(失敗)

astropyにJPL Horizons Queriesというモジュールが用意されているのでこれで取得してみます。

うまくいかない.... どうもモジュールの仕様上、惑星探査機は取得できないようです。

HorizonsClass — astroquery v0.4.2.dev1407

仕方ないので、コピペしてCSVを作成するしかないですね。

HORIZONS SYSTEM をCGIで取得する(たぶん動く)

HORIZONS SYSTEMにCGIでクエリを投げると値を返してくれるサービスがあるのでそれを使用してみます。 先ほどはwebで操作しましたが、以下のURLをブラウザのアドレス欄に入力するとヘッダーとかつきますが、csvフォーマットで座標一覧を取得することができます。 ヘッダーに単位とか基準となる場所が書かれてたりするので割と重要です。 今回は単位を天文単位に設定してみます。

https://ssd.jpl.nasa.gov/horizons_batch.cgi?batch=1&COMMAND='-168'&CENTER='@0'&OUT_UNITS='AU-D'&TABLE_TYPE='VECTORS'&START_TIME='2020-09-01'&STOP_TIME='2020-12-01'&STEP_SIZE='1%20d'&CSV_FORMAT='YES'

コンマ区切りのところをエクセルとかでcsvで保存します。ヘッダーも一応入れておくと分かりやすいです。 今回はMars2020.csvとして表示を保存しました。

Mars2020の位置をプロットしてみる

poliastroを使っていきます。 実行環境は前回 と同じです。 今回やることとしては、座標が書かれたCSVを読み込み、座標をつないで線として描写してみます。

とりあえず今回作成したコードです。 csvはdata/以下に保存しています。

今回はその1のほぼ流用です。追加点としては、astropy.coordinatesで座標の集まり(=軌跡)を作成したところです。 これを用いて、plot_trajectoryで軌跡をプロットしました。poliastroにどうも、位置だけをプロットするモジュールが見当たらなかったので、trajectoryでプロットしました。 matplotlibに詳しければ、もう少しうまい方法があったかもしれません。

他の探査機も軌跡を表示してみる

2020年11月現在、Mars2020のほかに、中国の天問1号(Tianwen-1)、UAEのHope、が火星に向かっているのでその軌跡も表示してみましょう。 天問1号(Tianwen-1)、Hopeは以下のCGIで取得できます。 天問1号(Tianwen-1)

https://ssd.jpl.nasa.gov/horizons_batch.cgi?batch=1&COMMAND=%27-9901491%27&CENTER=%27@0%27&OUT_UNITS=%27AU-D%27&TABLE_TYPE=%27VECTORS%27&START_TIME=%272020-09-01%27&STOP_TIME=%272020-12-01%27&STEP_SIZE=%271%20d%27&CSV_FORMAT=%27YES%27&Output_Format=%271%27

HOPE

https://ssd.jpl.nasa.gov/horizons_batch.cgi?batch=1&COMMAND=%27-62%27&CENTER=%27500@0%27&TABLE_TYPE=%27VECTORS%27&START_TIME=%272020-09-01%27&STOP_TIME=%272020-12-01%27&STEP_SIZE=%271%20d%27&CSV_FORMAT=%27YES%27&QUANTITIES=%272%27

Mars2020と同様の手順でcsvに保存します。 プロットしたスクリプトは以下になります。

次は現在地の地球からの距離とかを計算したいですね。