STEP-Simulation / Quabla

6-DoF Rocket Simulator

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Quabla

6-DoF Rocket Simulator for STEP
coding UTF-8

Flight Event

以下の飛行イベントに対応している。

  • ノミナルフライト(べき法則)
  • ランチャ上での挙動
  • 予報風,統計風を用いた飛翔シミュレーション(csvによる風データの入力)
  • パラシュートによる減速落下
    • タイマー指令,頂点検知可能
    • 開傘ラグの考慮(頂点到達からパラシュート放出までの遅れ時間)
    • 二段分離(高度検知,タイマー指令可能)
  • 超音速パラメータのマッハ数依存性考慮
    • 抗力(軸力)係数,法線力係数傾斜,圧力中心のマッハ数変化
  • ペイロード分離

Reference

  • 戸川隼人,石黒登美子;スピンを伴うロケットの**を計算するプログラム,航空宇宙技術研究所資料 NAL TM-145,1968
  • 嶋田有三,佐々修一;飛行力学,森北出版,2017

作業環境

前提環境

Java

以下のサイトから最新のjdkをインストール
https://www.oracle.com/java/technologies/javase-jdk16-downloads.html
その後,以下のサイトを参考に環境変数を通す(Windowsのみ)
https://www.javadrive.jp/start/install/index4.html

以下のコマンドでJavaのバージョンが表示されることを確認する。

$ java -version
java version "17.0.1" 2021-10-19 LTS
Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)

また,コンパイルにjavacjarを使用するのでこちらもパスが通っているかを確認する。

$ javac -version
javac 17.0.1
$ jar
使用方法: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
詳細は、`jar --help'を実行してください。

(Macはターミナルでjava --version)

Python

PythonもJavaと同様にインストールを行い,パスを通す。 以下のコマンドでパスが通ってるか確認する。

$ python -V
Python 3.9.7

Pythonを使用する場合,あらかじめライブラリがそろっているAnacondaが便利である。 Anacondaを用いる場合,使用法は以下の通り。

anacondaの使用方法

以下のサイトからダウンロード。
https://www.anaconda.com/products/individual

さらにanacondaに含まれないライブラリとしてsimplekmlおよびPolycirclesを使用するのでそれもダウンロードする。
この際にWindowsとMacでは少々方法が異なる。

  • Windows
    anaconda promptを起動。
    conda install -c conda-forge simplekmlと入力。
    conda install -c conda-forge polycirclesと入力。

  • Mac
    ターミナルを起動。
    conda activateと入力。
    conda install -c conda-forge simplekmlと入力。
    conda install -c conda-forge polycirclesと入力。

なお,Macにおいて終了後に以下のコマンドを入力することでanacondaを終了する。
conda deactivate
conda config --set auto_activate_base False

Libraries

Java

Jsonファイルを読み込むために,以下のライブラリが必要。 Jacksonで読み込んでいる。

  • jacson-core
  • jackson-annotations
  • jackson-databind 以上のJava用のライブラリはsetup_jackson.py実行時にダウンロードされるため, 後述のInstallationのコマンドをすべて実行している場合はインストール不要である.

Installation

gitからcloneしたらQuablaのフォルダに移動する。

$ cd lib
$ python setup_jackson.py
$ cd ..
$ python setup.py

Useage(Eclipseを用いて実行可能jarを作る場合)

Eclipseを用いて実行可能jarを作る場合,以下の手順に従う。 開発者以外は読み飛ばして問題ない。

  1. 最新のEclipseをインストールする。JavaのFull Editionでよい。(すでにEclipseをインストールしてる場合は飛ばす。)
  2. 本レポジトリをクローン&インポートする。 こちらのサイトを参考にするとよい。クローンするとき,「クローン終了後,すべての既存Eclipseプロジェクトをインポート」にチェックを入れることを忘れない。また,クローン後にプロジェクトをインポートしないとJavaのパースペクティブに表示されない。
  3. src/quabla/QUABLA.javaを右クリックし,実行>実行の構成を選ぶ。Javaアプリケーションを選択し,引数のタブからプログラムの引数config\sample_rocket.json singleを入力して実行する。
  4. Javaプロジェクト上で(Quablaフォルダを)右クリックし,エクスポートを選択し,Java>実行可能JARファイルを選択し,次へを選択。起動構成は先ほど実行した,QUABLA - Quablaを選択し,エクスポート先はQuabla.pyと同じ階層にする。完了を押すとコンパイルが行われる。警告がいっぱい出るけど気にしない。
  5. Quabla.jarが指定した場所に生成されていればコンパイル成功。
  6. あとはanacondaとかで適当にQuabla.pyを実行すればいい。 Eclipseを使用して編集したい場合はPyDevとPythonをインストールする。

Execute

  1. anaconda promptを起動し,Quabla.pyがある階層まで移動する(Windows)。 Macの場合は,ターミナルでconda activateと入力。

  2. Quabla.pyを実行する。

$ python Quabla.py
  1. 以下のようにRocket configファイルを聞かれるので,計算したい機体のconfigファイルを指定する。
Rocket configuration files
Enter the path of rocket paramater file (...json):

計算したい機体データの**.jsonファイルをanaconda prompt(Macはterminal)にドラッグ&ドロップし,Enterキーを押す. (Macの場合,ファイル末尾に半角スペースが追加されてしまうため,末尾の半角スペースを消す.) **.jsonファイルの絶対パスまたは相対パスを直接入力しても問題ない. ここで相対パスを用いた場合,jsonファイル内でパスを使用しているファイルのパスも相対パスで指定する必要がある。 絶対パスを用いた場合は、jsonファイル内でも推力履歴等のファイルの場所を絶対パスで指定する必要がある。 絶対パスで統一することを強く推奨する。 **.jsonファイルの各パラメータの説明は後述. サンプルの機体データとして,config/フォルダ内にsample_rocket.jsonが格納されている.

  1. 次に,以下のようにシミュレーションモードを聞かれるので指定する。
Enter simulation mode (single or multi):

singlemultiを指定する。 single, multiの各モードについては以下の通り。

項目 説明
single 単一条件での計算。位置や姿勢角の時間履歴などを見たい場合はこのモードを選択。
multi 複数条件での計算。落下分散を計算したい場合に選択。singleモードと異なり位置などの時間履歴は出力されず,落下地点や最高高度などの表のみ出力。

Rocket Configurations

Caution

  • jsonの文法に従って記入すること。 例えば,

    • コロンが無い,逆にコロンが必要ない
      などの文法ミスに注意。
  • jsonファイルをUTF-8で編集しているか必ず確認

  • 長さなどの定義に注意。長さの基準が異なっている可能性がある。

Solver

ソルバーに関する設定。

項目 備考
Name プロジェクト名や機体名など
Result Filepath 結果の出力先。
Time Step シミュレーションの時間刻み。

Multi Solver

複数条件のシミュレーション時の設定。

項目 単位 備考
Minimum Wind Speed m/s 計算する風速の最小値。
Step Wind Speed m/s
Number of Wind Speed - 計算する風速の数。
Number of Wind Azimuth - 計算する風向の数。基本的に4の倍数にすること。
Base Wind Azimuth [deg] - 風向の基準。例えば,打上方位角と同じ場合,向かい風基準で,風向が適用される。

Launch

ランチャなどの打上げ条件に関する設定。

項目 単位 備考
Date N/A 打上げ日時。現状このパラメータは使用していない。
Site N/A 射場の選択。1:大島_陸,1:大島_海,1:能代_陸,1:能代_海,5:任意の射場0を選んだ場合,射点の絶対座標(緯度,経度,高度)を指定する。各射場の番号の対応はこちらのファイルに準ずる。
Launch lat deg 緯度
Launch lon deg 経度
Launch height deg 高度
Launch Azimuth deg 打上げ方位角。磁北から反時計回りを正。
Launch Elevation deg 打上げ仰角。
Launcher Rail Length m ランチャ有効レール長。
Tip-Off Calculation Exist N/A チップオフを考慮するかどうか。ガントリー式の場合,falseにする。
Safety Area Exist N/A 落下分散の出力に保安円を表示させたい場合true,いらない場合false
Input Magnetic Azimuth deg 磁気偏角。磁北と真北のずれ。

Structure

構造に関するパラメータ。

項目 単位 備考
Length m 機体全長。ノーズコーン先端から機体後端まで。ボートテイルを有する場合はボートテイル後端まで。ノズルカバーは含めない。
Diameter m 機体代表直径。
Dry Mass kg 乾燥時(酸化剤を除いた)の機体重量。
Dry Length-C.G. from Nosetip m 乾燥時の機体重心とノーズコーン先端の距離。
Dry Moment of Inertia Roll-Axis kg*m^2 乾燥時のロール軸回りの慣性モーメント。
Dry Moment of Inertia Pitch-Axis kg*m^2 乾燥時のピッチ軸回りの慣性モーメント。
Upper Launch Lug m 1本目のランチラグとノーズコーン先端の距離。ランチラグが3本以上の場合,機体後端から2本目のランチラグとの距離にすること。
Lower Launch Lug m 機体後端から最も近いランチラグとノーズコーン先端との距離。

Engine

エンジンに関するパラメータ。

項目 単位 備考
Thrust Curve - 推力履歴のcsvファイルのパス。
Nozzle Exit Ratio mm ノズル出口(出力)径
Burn Time sec 燃焼時間。作動時間とは異なる。
Tank Volume cc 酸化剤タンクの容量。
Oxidizer Density kg/m^3 酸化剤密度。
Length Fuel-C.G. from End m 機体後端から燃料(グレイン,固形燃料)重心までの距離。インジェクターベルは燃料重心に含めない。
Length Tank-End from End m 機体後端から酸化剤タンク口金までの距離。
Fuel Mass Before kg 燃焼前燃料重量。
Fuel Mass After kg 燃焼後燃料重量
Fuel Outside Diameter mm 燃料外径。
Fuel Inside Diamter mm 燃焼前の燃料内径。
Tank Diameter mm タンク外径。
Fuel Length m 燃料長さ。インジェクターベル含めず。
Tank Length m タンク長さ。

Aero

空力微係数関連のパラメータ。

項目 単位 備考
Cd File N/A 抗力係数(軸力係数)カーブのファイルのパス。
Cd File Exist N/A 抗力係数カーブを使用する(抗力係数のマッハ数依存性を考慮する。)かどうか
Constant Cd - 一定抗力係数。
Length-C.P. File N/A 圧力中心カーブのファイルのパス。
Length-C.P. File Exist N/A 圧力中心カーブを使用するかどうか。
Constant Length-C.P. from Nosetip m 一定圧力中心。ノーズコーン先端からの距離。
CNa File N/A 法線力係数傾斜(法線力傾斜。OpenRocketでいうところの法線力係数。)カーブ。
CNa File Exist N/A 法線力係数傾斜カーブを使用するかどうか。
Constant CNa 1/rad 一定法線力係数傾斜。
Roll Dumping Moment Coefficient Clp 1/rad ロール減衰モーメント係数。
Pitch Dumping Moment Coefficient Cmq 1/rad ピッチ・ヨー減衰モーメント係数。

Parachute

パラシュート,ドローグシュートについてのパラメータ。

項目 単位 備考
1st Parachute CdS m^2 1段目のパラシュート(単段分離ならメインシュート,2段分離ならドローグシュート)の抗力係数とパラシュート面積の積。
Parachute Opening Lag sec 1段目パラシュートの開傘ラグ.開傘ラグを考慮しない場合,0.0にする.
2nd Parachute Exist N/A 2段分離を行うかどうか。
2nd Parachute CdS m2 2段目パラシュートのCdS
2nd Parachute Opening Altitude m 2段目開傘の高度。
2nd Parachute Timer Mode N/A 2団目パラシュートの開傘条件を時間で指定する場合true
2nd Timer [s] sec 2団目パラシュート開傘時間。

Wind

風についての設定。

項目 単位 備考
Wind File Exist N/A 上空風データ(csvファイル)を用いてシミュレーションを行うかどうか。
Wind File N/A 上空風データのパス。
Wind Model N/A 風モデルの指定。Wind File Existfalseの場合,有効となる。law,constantの中から選択。モデルの指定に誤りがあるか,指定なしの場合constantになる。
Wind Power Law Coefficient - 高度分布係数。陸打ちは4.5,海打ちは6.0とする。運営から指定がある場合,そちらに従う。
Wind Speed m/s 基準高度(風速計設置高度)での基準風速。Simulation Modesingleの場合のみ有効。
Wind Azimuth deg 風向。北を0 deg,時計回り正。
Wind Reference Altitude m 基準高度。風向風速計の設置高度とする。

Wind Modelについては以下の通り。

項目 説明
law べき法則で風速を計算。風向は高度分布をもたない。
constant 定常風。風向・風速が高度分布をもたない。

Payload

項目 説明
Payload Exist ペイロードの分離を行うかどうか
Mass [kg] ペイロードの重量。分離前はロケット側の構造質量に含まれ,分離後は燃焼終了時の質量からこの値がまるまる差し引かれる。
Parachute CdS [m2] ペイロードのパラシュートの抗力特性

Other

  • 射場情報の更新,マップ更新,射場追加はこちら
  • シミュレータの仕様,支配方程式の解法などはこちら

Future Works

  • 変数が発散したときの例外処理
  • マルチスレッド化(現状のコードでも速度自体は十分。今後計算条件が増えるなら実装の必要あり)

About

6-DoF Rocket Simulator

License:MIT License


Languages

Language:Java 58.9%Language:Python 41.1%