軌道力学 - Orbital Mechanics -

宇宙を駆けるために!! 数学・物理・工学を結集させて……

SPICEツールキット・インストール

 NASAジェット推進研究所(Jet Propulsion Laboratory : JPL)が中心に開発しているSPICEツールキットをPython環境にインストールしました。インストール方法の解説も英語ですが、日本語環境でもコマンドは一緒です。

 Anaconda:Spyderへインストールした結果を記載しておきます。Pythonでは標準的なパッケージ管理ツールとしてpipコマンドがありますが、Anaconda上でパッケージを管理するcondaを使用します。ネットワーク環境に繋がっていれば、パッケージをダウンロードしてインストールする手順を踏む必要はなく、コマンドを打てばダウンロードからインストールまで完了します。

 GitHubと呼ばれる開発プラットフォームで制作されたパッケージをインストールするため、まずはconda-forgeのチャンネルを使用できるようにします。そのため、以下のコマンドを入力します。

 conda config --add channels conda-forge

 備考として「Note: you may need to restart the kernel to use updated packages.」と表示され、カーネルの再起動が必要かもしれないとなっていますが、次のインストールコマンドを入力します。

 conda install spiceypy

 インストールの途中経過が報告されます。ダウンロード、インストールされるパッケージが表示されますが、経過を全て追うのは無理です。成功後に以下のpipコマンドを実行して、インストールされているパッケージを確認できます。

 pip list

Package                                             Version
---------------------------------- -------------------
spiceypy                                             4.0.3 ← 2021-11-14リリース

 それでは、SPICEコマンドを実行してみます。SPICEをインポートして、バージョンを出力します。

 import spiceypy

 print(spiceypy.tkvrsn('TOOLKIT'))

 出力は以下の通りで、バージョンは2017年版のN0066となっています、2022年1月にSPICEがアップデートされており、最新のバージョンはN0067です。今後spiceypyもアップデートされると思われます。

CSPICE_N0066

 

Voyager Golden Record Inscription

 

軌道力学ライブラリ

 人工衛星国際宇宙ステーションが宇宙で何処を飛んでいるかを計算したい。計算式ばかり並んでいる軌道力学の理論を用いて、実際に活用方法や実際のデータ処理を学びたい。私ももっと自由に気軽に自分のPCを使って、軌道力学の演算処理を実行し、処理結果をグラフィック表示させたいと考えています。数式や理論だけでは理解が難しいところを説明図でわかりやすくしたいです。
 理論に基づいて最初からプログラムを組み上げるのは膨大な労力と時間が必要なため、オープンソースで誰でも利用可能な軌道力学ライブラリを使用していきたいです。調査したところ、幾つかのパッケージが配布されています。


【Orekit】

 Java言語によって書かれた軌道力学アプリケーションです。軌道力学に関する基本的な要素(プログラム集)から構成されており、簡単な学習から実際の複雑な運用まで用いることができます。Orekitプロジェクトには、欧州各国が共同で設立した欧州宇宙機関ESA : European Space Agency)やフランス国立宇宙研究センター(CNES : Centre national d'études spatiales)も参加しており、Orekitを活用しています。ESA国際宇宙ステーションへ物資を運んだ輸送船ATV (Automated Transfer Vehicle)の実時間モニタにOrekitが採用されました。
 Orekitは、javaで組まれているため、直接Pythonでは使用できません。スウェーデン宇宙公社(SSC : Swedish Space Corporation)では、Pythonが他の言語が作成されたコードを引用できる汎用性(wrapper : 包むもの)を活用して、Python環境上でもOrekitが使えるようになっています。"orekit-python-wrapper"とも呼ばれています。

参照先 https://www.orekit.org


【SpiceyPy】

 SPICEツールキットと呼ばれるNASAジェット推進研究所が開発した軌道力学ライブラリがあります。SPICEとは、Spacecraft(宇宙機)、Planet(惑星)、Instrument(計器)、Camera Matrix(カメラ行列)、Events(イベント)の頭文字を取った名称です。提供されているプログラミング言語は、FORTRAN、C、IDL、MATLABJavaの5種類です
 SpiceyPyは、C言語版のSPICEツールキットをPythonでも使えるようにしています。NASA公認にはなっていませんが、SPICEバージョンはN0066なので2017年の最新版が使用できます。軌道計算には、様々な物理定数やパラメータの設定が必要となりますが、SPICEの軌道力学データベースを共用できるのも魅力です。

参照先 https://naif.jpl.nasa.gov/naif/index.html
    https://spiceypy.readthedocs.io/en/main/


【poliastro】

 航空宇宙技術者が提供しているパッケージで純粋にPythonコードのみで書かれています。オープンソースですが、MITライセンスの元で提供されています。もともとは大学の研究プロジェクトのため、MATLABFORTRANアルゴリズムPythonから読み込んで活用していたそうです。自分のコンピュータで使用したところ、長時間の計算時間が必要となったため、Pythonのみで実行できるように修正を加えられています。

参照先 https://www.poliastro.space

 

iss040e091366

 

「Python」を活用するには − インストール −

 プログラミングを進めるためにも、日常で使用しているパソコンにアプリケーションをインストールしたり、使用環境を整えないとなりません。無償で様々なパッケージが提供されていますが、種類がありすぎてどれをインストールして良いのか迷ってしまいます。

 パッケージにもWindowsLinuxmacOS用と分かれていますが、使用するパソコンによって決まります。日本語の環境にも対応していますが、科学技術計算などを行うためには、関連するドキュメントを英語で読めたほうが良いです。技術者ならば継続して英語も勉強することをお勧めします。

 私は長年Mac派なので日頃からMacBookを使用しており、macOS版をインストールしています。最初は標準的なPython 3系の統合開発環境(IDLEと略記:Integrated DeveLopment Environment)をインストールしました。科学技術計算(特に行列計算)を処理できるようにするためには、サブライプラリであるNumPyをインストールしなければなりません。

 NumPyのインストールやその後の保守管理が面倒にありますが、NumPy等が含まれている汎用的パッケージが配布されていました。IPython(Interactive Python)やSpyder(The Scientific PYthon Development EnviRonment;略語に強引にアルファベットを割り当てています)があり、私はSpyderを使用しています。

 最初はSpyderのパッケージをインストールしましたが、Macのセキュリティ認証のために起動できませんでした。最終的には、Spyderも含む様々なPythonパッケージが使用できるAnacodaを導入しました。個人で使用する場合には、無償版であるIndividual Editionをダウンロードすることになります。PythonもAnacodaも蛇の名前でもあります。

 Anacodaを起動するとANACONDA NAVIGATORの画面が表示され、蜘蛛の巣アイコンのSpyderも選択できます。IPythonについてもQt ConsoleやJupyter Notebookに含まれているので使用できます。

f:id:fujihisa:20210417212758p:plain

Anaconda Package

 Spyderを選択して立ち上げます(Launch)。ようやくPythonで科学技術計算の基礎ライブラリであるNumPyが使用できます。NumPyの活用によって、各種の数学関数が使用でき、行列計算も高速で処理できます。 

f:id:fujihisa:20210417215701p:plain

Spyder Console

 行列計算で逆行列を求める場合にも、NumPyライブラリーをインポートして、行列Aを定義し、行列BをAの逆行列を計算させ、行列AとBの積を取ると単位行列となっていることを確認できます。Pythonでは、C言語のように行列変数の厳密な定義も必要ないし、np.dot関数を使用すれば行列の積計算を行ってくれます。

 In [1]: import numpy as np
 In [2]: A = [[ 1, 0, 1],[-2, 1, 0],[ 2,-1, 1]]
 In [3]: B = np.linalg.inv(A)
 In [4]: np.dot(A,B)
 Out[4]:
 array([[1., 0., 0.],
 [0., 1., 0.],
 [0., 0., 1.]])

参考文献

  1. 科学技術計算のためのPython入門 ――開発基礎、必須ライブラリ、高速化

 

軌道力学の教科書 学ぶためには……

 軌道力学(Orbital Mechanics)は、天体の惑星(地球も含む)の動き、人工衛星宇宙機の運動を研究した学問分野です。天体の観測から導きだされたケプラーの法則を、数学を用いて、数式だけで理論的に組み立てられます。数学や数値計算を基に、電波を用いた宇宙機の観測データ(距離や速度など)を入手して軌道を推定したり、ロケットエンジンを噴いて軌道を遷移・維持したり、宇宙航行では必須な分野です。

 しかしながら、軌道力学を学ぶにも教科書となる専門書が少ないのが実情です。私が学んだ28年前から状況は変わっていないかもしれません。軌道力学に特化した日本語の教科書はあまりないです。大学では、教授が各々に作成したテキストを用いて、学生に教えている状況でした。最新の出版状況を確認したところ、新しい教科書も幾つか出版され、絶版になっていると思われた古典的な専門書の再発刊版も購入できるようです。英語力があるならば、英語の専門書をお勧めします。

 軌道力学を学ぶためには、理工系の大学で学ぶ基礎的な数学の知識(微分積分三角関数、ベクトル・マトリックス計算など)が必須となります。専門書も数式の記載が多いので、習得するには難易度が高いかもしれません、軌道予測、最適軌道制御、軌道推定(軌道決定とも呼びます)などの応用には、制御工学、数値計算、プログラミング、確率論などの知識も求められます。

 Marshall H. Kaplanが1976年に出版した"Modern Spacecraft Dynamics and Control(参考文献1)"が軌道力学について古典的な専門書となります。私も大学時代に入手した本が手元にあります。古い本なので入手が困難と思いましたが、ペーパーバックで再発刊版が出ているようです。軌道力学のみではなく、宇宙機の姿勢運動についての説明も含まれています。

 学生向け教科書として適している"Introduction to Space Dynamics(参考文献2)"も現在でも入手できるようです。ペーパーバックは学生も購入できる値段で、私も学生時代から参照していました。初版は1961年でスプートニクが打ち上げられた後ですが、基礎となる理論が変わることはありません。一冊習得すれば、宇宙機の運動を理解できます。

 人工衛星に対する軌道予測や軌道推定の実務を反映したテキストとして、"Satellite Orbits(参考文献3)"があります。軌道力学の基礎から実際の数値計算まで、特に人工衛星が宇宙の何処を飛んでいるかを求める軌道推定の応用例が解説されています。実際に軌道推定をプログラミングできれば専門として十分通用します。

 日本語の教科書として、半揚先生が数年前に書かれた「惑星探査機の軌道計算入門(参考文献4)」を通じて、軌道力学の基礎を学ぶことができます。実際に購入して拝読いたしました。高校数学、物理の知識をもとに分かりやすく紹介とのことで、ベクトル・マトリックスを全く用いていません。位置、速度と加速度を極座標で表記することで、宇宙機の軌道がケプラーの法則に当てはまることを説明しています。ベクトル表記を用いず、極座標で表記しているため、三角関数が並んだ式が多く登場します。

 軌道力学を修得することの難易度を再認識しました。しかし、軌道力学の基礎理論は不変であるため、宇宙の分野に進むには、いずれかの教科書で1度理解しておくことをお勧めします。

 

参考文献

  1. Modern Spacecraft Dynamics and Control (Dover Books on Engineering)
  2. Introduction to Space Dynamics (Dover Books on Aeronautical Engineering) (English Edition)

  3. Satellite Orbits: Models, Methods and Applications

  4. 惑星探査機の軌道計算入門

 

The SpaceX Crew Dragon maneuvers to another port

 

プログラミング言語「Python」

 この状況下にて何か新しいことを始めようと考え、プログラミング言語Python」を学び始めました。学生時代(数十年ほど前…)、コンピュータを用いた科学技術計算を極めました。使用していた言語といえばFORTRAN(FORmula TRANslation)で、論文を書くためにも軌道計算のシミュレーションでもFORTRANを用いていました。

 前職において自らプログラミングする機会はあまりなかったですが、運用画面の設計書を仕上げたり、軌道上システムの制御ロジックや計算アルゴリズムを審査したり、軌道上のコンピュータで処理させる自動プロシージャ(手順)をレビューしたりと、プログラミングで培った論理的な思考は活かすことができました。

 プログラミング教育といいますが、問題解決のための論理思考が基礎であり、問題解決方法をコードに書くことになります。コードは実際に自分で書かないと身につかないですし、論理思考は日頃から考えていないと役に立たないかもしれません。

 C言語JavaScriptも少しかじりましたが、ちょっとした科学技術計算が必要な場合には、Microsoft Excelの関数を用いれば十分できるので、Excelを活用することが多かったです。手書きで数式を組み立てて、パラメータを入力して結果を数値で得るために、関数電卓を常に持ち歩いていました。最近は、テンキーの大きい経理用の電卓ばかり、たたいています。

 制御屋ですと、行列(Matrix)計算が大量に必要となるため、コンピュータ用の特別なアプリケーションを使うことになります。MATLABなどが有名ですが、有償であり、個人で使用するにはライセンス料が高いです。プログラミング言語でコードを書いて、1から組み立てるには膨大の能力と時間が必要となります。

 「Python」は、米国の大学では教育用言語として最も利用され、NASA技術者も実際に活用しています。科学技術計算用のNumPyというパッケージを追加することで、行列計算や数値演算も容易になります。

 ここでは、「Python」を用いて軌道力学計算を行える環境を考えていきます。

https://www.python.org/static/img/python-logo@2x.png

はじめに

 有人宇宙から離れて2年が経ちました。それを機会にして、以前に書き留めていたブログ「チーム・マネジメント」の更新も止めています。現在、地元に戻って幼児教育に携わっていますが、これまでの技術の世界と全く異なり、日々新しい役割に追われています。

 宇宙工学に関わる20年以上の経験や知識を自分の中で眠らせている状態で、現在の重責を背負っていて、このまま終わらせて良いのだろうかと自問自答していました。現在のパンデミックの状況もあり、なかなか新しい貢献を見いだす機会や踏み出す余裕がないのが現実です。

 少しでも宇宙との繋がりを持ち続けたいとの思いもあり、大学時代の初心に戻り、制御工学、プログラミング そして 軌道力学を再度極めたいと考えています。新しいプログラミング言語であるPythonを学び、Python上で動く軌道力学ライブラリを使って、このブログに軌道力学の基礎を解説し、新たな発見を記録していきます。

 

An external pallet is released from the Canadarm2 robotic arm