見出し画像

Python Panda3Dライブラリで太陽系シミュレーターを作成する

この記事は、日経ソフトウエアの承諾を得て掲載しています。

日経ソフトウエア2024年3月号

日経ソフトウエア特集記事を書かせていただきました。
↓↓↓特集3 Pythonで「太陽系シミュレーター」を作る↓↓↓

太陽系シミュレーター開発の経緯

私が太陽系シミュレーターを作ろうと思ったのは、漫画「チ。ー地球の運動についてー」を読んで感動したからです。人間の探究心と創造性の素晴らしさを力強く讃える内容に、鳥肌が立つほど感動しました。

この作品では、中世の天文学者が惑星の運動(公転)が円ではなく楕円であることに気づくシーンが描かれています。その発見により、どうしても解消できなかった観測誤差が解消され、地動説の完成に近づきました。

このシーンにインスピレーションを受け、私はリアルな太陽系シミュレーターの開発を始めました。3Dアプリの作成経験があったため、等速円運動に基づく太陽系の再現は簡単でした。しかし、実際の太陽系を再現するためには、リアルな惑星の位置情報が必要で、それが難関となりました。

当初、計算式を用いて惑星の位置情報を取得しようと試みましたが、単純な計算式では惑星の正確な位置を得ることができず、誤差の大きさに悩まされました。結果として、計算式による位置取得は断念しました。

開発が停滞していた時期もありましたが、NASAのHorizons Systemを知ったことで、開発が急速に進展しました。これは、太陽系の惑星を含む天体の情報を様々な方法で取得できる素晴らしいサービスです。Horizons Systemから得られる天体情報をデータベースに保存し、それを利用することで、リアルな太陽系を再現できるようになりました。

太陽系シミュレーター(ボイジャー)を再現する

太陽系シミュレーターのプログラムは、日経ソフトウエア特集記事に掲載されています。この雑誌記事では、「ハレー彗星」と「探査機はやぶさ2と小惑星リュウグウ」の軌跡を確認できます。また、Horizons Systemから取得する天体情報を変更することで、別の宇宙イベントを再現できるように設計されています。

ここでは応用例の一つとして、惑星探査機ボイジャー1号、2号の軌跡を再現する方法を紹介します。ボイジャー計画は、NASAによって1977年に打ち上げられた歴史的な宇宙探査ミッションです。この計画の目的は、太陽系の外側にある惑星(木星、土星、天王星、海王星)を探査し、これまでにない詳細なデータを地球に送り返すことでした。ボイジャー1号と2号は、太陽系の惑星をフライバイし、数多くの科学的発見をもたらしました。これらの探査機は、今も太陽系の外縁を超え、宇宙の未知の領域へと旅を続けています。ここでは、この壮大な旅をシミュレーションし、ボイジャー計画の軌跡をデジタルで再現する方法を紹介します。

Horizons Systemからボイジャーの情報を取得

太陽系シミュレーターの改造は簡単です。2つのファイル(horizons_settings.py、draw_planets_with_horizons_api.py)を書き換えるだけです。まず、srcフォルダーの中にあるhorizons_settings.pyをテキストエディターで開いてください。次に示すコードを末尾に追記します。

VOYAGER_DICT_LIST = [
  dict(name='Voyager1', radius=0.1, orbit_radius=0, orbit_period=1,
       color=(1, 1, 1), line_color=(1, 0.5, 0), heading=None, id=-31),
  dict(name='Voyager2', radius=0.1, orbit_radius=0, orbit_period=1,
       color=(1, 1, 1), line_color=(1, 1, 0), heading=None, id=-32),
]
VOYAGER_SETTINGS = {
  'start_time': '1977-09-06',  # ボイジャー1打ち上げ翌日(8/20にボイジャー2打ち上げ)
  'stop_time': '1989-08-25',  # ボイジャー2海王星通過
  'step_size': '1d'  # ボイジャー計画 データを取得する間隔(日=d)
}

VOYAGER_DICT_LISTは、ボイジャー計画で使用する球体モデルの設定値をまとめたリストです。radiusキーの値は球体モデルの半径であり、地球の半径を1とした相対値で表されます。ここでは、ボイジャー探査機は小さすぎるため、地球の0.1倍として、シミュレーター上で確認できるようにしてあります。idは、Horizons Sysytemから天体情報を取得するための識別子(ID)です。このidはHorizons Systemの公式ウェブアプリで取得できます。Voyager1は「-31」、Voyager2は「-32」です。color、line_colorは、球体モデルの色と軌跡の色を表し、任意に変更可能です(お好みで変更してください)。

VOYAGER_SETTINGSは、Horizons Systemから天体情報を取得するための日付設定値です。開始日時(start_time)、終了日時(stop_time)、取得間隔(step_size)をそれぞれ設定しています。これらの値も公式のウェブアプリで確認できます。

Horozons System公式ウェブアプリは次のリンクからアクセスできます。

ボイジャー計画を再現する

次に、srcフォルダーと同じ階層にあるdraw_planets_with_horizons_api.pyを開いてください。このファイルの先頭部分を1行変更してください。


# table_name = 'HALLEY'  # (1)
table_name = 'VOYAGER'

table_nameは、データベースのテーブル名を定義する変数です。これを「VOYAGER」に変更します。改造はこれだけです。

プログラムを実行してみましょう。コンソール(PowerShellやターミナルなど)を開いて、次のコマンドを実行してください。初回起動時は、天体情報の取得と保存に時間がかかりますので、そのままお待ちください(環境にもよりますが、数十秒から数分かかります)。2回目以降は、すぐにシミュレーターが起動して、次に示すシーンが得られます。

cd ~/Documents/solar_system
python draw_planets_with_horizons_api.py

ボイジャー計画のシーン再現

voyager_project01

ボイジャー1号は1977年9月5日、ボイジャー2号は同年8月20日に地球から楕円軌道でテイクオフしました。ボイジャー1号は技術的なトラブルのため、2号よりも後に打ち上げられました。最初の目的地は木星です。木星の強大な引力によってボイジャー探査機は加速され、この技術は「スイングバイ」と呼ばれています。

Jupiter

木星は太陽系の中で最も巨大な惑星であり、その質量は他の全惑星を合わせたものよりも大きいです。木星の特徴的な外観は、色とりどりの雲の帯と大赤斑と呼ばれる巨大な嵐によって形作られています。木星の磁場は非常に強力で、太陽系の中で最も強いものの一つです。ボイジャー探査機による木星の観測は、この巨大な惑星の大気、衛星、磁場に関する貴重な情報をもたらしました。

voyager_project02

ボイジャー2号は、次の目的地である土星に向かいます。この旅の途中で、土星の重力を利用したスイングバイが行われました。このスイングバイ技術は、宇宙船の軌道と速度を変更するために惑星の重力を利用するものです。

Starn

土星は太陽系で最も目を引く惑星の一つで、その美しい環が特徴的です。これらの環は、主に氷の粒子から成り立っており、太陽光を反射して独特の輝きを放っています。また、土星は太陽系で二番目に大きい惑星で、複数の衛星を持っています。その中でも最も有名なのは巨大な衛星タイタンで、厚い大気と液体のメタン湖が存在することで知られています。ボイジャー2号は、土星とその環系、衛星群について貴重なデータを地球に送り返しました。

voyager_project03

ボイジャー2号は、3番目の目的地である天王星に向かいます。天王星によるスイングバイが行われており、このような連続でスイングバイを行えるタイミングは非常に貴重です。次にこのチャンスが訪れるのは175年後となります。

Uranus

天王星は太陽系の中で独特な惑星で、その軸がほぼ横向きに傾いており、極めて長い季節の変化を経験します。また、淡い青色をした天王星は、メタンが豊富な大気を持っており、これが特徴的な色合いを生み出しています。ボイジャー2号の訪問により、天王星の複雑な環系や、独特の気候システムについての貴重なデータが得られました。

voyager_project04

ボイジャー2号は、最後の目的地である海王星へ向かいました。そして、1977年の打ち上げから、12年後である1989年8月に海王星に到達しました。これで、ボイジャーの主要なミッションは成功しました。

Neptune

海王星は太陽系で最も遠い惑星で、鮮やかな青色はメタンが豊富な大気によるものです。この惑星は強力な風と巨大な暴風「大暗斑」で知られており、これらはボイジャー2号によって初めて詳細に観測されました。海王星は複数の環と13の衛星を持ち、中でも最大の衛星トリトンは逆行軌道を持つユニークな特徴を持っています。ボイジャー2号の訪問は、海王星とその周辺天体に関する貴重な情報をもたらしました。

終わりに

太陽系シミュレーター(ボイジャー)を楽しんでいただけましたか。今回紹介した太陽系シミュレーターは、この他に、「ニュー・ホライゾン」「カッシーニ」「オサイリス・レックス」などの再現も可能です。ぜひ自分のパソコンで広大な宇宙の旅を目撃してください!

動画でシミュレーターを確認したい方は、YouTubeでご覧いただけます。

各惑星の画像は、Canva Proで作成したものです。


前の記事
Python Panda3Dライブラリで3D地図を作成する|creativival (note.com)
次の記事
Python Panda3DライブラリでSLIMの軌跡を再現|creativival (note.com)

その他のタイトルはこちら

https://note.com/creativival/n/n2fb6b1b5bcd9


この記事が気に入ったらサポートをしてみませんか?