灰原哀みたいに人工衛星の軌道を計算したい〜Skyfield実践〜

技術系

『名探偵コナン ゼロの執行人』での一幕。灰原哀が人工衛星の軌道を計算していた。
ハッキングされた人工衛星が墜落するポイントを手元のPC(多分レッツノート。サラリーマンみたいで親近感。)で解析。蘭を救うべく奮闘するコナン君へいいアシストをしていた。
しかし彼女はあくまで薬学系のスペシャリスト。
さらにその小さなノートPCでそんなことができるのだろうか。というか、やってみたい。

灰原哀は本当に衛星の軌道を計算していた?

映画『名探偵コナン ゼロの執行人』には、印象的なシーンがある。
公安が絡む爆破事件の裏で、灰原哀がノートパソコンを広げ、ハッキングされた人工衛星の「落下予測地点」を計算しているのだ。

登場人物の中でもとびきりクールな彼女が、無表情にキーボードを叩きながら衛星の軌道を算出する姿は、科学好きな観客の心をグッと掴んだ。しかも、使用しているPCはどうやらLet’s note(レッツノート)。物理的な衝撃に強い。

でも、ちょっと待てよ──
灰原哀って本業は薬学者。小学生の姿になっているとはいえ、宇宙物理や天体力学の専門家ではないはず。
それでも彼女は「落下地点の計算」なんていう高度なことをやってのける。

こんな感じだった。

衛星の軌道ってどうやって計算するの?

まず、人工衛星の「現在地」や「速度」を知るには、その軌道情報が必要だ。
この軌道情報は、単に「地球のどこらへんにあるか」という話ではなく、地球のまわりをどういう形で回っているかを記述したデータだ。

その代表的な形式が、TLE(Two-Line Element)と呼ばれるもの。
TLEはNASAやアメリカ宇宙軍(旧NORAD)などが公開していて、次のような2行のテキストで構成されている。

1 25544U 98067A   24153.27219128  .00024861  00000+0  42801-3 0  9999
2 25544  51.6395 136.3460 0005637  98.2712  35.4600 15.50004389452630

これは何かというと、簡単に言えば「ISS(国際宇宙ステーション)は、いまこういう軌道を描いていますよ」というレポート。

スポンサーリンク

1行目(基本情報と日時)

項目意味説明
1固定の数字(1行目のしるし)「これ1行目だよ」って意味。
25544U衛星の番号(国際番号)「25544」はISS(国際宇宙ステーション)とか、衛星ごとのID。
98067A打ち上げ年+番号+識別子「98年に打ち上げられた67番目の衛星のA部品」みたいな感じ。
24152.51234567時刻(通算日+1日を小数で)「2024年の152日目のお昼ちょっとすぎ」って意味。いつのデータかってこと。
.00012345軌道の変化スピード少しずつ高度が下がったり上がったりするスピード。
00000-0空気抵抗とかの係数(小さい数字)宇宙にある「空気のうす~い抵抗」の影響。
10270-3さらに細かい空気抵抗の情報上と似たようなもの。計算用。
0チェックサム(エラー確認用)これは機械用。データが正しいかチェックする数。
9993バージョン番号みたいなやつほぼ気にしなくてOK。

2行目(軌道の形と傾きなど)

項目意味説明
2固定の数字(2行目のしるし)「これ2行目だよ」ってこと。
25544衛星の番号(1行目と同じ)衛星のID。1行目と一致。
51.6448軌道傾斜角(°)地球の赤道と比べて、どれくらい傾いて回っているか。51°ならちょっと斜めに地球をまわってる。
210.1562昇交点赤経(°)地球の赤道を北に通る場所が、どの方向にあるか(ざっくり地球上の位置)。
0004865軌道の丸さ(離心率)「0」に近いほど丸。「0.00048」はすごく丸い軌道ってこと。
76.3456近地点引数(°)一番地球に近づく場所がどの方向にあるか。
283.7890平均近点角(°)衛星が軌道上のどのへんにいるか(スタート位置のようなもの)。
15.500000周回数(1日に何回地球を回るか)「15.5」なら1日に15.5回=約1.5時間で1周。
12345678またまたチェックサムデータが壊れてないか確認する番号。

ざっとこんな感じだ。

確かに、人工衛星は地球に対してどんな角度で回っているかを考える必要がある。(軌道傾斜角)

軌道傾斜角の説明

この情報をもとに、時刻を指定してそのときの位置(x, y, z座標)や速度ベクトルを計算できるわけだ。

でもこれらの数値、手計算ではちょっと難しい。
そこで登場するのが、PythonのSkyfieldライブラリ
このライブラリを使うと、TLEをそのまま読み込んで「今、衛星はどこにいるか?」を計算できるのだ。

Pythonで軌道と速度を計算してみる

TLEの読み方がなんとなくわかっても、実際に人工衛星の位置を割り出すのは簡単ではない。
そこで登場するのが、Pythonライブラリの「Skyfield(スカイフィールド)」だ。

Skyfieldは、NASAやアメリカ海軍天文台が提供する時刻・天体データをもとに、惑星や人工衛星の位置を高精度で計算できるツールだ。しかも、TLEファイルを読み込むだけで軌道計算が可能。

以下のコードは、ISS(国際宇宙ステーション)の現在位置と速度を、日本時間で表示するプログラムだ。

ISS (ZARYA)             
1 25544U 98067A   25153.04842943  .00015478  00000+0  27928-3 0  9995
2 25544  51.6368  22.0925 0001818 180.6477 179.4510 15.49934407512812
from skyfield.api import load
from pytz import timezone

tle = load.tle_file("./iss.txt")[0]  # TLE読み込み

ts = load.timescale()  # タイムスケールを生成
now = ts.now()
geocentric = tle.at(now)  # 地球中心を基準とした位置と速度を取得
subpoint = geocentric.subpoint()  # 緯度、経度、高度情報に変換

# JST(日本時間)に変換
jst = timezone('Asia/Tokyo')
jst_dt = now.utc_datetime().astimezone(jst)

# 速度を計算(3次元ベクトルの大きさ)
velocity_km_per_s = geocentric.velocity.km_per_s
speed_km_per_s = (velocity_km_per_s[0]**2 + velocity_km_per_s[1]**2 + velocity_km_per_s[2]**2) ** 0.5
speed_km_per_h = speed_km_per_s * 3600  # 時速に変換

print("時刻: ", jst_dt)
print("緯度[degree]:", subpoint.latitude.degrees)
print("経度[degree]:", subpoint.longitude.degrees)
print("高度[km]:", subpoint.elevation.km)
print("速度[km/h]:", speed_km_per_h)

結果は以下のように。

時刻:  2025-06-02 23:43:55.269157+09:00
緯度[degree] -51.251477901132574
経度[degree] -171.77208974387347
高度[km] 434.52487978204323
速度[km/h]: 27542.774398891408

国際宇宙ステーションは南太平洋の真ん中あたり上空約434kmを、毎時約27,542kmというとんでもないスピードで飛行している。これは東京からロンドンまでわずか1時間で行ける速度に匹敵する。

そして今、低ペックノートPC上でも十分値が計算できた。

(ハッキングで乗っ取られた人工衛星は計算が複雑だが)自然落下で落ちてくるスペースデブリなんかはどこら辺に落下する可能性があるかある程度計算できそう。

まとめ

「人工衛星の軌道計算」と聞くと、難解な数学や物理の知識が必要に思えるかもしれない。
実際、プロの天文学者や宇宙開発機関のエンジニアたちは、その分野で高度なシミュレーションをしている。

でも私たちが今やったのは、「TLEを読み込み」「現在位置と速度を出す」という最低限の処理。
それだけでも、映画の中で灰原哀がやっていた“軌道計算っぽいこと”の一端に触れられた。

しかも、使ったのはPythonとSkyfield、そして公式サイトから入手したTLEファイルだけ。
特別な設備や専門知識がなくても、「自分で衛星の場所を知る」体験ができる。
意外と簡単にできるもんなんだんねえ。

スポンサーリンク
タイトルとURLをコピーしました