宇宙を目指して一歩一歩

日常のことを徒然なるままに書き記します

はじめまして(Hello World!)

ようこそ

はじめまして、当ブログの作成者で管理人のshamoji-os(はてなIDの方は"shamojiji")と申します。

当ブログでの投稿を開始するにあたり、簡単な自己紹介をしておきたいと思います。

2~3分で読める分量で簡単に書いていきたいと思いますので、もしお時間ありましたらサクッとご覧になっていってください。

このブログを書いているのはどんな人?

筆者は大学卒業後、宇宙開発業界で約4年半程ロケット開発に関わるプロジェクトに携わり、ロケットの研究・開発・設計・維持・運用・打上げ等に関わって参りました。 それまでは「ロケットを打上げること」が私の人生の最大の目標でしたが、思いの外早く夢が叶い、かなり驚きました。大学受験が上手く行かず落ち込んだ時期もありましたが、諦めずに進み続けることが大事だと実感しています。

計2機のロケットの打上げに関わりましたが、複雑なシステム故、基本的に予定通りに進むことはほとんどなく、その難しさに苦労することも多々ありましたが、そうした困難を乗り越え打上げが成功したときの喜びは何物にも代えがたいものがあり、素晴らしい経験をすることができたと思っています。

その後、次に目指したいこととして思い描いたのは、

宇宙に行く。まだ誰も見たことのない景色をこの目で見る。そのための乗り物を作ること。

誰でも気軽に自由に宇宙へ行くことが出来る未来をつくること

でした。

有人宇宙輸送システムの利用は未だ地球近傍域に留まっており、まだまだ発展の余地があると考えています。

自分の一生を考えてみたときに、「死ぬ前に一度で良いから宇宙からの景色をこの目で見てみたい」と思いました。出来れば月面や火星を越えて、誰も見たことのない景色を見ることが出来たら最高だなぁと。

そのためには色々と必要なこと(資金、技術、法律、人脈、etc…)やその他問題等が山積みとなっていますが、私のライフワークとして一歩一歩進んでいきたいと思っているところです。

このブログにはどんなことが書かれるの?

技術的な内容であったり、考察だったり、感想だったり、何かしらへの挑戦のログ、といった内容が多くなると思います。

下手の横好き的な内容も多分に含まれるかと思いますので、専門家等の皆様から見れば拙い内容も多いかと思いますが、暖かい目で見て下されば幸いです。

その他、もしかすると自分の趣味的な内容のことも書くかもしれません。アニメ・漫画のようなサブカルの話だったり、プログラミング、DIY、電子工作、読書、旅行、キャンプ、etc…。割と多趣味なので、雑多な内容になるかもしれません。その場合はカテゴリを分けて投稿しますので、興味のあるジャンルの投稿をご覧になって頂ければと思います。

おわりに

以上となります。ここまで長文お読みくださりありがとうございました。

目標はあと20~30年後ぐらいに実現していたら良いなと考えておりますので、普段はまったりとした投稿が多くなると思います。

もし皆様のご興味と沿っていらっしゃるものがございましたら、拙いブログですが是非ご覧になって頂けますと幸いです。

それではどうぞごゆっくり。。。

将来の宇宙輸送機について考える(パーソナルモビリティとしての宇宙輸送機システムについて)

将来の宇宙輸送機について考える

私は宇宙に行きたい。そのための乗り物を作りたい。宇宙のまだ誰も見たことがない景色をこの目で見るまでは死ねないと思っている。

なのでその手段についてよく考える。

最初に思いつくのはロケットだ。国際宇宙ステーションISS)に宇宙飛行士を送る有人輸送ロケットを見ると、主にファルコン9ロケット(クルードラゴン:アメリカ(SpaceX社))やソユーズロケット(ソユーズ宇宙船:ロシア)等が運用されていることが分かる1,2。こうしたロケットを自前で作れるような技術力か、あるいはそれを買えるだけの資金力が必要になるだろう。以前、前澤友作さんが宇宙旅行を実現した際は、かかった費用が一人あたり約50億円だとか言われていたりした。自前で開発するとしたら更に膨大な費用がかかるだろう。いずれにしても個人の力ではなかなか難しそうだ。同じ目標を目指す人達とチームを組む必要があると感じる。

ロケットでの宇宙行きプランを検討するにあたってはSpaceX社が検討中のStarship3について見て見るのが良さそうだと考えている。イーロン・マスク氏の火星移住構想を実現するため開発されているこのロケットは人類史上最大の規模を誇る超大型のロケットで、就航した場合の1回当たりの打上げにかかるコストは約200M$(約2~3億円)になると言われている4。利益率や乗客数をどう設定するかにもよるが、Starshipの積載量を考えると将来的には数千万円からもしかすると数十万円程度の費用で宇宙旅行が実現する時代がやって来るかもしれない。徹底的なコストカットや再使用を推し進めた成果で、現代ロケット技術の粋を集めた結果だと思える。最も可能性のある宇宙行きチケットの候補の一つだろう。

これだけ安くなるのであれば、サラリーマンをやりながらでも貯金をコツコツ貯めていればもしかすると死ぬ前に月面や火星旅行ぐらいは実現できるかもしれない。実際宇宙行きを目指すのであれば一つの現実解だと感じる。

具体的にStarshipが実現した将来について思いを馳せてみる。今よりも遥かに安いコストで、人類は月や火星への一歩を踏み出していることだろう。

一方でこのシステムは非常に巨大で複雑だ。大きな拠点間を結ぶ定期便は就航するが、個人が本当の意味で行きたいところに行けるようになるにはまた別の移動手段を確保する必要があるのではないかと思った。

自動車と電車、セスナと旅客機等の関係性と似ていて、個人で所有するモビリティと国や企業が所有するインフラとではその性質が異なってくる。インフラであるロケットに対応した個人で所有できるモビリティについては未だ世界に発明されていないと考える。私はそう遠くない将来にこうしたパーソナルモビリティとしての宇宙輸送機が必要になってくるのではないかと考えている。

少し逸れてしまったが話を戻して、次に思いつく手段はスペースプレーン(単段式宇宙往還機)だろう。 ガンダムを見て育ったこともあり、旅客機のように宇宙を行き来するシャトルが飛び交う様子はいずれ実現するかもしれない未来として憧れ、想いを馳せるものであった。 しかし私が知る限りでスペースプレーンで実用化した例は未だなかったと記憶している。スペースプレーンの専門家ではないので余り過ぎたことは言えないが、感触としては軌道化に必要なエネルギーを獲得することが相当に難しいからではないかと考えている。ツィオルコフスキーの公式(ロケット方程式などと呼ばれたりもする)からは、膨大な理想増速量(ΔV)を獲得するためにロケットを多段化する必要が生じてくることが分かっている。単段式宇宙往還機(SSTO)を実現するために必要な技術要求(構造の軽さや推進系の性能等)は物理学的に非常に高いレベルを要求されていて、それを満足させる技術を研究していく必要がある。

他にも色々なアイデアがあるとは思うのだが、人を載せることを前提としたシステムとしては大きくこの二つが主要なアイデアではないかと思う。そしてここまでの考えをまとめると以下のようになる。


「誰でも自由に宇宙に行くことが出来る未来を作る」ためには

  • 圧倒的な低価格と高い安全性・信頼性を兼ね備えたシステム
  • インフラとしてのロケットおよびパーソナルモビリティとしての宇宙輸送機システム
  • 物理的・理論的に整合が取れたシステム

以上が必要と考えられる。


ロケットは既に様々な国・企業等が精力的に研究・開発を行っているのでここでは割愛する。 後者の「パーソナルモビリティとしての宇宙輸送機」は、どのようなシステムがあれば実現するだろうか?

パーソナルモビリティとしての宇宙輸送機システム

一つ思い付いたアイデアがあるのでご紹介したいと思う。

航空業界、特に空飛ぶ車と呼ばれていたりするeVTOLやドローンの世界であったり、個人発明家やベンチャー企業が挑戦している「ジェットパック」等を見ていた際に思い付いた発想だ。

まず最初に私がニュース等を見ていて「面白そうだ!」と感じたところ・技術を以下にいくつか紹介する。

いずれも個人所有可能な新たな輸送手段の未来を示しているものであると感じた。

特に印象深かったのは上に紹介したGravity Industries社が開発しているジェットパックである。 宇宙服を着てこれをロケットエンジンに置き換えれば、宇宙に行けるのではないだろうか と考えた。 しかし先に述べた物理学的な制約から宇宙に向かうならば多段式のシステムを組む必要がある。

どうすればよいだろうか…?

これまでの多段式ロケットがいわば「縦」に多段化しているのであれば、「横」に多段化してはどうかと考えた。丁度東京オリンピックの開会式でセレモニーを行っていたドローンアートに目が付く。燃料を搭載した無人機を複数機随伴飛行させて、燃料が切れたら随時随伴機からの燃料補給を受ける。そんなシステムはどうだろうかと思った。

システム設計の観点で重要になってくるのはおおよそ以下の要素だと思われる。

  • メイン機のペイロード/イナート質量、タンク容量(燃料搭載量)、エンジン性能等をそれぞれどうするか
  • 随伴機のペイロード質量(補給用の燃料等)/イナート質量、タンク容量(随伴機自身が飛行するために必要な燃料搭載量)、エンジン性能等をそれぞれどうするか

具体的に仮定を置いて計算をしてみる。ここでは以下の仕様を仮定した。


■ メイン機仕様

  • メイン機のペイロード質量: 100 kg (人間1名が搭乗する、アッパー側に仮定。)
  • 燃料搭載量: 200 kg
  • メイン機のイナート質量: 200 kg
    • エンジン: 35 kg (ELECTRON(Rocket Lab社)のRutherFordエンジン5の仕様から仮置き)
    • タンク: 20 kg(燃料搭載量 100 kg に対して質量比が約0.9となるタンクを設定)
    • 生命維持装置(宇宙服): 120 kg 6
    • その他(アビオニクス系、バッテリー等): 25 kg
  • エンジン性能: Isp 340 sec, Thrust 24 kN (それぞれRutherFordエンジンのスペック7を参考に仮定)

⇒ 初期質量: 100 + 200 + 200 = 500 kg

■ 随伴機仕様

  • 随伴機のペイロード質量: 220 kg (メイン機のペイロード質量 + 生命維持装置質量に相当)
    • タンク: 20 kg
    • 推進薬量: 200 kg
  • 燃料搭載量(随伴機の飛行分): 200 kg
  • 随伴機のイナート質量: 80 kg
    • エンジン: 35 kg
    • タンク(随伴機の飛行分): 20 kg
    • その他: 25 kg
  • エンジン性能: Isp 340 sec, Thrust 24 kN (同上)

⇒ 初期質量: 220 + 200 + 80 = 500 kg


以上の仕様をもとに、まず燃料がフル充填されたメイン機の1回の燃焼あたりに得られる理想増速量(ΔV)をロケット方程式に当てはめて求めてみる。

 \displaystyle
\begin{align}

\Delta V &= I_{sp} g \ln \frac{m_0}{m_T} \\
&= 340 ・9.8・ \ln \frac{500}{500-200} \\
&\fallingdotseq1702 \quad [m/s]

\end{align}

以上より一回燃料をフル充填する度、燃焼終了時に 1,702 m/s の増速量を得られることが分かった。

厳密には種々の損失を考える必要があるが、ここでざっくりと軌道化に必要なΔVを10,000 m/s と置いてみる。 メイン機を何回燃焼させればこのΔVを稼ぐことが出来そうか、以下の式より計算する。

 \displaystyle
n = 10000 \div 1702 \fallingdotseq 6 [回]

以上より、燃焼を6段階行うことで 10,000 m/s のΔVを稼げそうなことが分かった。

それでは合計何機の機体が必要となるか考えてみる。ここでは随伴機は打上げ場所から一緒についてくると仮定する。

1段目の燃焼は、地上でメイン機に充填した燃料を使えば良いため、燃料補給用の随伴機は必要ない。

2段目の燃焼のためには、メイン機への燃料補給を行うため1機の随伴機が必要となる。

3段目の燃焼のためには、先ほどの2段目と同等に増速させた随伴機を1機用意すればよいことになるから、2段目で使用した機数(メイン機+2段目加速分の随伴機1機)の計2機を随伴機として追加で用意すればよい。

念のため4段目についても同様に、先ほどの3段目と同等に増速させた随伴機を1機用意すればよいことになるから、3段目で使用した機数(メイン機+2段目加速分の随伴機1機+3段目加速分の随伴機2機)の計4機を随伴機として追加で用意すればよい。

以降も同様で、一般化するとn段目の燃焼には 2n-2 [機] (ただし、n≧2) の随伴機が必要であることが分かる。

従って、n段目の燃焼までに必要な随伴機の合計機数は以下より求められる。

 \displaystyle
\begin{align}
N &=  \sum_{k=2}^{n} 2^{k-2} \\
&= \frac{2^{n-1} - 1}{2-1} \\
&= 2^{n-1} - 1 [機] (n \geqq 2)
\end{align}

以上より、6段階増速するために必要な随伴機の機数は上式にn=6を代入して31機となる。 これにメイン機を足した32機が最低限必要な総機数となる。

ここまで技術面で見てきたが、事業性についてはどうだろうか?

有人機ではなく無人機として運用する場合は、メイン機のペイロード質量+生命維持装置分の220 kgをペイロード質量として扱うことが出来る。 同じくらいの打上げ能力を持つRocketLab社のElectronロケットを参考に、打上げ単価を約$20,000/kg8として以下の計算をしてみる。

 \displaystyle
\begin{align}

C &=  \frac{20000 \times 220}{32} \\
&= 137500 [\$ / 機]

\end{align}

ドルから円の換算レートを140円/$とすると、一機あたり大体二千万円程度で機体を製作することが出来れば市場に乗り込める可能性も見えてきそうである。 宇宙服が一着何億円の世界らしいので全体で見るとかなり厳しそうではあるが、上記は全ての機体を使い捨てにすることを前提にした計算なのでもう少し工夫すれば実現解が見えてくるかもしれない。

他にも本格的にこのようなシステムを実現しようと思った場合は色々と問題が起きそうなことは認識はしていて、例えば以下あたりは自信を持って大丈夫と言えない部分があると考えている。

  • 質量の超過リスク
  • 各種損失(重力損失、空力損失)の超過リスク
  • 安全性への問題(搭乗者に対する問題(加速度やロケットエンジンの熱等)、地上への安全等)
  • 具体的な飛行中の燃料の補給方式について
  • 随伴機との衝突リスク

一方で、ΔVが足りなかったとしても随伴機数を調節することで多少の調整は可能である柔軟さがあったり、 随伴機のエンジン出力を強化しつつ、世界各地に発射場を用意できれば、途中でメイン機に合流しての燃料補給が可能となり更に効率化の可能性がある等、システム全体としてまだ余裕度を持った構想であると考えている。

そして「横」の多段化にはこれまでの宇宙輸送機にないもうひとつの新しい特徴が生まれる。それは万が一メインの機体のコンポーネントに故障などが発生したとしても、随伴機に同じコンポーネントを積んでいれば空中で交換できる可能性が生まれることだ。故障部品の補充用として余剰の随伴機を飛行させることが信頼性の確保に繫がる。上の例で言うならば、倍の64機を飛行させることで飛行中の任意の故障1回までの対故障性能を持たせることが出来るだろう。 人命が掛かる輸送機にとってこの特徴は非常に重要な意味を持つようになるはずである。

更に、随伴機の機数が増えることはむしろメリットに結び付くことにもなる。同型機を大量生産することによってコストの低減であったり、データ・実績の蓄積等による信頼性の向上等が期待できるからだ。縦の多段化と異なり一機あたりに必要な推力は小さくて済むので比較的小規模なエンジンがあればそれで良い。扱うエネルギーが少なくなることはそれだけ安全性の向上やシステム設計上の余裕にも繫がる。また低高度を飛行する1段目や2段目の機体は大気圏で燃え尽きずそのまま再利用することも可能だろう。

最初はジェットパックのような必要最小限のシステムから、行く行くは空飛ぶ車・スペースプレーンのような大型のシステムでこの「空中補給」のアイデアを実現し、新しい形の宇宙輸送機を実現できたら面白いのではないかと考えている。

おわりに

ここまでの長文お読みくださり誠にありがとうございました。 実現性の程はいかほど、といったところで、私自身計算や考察が追いついていないところがあり大分粗の目立つアイデアかとは思いますが、少しでもワクワクして頂けたなら幸いです。

発想のスタートは上記でも紹介したGravity Ind.のジェットパックを見たときに「これは面白そうだ!」と感激したところから始まりました。自分でも乗ってみたい・作りたいとなって色々と考えているときに、「これをロケットエンジンに組み替えたらそのまま宇宙にいくことはできないだろうか」と思いました。検討している中で、記事でもご紹介したドローンの編隊飛行であったり、戦闘機の空中補給であったりといったイメージが思い浮かび、今回のアイデアに至った次第です。また、大量生産による信頼性確保が出来るという点も個人的には良いところな気がしています。

検討を詰めていく中で最も良く分からなかったのはエンジン回りだったでしょうか(他にも分からないところばかりでしたが…)。 数千万~数百万程度のロケットエンジンが作れないとシステムデザイン的に中々厳しくなってくるのですがその辺りの勘所がほとんどなかったので、しばらくは液体推進系の勉強を進めないとなぁと思った次第です。

あとは燃料補給の仕組みもですね。航空機のように空中でホースを差し込む形もありですが、燃料の入ったタンクごとごそっと付け替えることが出来れば色々と楽そうな感じもします。しかし重量物で高圧ガスたる液体燃料を空中で付け替えるのはかなり至難の業という感もあり、またそれに対応した高度な制御系・ソフトウェアも必要になると思うところです。

もう少し具体的に実現性を考えていきたいと思い、直近では出来る範囲の技術実証をドローンを使って出来ないかと考えています。 そちらの検討等もまた機会があれば公開していきたいと思いますので、もしご興味がありましたらしばしお待ち頂ければ幸いです。

それでは!


  1. ISSへの打上げ機 - 有人宇宙技術部門, JAXA (https://humans-in-space.jaxa.jp/iss/launch/)
  2. ISS関連フライトの全履歴 - 宇宙ステーション・きぼう 広報・情報センター, JAXA (https://iss.jaxa.jp/iss/flight/)
  3. STARSHIP - SpaceX (https://www.spacex.com/vehicles/starship/)
  4. E・マスク氏、火星での都市建設に向け「Starship」ロケットの経済性をアピール - CNET Japan (https://japan.cnet.com/article/35145201/)
  5. Rocket Lab Increases Electron Payload Capacity, Enabling Interplanetary Missions and Reusability - Rocket Lab (https://www.rocketlabusa.com/updates/rocket-lab-increases-electron-payload-capacity-enabling-interplanetary-missions-and-reusability/)
  6. 宇宙服ヒストリー - 有人宇宙技術部門, JAXA (https://humans-in-space.jaxa.jp/life/wear-in-space/history/)
  7. Electron Payload User Guide 7.0 - Rocket Lab (https://www.rocketlabusa.com/assets/Uploads/Electron-Payload-User-Guide-7.0.pdf)
  8. Smallsat Rideshare Program - SpaceX (https://www.spacex.com/rideshare/)

ロケットの飛行解析ソフト(OpenTsiolkovsky)をPythonに移植してみた - 概要詳解 -【OpenTsiolkovsky(Python)】

1. はじめに

こんにちは。この記事は、インターステラテクノロジズ株式会社様がオープンソースで公開されているロケットの飛行解析ツール「OpenTsiolkovsky(https://github.com/istellartech/OpenTsiolkovsky)」をPythonに移植してみたということで、

  • ツールの紹介・何が出来るのか
  • どうして移植しようと思ったのか

みたいなことを解説していきたいと思います。

プログラムは以下GitHubの方にあげておりますのでご確認くださいませ。

github.com

オープンソースソフトウェアの公開は筆者としては初めての経験のため、もし拙いところなどありましたらコメントなどでお知らせ頂けますと大変有難いです。)

2. 飛行解析って何?

恐らく宇宙業界、特にロケット開発にあまり縁がない人にとっては、「飛行解析」と聞いても余りピンとこないのではないかと思いましたので、まずはじめに簡単なご紹介をさせて頂きたいと思います。

ロケットの飛行解析とは読んで字のごとく、「ロケットを実際に飛ばしたときの動き・飛行経路等を事前に解析して確かめておくこと」を指します。ロケットの打上げは一発勝負の大事ですから、出来る限り事前にテスト・試験・検証等を行っておくことが非常に重要です。 ロケットの構造体やアビオニクス等のハードウェアは、振動試験や熱真空試験等、実際に物を使用して試験を行うことも可能ですが、それらをロケットとして一つに組み上げたときの挙動を試験等で確かめておくことは難しい場合が多いです。このように、事前に確かめておくことが難しい部分の挙動等を確認する手段として「解析」があります。

どこまでの現象をどの程度の精度で解析するか等、解析結果の使われ方や目的なんかによってツールに求められる性能も変わってきます。 高機能・高精度なツールがあればそれだけで良いかと言うと意外にそうでもなく、色々な試案があってクイックに検討を回してみたいときや、同時に複数のケースを回すことで最適化を試みたいとき等は、軽くて使い勝手の良いツールでまずは当たり付けをすることもあります。

他の多くのツールと同じく、飛行解析に用いるツールも適材適所が重要です。

3. ツールの紹介・何が出来るのか:OpenTsiolkovskyについて

さて、ご紹介した飛行解析に関わるツールについてですが、比較的簡単に使えるものと言えば、モデルロケット用の解析ツール等があるでしょうか(例:OpenRocket)。 しかし本当のロケットの打上げに使うような本格的なものについては、機密情報等を含んでいる場合もあるため国内外含めて中々自由に使えるツールが見当たらないという問題があったりします。

そんな折、「(某トラ技の特集に)オープンソースで開発されている飛行解析ツールのことが載っているらしい」という情報を教えてもらう機会がありました。すぐに書籍を購入してソースコードがアップロードされたGitHubを見に行ったことを覚えています。それが今回解説する「OpenTsiolkovsky」になります。

あらためての紹介となりますが、OpenTsiolkovskyは、インターステラテクノロジズ株式会社様が作成されたロケットの飛行解析用のオープンソースソフトウェアです。 このツールでは、入力された情報(ロケットの構成、質量、推力や姿勢履歴等)を基に、運動方程式を解いてロケットの飛行経路を解析することができます。

具体的なイメージとしては、例えば以下の図のように飛行経路を求めることが出来ます。 (細かい部分に差異はありますが、画像は日本のM-Vロケット1号機の飛行経路を解析により再現したものになります(本記事の後半でより詳細に解説しています)。)

OpenTsiolkovsky(Python) M-V-1飛行経路

このように、飛行解析を行うことでロケットがどのように飛んでいくか、その挙動等がある程度事前に分かるようになります。

どうでしょう、何だかワクワクしてきませんか?

実際にロケットを一機打上げるのは非常に大変なことですが、解析であればPCのボタン一つで完了します。色々なシステムの構成や可能性等を事前に何度でもシミュレート出来るというのは、個人的にはかなり好奇心を刺激される楽しいことだと思っています!

4. Pythonへの移植と本プログラム(OpenTsiolkovsky(Python))について

今回、「OpenTsiolkovsky」をPythonに移植しようと思ったきっかけは、まずは純粋な勉強目的からでした。 上述の通り、本格的な飛行解析ツールは公開されている情報も余り多くなく、特にオープンソースの形で公開されているものは非常に貴重という印象です。ロケットの打上げ計画等を考える上でも非常に重要な解析ツールですが、実際のところはブラックボックスで使われていることも多い印象のものでした。 いつの日かホワイトボックス化・完全自作したいという思いがありましたが、まさに探していたものを見つけた!という気分で、すぐにソースコードの解読に取り掛かったのを覚えています。

「OpenTsiolkovsky」のコア部分はC++でコーディングされています。飛行解析ツールですが、ある事情から実行速度が非常に重要となってくるので、コア部分を動作の早いC++でコーディングすることは非常に合理的であると考えています。 今回は目的が勉強であること、そのために実行速度よりも極力可読性の方を重視したかったこと、また周辺のライブラリの充実度や将来的な連携も考えて、Pythonでコーディングすることを考えました。

今回の移植に当たっては、プログラム内のクラス設計を一からデザインし、元のコードにあった機能の再配置等も行っております。 解析にあたっては、ロケットの諸元(質量、推力、etc)、周辺の大気・風、惑星の重力等々、多くの情報が複雑に相関します。また、それぞれの計算を容易にするために頻繁に座標系の変換を行う必要があり、これも内部構造の複雑化を招く要因となっています。 今回は極力、こうした計算の処理の部分と、それによって変わるパラメータの部分を分けて設計したいと思いました。イメージとしては、ロケットはロケットの、大気は大気の、重力は重力の、といったように各々のデータをそれぞれがパラメータとして持っており、間の相互作用や計算の部分は極力それ専用のマネージャークラスに担わせるという考え方です。こうすることで、特にロケットの諸元が変わる場合でも、処理部分には変更を加えることなく、パラメータ設定の変更のみで対応できると考えました。

結果的には、役割分担を適切に出来なかったりと上手く行かない部分もあり、再度一からやり直したい気分に駆られることしばしばでしたが、一旦形にはなりましたのでここで公開しようということになりました。

OpenTsiolkovsky(Python)_クラス図

こちらが本プログラムのクラス図です。

RocketStateクラスがロケットの位置・速度・加速度等の諸々の情報を保持しています。C++で言う構造体のような、パラメータのみを保存するクラスとして定義しています。

RocketStageクラスはロケットの1段目、2段目、3段目…といったロケットの各段を表しています。それぞれが自分の状態量(RocketState)を保持しており、それに応じて自分の位置や飛行状況を更新する機能も持っています。

RocketクラスはRocketStageで表現された各段の情報を束ねて1機のロケットとしての振る舞いを定義したクラスとなっており、ロケットの状況やイベント(各段の分離等)の把握、外部クラスとのIF等を担わせています。

その他、プログラム全体の実行を管理するマネージャークラスや、大気・風・重力等の情報を提供するEnvironmentクラス、実行状況を記録するLoggerクラス等から本プログラムは構成されています。 頻繁に行われる座標系変換については、当初はある基準とする座標系のデータをベースに、その他の座標系への変換を自動で行ってくれるようなクラスを設計しようかと思いましたがあまり上手くいかなかったため、座標系変換を行う関数をグローバル関数として定義し、使用するシーンで各々呼び出すこととしました。

当初の目論見は上述した通り、パラメータと処理部分の分離、それによる可読性や拡張性の向上等を狙っていましたが、蓋を開けてみるとオブジェクト指向色の強い設計となり、特にRocketStageクラスは肥大化してしまったかなと感じています。 座標系周りの機能も上述したようにグローバルからの呼び出しと言うことで整っている感じがせず、もうちょっと上手な設計が出来たかなぁという反省もありますが、本クラス図の整備を始めとして全体の見通しを良く開発することはできましたので、そこは良かったかなと思っているところです。

実際の使用例:M-Vロケット1号機の飛行解析

早速出来上がったプログラムを用いて何か試しにロケットを一機飛ばしてみたいと思います!

解析には様々な情報が必要で、中には機微な情報が含まれているものも多く、インターネットに公開されている情報から適切なサンプルを見つけてくるのは中々大変でしたが、日本の固体ロケットとしてかつて打上げられていた「M-Vロケット」に関しては比較的多くの情報が公開されていたため、M-Vロケット1号機の諸元をサンプルとして入力ファイルを作成・実行してみました。

念のため、今回解析を回すにあたっては、諸元を調べきれなかったキックステージ段(第4段目)を省略したり、機能が不安定なため模擬しなかったイベント(ペイロードフェアリングの分離等)、詳細が分からないため大まかな推定をしたところ(風向・風速)等があり、実際の諸元をすべて正しくインプットした解析となっていない点はあらかじめご承知おき頂ければと思います。

※ 参考文献を以下に紹介いたします。

M-V rocket F1 referenced data(folowing):

  1. Attitude: https://jaxa.repo.nii.ac.jp/record/33355/files/SA0200128.pdf
  2. Propulsion system: https://www.isas.jaxa.jp/publications/hokokuSP/hokokuSP47/85-116.pdf
  3. SOE: https://www.isas.jaxa.jp/j/enterp/rockets/vehicles/m-v/seq.shtml#
  4. Epoch, initial azimuth:https://www.isas.jaxa.jp/publications/hokokuSP/hokokuSP47/579-592.pdf

※ 解析を回すにはデジタルデータが必要ですが、今回のサンプル作成にあたっては、上記の参考文献からGraphcelというソフトを用いてデジタルデータ化したものを使用しました。

さて、解析により色々な情報が分かるようになりますが、その一例として冒頭にも上げた飛行経路があります。これはロケットの時々刻々の位置等の変化を示したもので、以下の通り、M-Vロケット1号機の場合は鹿児島にある内之浦の射点から打上げられた後、東向きに飛行して太平洋の海上あたりで着水する結果となりました。

OpenTsiolkovsky(Python) M-V-1飛行経路

念のため、基にした「OpenTsiolkovsky」の方でも解析を行い、本プログラムの結果と比較してみます。

comaperd image

少し分かりづらいですが、本プログラムの出力(先ほどの画像の白線)と元のOpenTsiolkovskyから出力されたデータを重ねて表示しています。概ね線は重なっており、このレベルで見て分かるような差分等がないことが分かりました。まずは移植成功、といったところでしょうか。

さて、実際の軌道との比較はどうでしょうか? 先ほど紹介した参考文献(1)の資料にM-V-1号機の飛翔経路の図が載っておりましたのでそれと重ねて比較してみたいと思います。

M-V-1号機の飛翔経路と予定軌道
↑こちらが参考文献から引用したM-V-1の飛翔経路の図です。

上の図と縮尺等を合わせて、本プログラムの解析結果からExcelで作成した図が以下となります。

OpenTsiolkovsky(Python)出力

ここからは若干パワープレイとなりますが、これら二つの図を重ねて差分をチェックしてみようと思います。 まずは高度から。

OpenTsiolkovsky(Python)_結果比較(高度)

これは分散(正常な誤差の範囲と言える領域)の高い側ちょうどギリギリといったところでしょうか。間違っているとまではいえませんが、そこそこの差分が出たなぁという印象です。

次は緯度・経度で見た経路を見て見ましょう。

OpenTsiolkovsky(Python)_結果比較(緯度経度)

こちらは予測の中心(”ノミナル”ということが多いです)とそれなりに近い結果が出たでしょうか。

以上、所感としては、上述の通り本来であれば分離しているはずのフェアリングを(解析上)つけたまま飛ばしていたり、色々な諸元を推測で入力していたりとかなりアバウトな条件をインプットした割には、良い精度で解析ができているような感じがしました。 最終的に解析が正しかったかどうかは実際に実機を打上げてみてその結果と比較してみるまでは何とも言えない部分も多いのですが、オープンソースで得られる情報からここまで推測できるというのはとても面白いと思いました!

おわりに

ここまでお読みくださりありがとうございました。 少しでも宇宙開発またはロケット開発にご興味を持って頂けましたら筆者としてはこの上ない喜びです。

また、重ねてにはなりますが、素晴らしいソフトウェアをオープンソースという形で公開してくださっているインタステラ―テクノロジズ株式会社様にはこの場を借りて、あらためてお礼申し上げたいと思います。

ではでは。