Giter Club home page Giter Club logo

trochia's Introduction

Trochia

Build Status on GitHub Actions release issues license

trochia: trajectory of rocket and ground-hit-point calculator

Trochia is a rocket flight simulator written by modern C++.

Install

There are pre-built binaries of latest release for some platform.

Please see Release Page for details.

Build from Source

$ git clone https://github.com/sk2sat/trochia && cd trochia
$ mkdir build && cd build
$ cmake ..
$ make

Usage

Trochia is run from the command line. Please open your terminal and go to your project directory.

$ vim config.toml # write configuration by TOML
$ trochia

Author

GitHub: sk2sat

Twitter: @sksat_tty

License

See LICENSE

trochia's People

Contributors

sksat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

trochia's Issues

空気抵抗の実装

  • ジオポテンシャル高度
  • 上空の大気密度モデル
  • 動圧(0.5×rho×Va×Va)
  • 空気抵抗力
    • 機体座標系X軸方向
    • 機体座標系
    • 回転

自動リリースの追加

ToDo

  • リリース用GitHub Action jobの追加
  • COPYINGの生成
  • zipファイルの生成
  • GitHub Releaseへのアップロード

落下分散の地図上でのプロット

#27 の一部

前提として, #3 のEarth FrameとLocal Frameの変換を実装して落下分散を緯度経度で出力できるようにする必要がある.

色々考えた結果,国土地理院の地理院タイルAPIを使って地図を取ってきて,その上にプロットするのが一番良さそうとなった.
これをやるには幾つかのJavaScriptライブラリがあるが,軽く見たところleafletが一番手軽かつ見た目的にも良さそう.

座標系の実装

  • Earth Frame
    • 落下分散を相対距離ではなく緯度経度ベースで出したい
    • GPSのログとシミュレーションを見比べたい
      • LLH(Latitude, Longitude, Height)
    • 将来的に軌道投入ロケットのシミュレーションもしてみたい
      • ECEF(自転と一緒に回転するやつ)
  • Local Frame
    • 位置ベクトルの計算に使うやつ
    • 直感的だしENU(East North Up)
    • 任意の点を原点として北をy軸方向,東をx軸方向,鉛直上向きをz軸方向にとる右手座標系
    • NEDを出力するオプションはあっていいかもしれない
  • Body Frame
    • 機体にかかる力を計算する時に使うやつ
    • 重心を原点,x軸をノーズ方向とする右手座標系
    • y軸方向も何かと合わせておくと良いかも(ランチャとの接合部とか?)

ToDo

  • Earth Frame
    • LLH
    • ECEF
  • Local Frame
    • NED
    • ENU
  • Body Frame
    • Body
    • Wind

パラシュートの実装

単純な(FROGSと同じ)パラシュートの実装をする.
頂点到達n秒後に開傘,それ以降は指定された降下速度で降下する.

  • 頂点判定
  • パラシュートの設定のconfig.tomlからの読み込み
  • 定速降下

回転の実装

実はクォータニオンを更新していないのでランチャに刺さった時の角度のまま放物飛行しているのである

environmentの設計

なんかゴチャッとしている&美しくない&ジオポテンシャル高度を入れる適切な場所が無い

C++17の使用

  • CmakeLists.txtCMAKE_CXX_STANDARDで指定
  • CI環境へのC++17対応コンパイラのインストール

ライセンスを決める

概要

なんも考えずにMITライセンスにしたのでちゃんと考えて決める

ToDo

  • 使用ライブラリのライセンス確認
  • -DEIGEN_MPL2_ONLY
  • バイナリ配布時の著作権表示のやり方調べる
  • trochiaのライセンスを決める

FROGSにある機能を実装する

FROGSを倒す

  • 推力履歴の読み込み
  • ランチャ
  • 空気抵抗
    • 機体座標3軸
    • 回転
  • 弾道落下
  • 減速落下
    • パラシュート
    • 2段パラシュート
  • 風モデル
    • べき法則
    • 統計風
  • 落下分散
  • 計算結果の出力
    • ランチクリア速度
    • 頂点到達時間
    • 最高到達高度
    • 最大対気速度
    • 最大法線力
    • 開傘時大気密度
    • 開傘時対気速度

Releaseが何故か3回実行される

リリース自体はできているのだけれど,Release workflowが何故か3回連続で実行される.
もちろん後の2回はalready existsでアップロードできない

フライトシミュレーション計算書(の一部)の自動生成

FROGSでは,FROGSghp.mを回した時に落下分散の形状は出すようにしている.これでは形状の確認はできるがENU座標系での値なので地図上にプロットすることはできない.
そこで,審査書用,というか風向風速制限表作製のために神Excelを使ってGHPを地図上にプロットしている.

そのため,FROGS(と神Excel)を倒すためには以下の自動化が必要となる.

  • 落下分散の形状の確認 #28
  • 落下分散の地図へのプロット #29
  • 落下可能範囲内外の判定 #30

風モデルの実装

#5 で空気抵抗が実装できたので,風モデルを実装する.

ToDo

  • config.tomlでの風モデルの選択
  • config.tomlでの地上風向風速の入力
  • 地上風向風速条件でケース生成
  • べき法則
  • 対数法則
  • 統計風

計算結果の保存方法

  • 保存するパラメータ種別もconfig.tomlで指定できると嬉しい

保存したいパラメータ

  • 飛翔履歴

    • 加速度
    • 速度
    • 高度
  • ランチクリア速度

  • 頂点

    • 最高到達高度
    • 大気密度
    • 対気速度
  • 落下位置

  • 最大法線力

Rocketクラスの見直し

trochia::rocket::Stageクラスを新たにobjectの派生クラスとして作り,
trochia::rocket::RocketをStageの積み重ねとして定義し直す.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.