Skip to content

Commit 74c3002

Browse files
Merge pull request #3 from ProjectCaelus/dev
Merging new changes
2 parents de7357c + c17a3b5 commit 74c3002

18 files changed

Lines changed: 435 additions & 16619 deletions

docs/livestreaming/obs.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
title: Installing OBS
3+
sidebar_label: OBS
4+
---
5+
6+
## How We Stream
7+
We use the streaming software OBS (Open Broadcaster Software) (https://obsproject.com/) (https://github.com/obsproject/obs-studio) and youtube to host our livestreams.

docs/livestreaming/stream_setup.md

Whitespace-only changes.

docs/livestreaming/streaming.md

Whitespace-only changes.

docs/programming/packets.mdx

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
title: Proposed Packet Format
3+
---
4+
5+
Packets are used to communicate between the rocket and the ground station. They convey information about the state of the rocket, alert the ground station of any updates, and enable the ground station to make adjustments to the rocket before launch.
6+
7+
**Notes** <br/>
8+
Packets can only be sent to the rocket BEFORE launch, not AFTER. This is to comply with regulations. <br/>
9+
These are *proposed* packet formats: not implemented yet, but here for reference during the conversion.
10+
11+
## Types
12+
|**Actuation Types**|
13+
|-|
14+
|OPEN_VENT|
15+
|CLOSE_VENT|
16+
|PULSE|
17+
|STOP_ACTUATION (NONE)|
18+
19+
|**Actuation Priorities**|
20+
|-|
21+
|1 → Highest priority (abort priority)|
22+
|2 → Middle priority|
23+
|3 → Lowest priority|
24+
25+
|**Abort Levels**|
26+
|-|
27+
|NORMAL|
28+
|SOFT_ABORT|
29+
|HARD_ABORT|
30+
31+
## Packets FROM ground software TO flight software
32+
33+
|Header |Message Format |
34+
|------------------------------------|-------------------|
35+
|set_abort_level (To be implemented) |`Level: AbortLevel`|
36+
|soft_abort (deprecated) | |
37+
|undo_soft_abort (deprecated) | |
38+
|progress | |
39+
|solenoid_actuate |`valve_type: X,`<br/>`valve_location: X,`<br/>`actuation_type: X,`<br/>`actuation_priority: X`|
40+
|valve_request |`valve_type: X,`<br/>`valve_location: X` |
41+
|sensor_request |`sensor_type: X,`<br/>`sensor_location: X` |
42+
43+
## Packets FROM flight software TO ground software
44+
45+
| Header | Message Format |
46+
|--------------------------|---------------------------------------------------------------------------------------------------------------------------------|
47+
| control_task_start | `task: stage or pressure or telemetry or valve or sensor` |
48+
| stage_status | `stage: X`<br/>`status: X` |
49+
| abort_level | `level: AbortLevel` |
50+
| abort_request_response | `successful: boolean`<br/>`level: AbortLevel` |
51+
| heartbeat | `timestamp: X` |
52+
| sensor_data | `[type]: {`<br/>&nbsp;&nbsp;`[location]: {`<br/>&nbsp;&nbsp;&nbsp;&nbsp;`measured_value: X`<br/>&nbsp;&nbsp;&nbsp;&nbsp;`normalized_value: X`<br/>&nbsp;&nbsp;&nbsp;&nbsp;`status: X`<br/>&nbsp;&nbsp;`}`<br/>`}` |
53+
| abort_alert | `level: none or soft or hard`<br/>`dangerous_sensors?: [`<br/>&nbsp;&nbsp;`type: X`<br/>&nbsp;&nbsp;`location: X`<br/>&nbsp;&nbsp;`normalized_value: X`<br/>`]` |
54+
| valve_actuation_response | `type: X`<br/>`location: X`<br/>`found: boolean`<br/>`successful: boolean` |
55+
| valve_request_response | `type: X`<br/>`location: X`<br/>`found: boolean`<br/>`actuation_type?: X`<br/>`actuation_priority?: X` |
56+
| valve_data | `[type]: {`<br/>&nbsp;&nbsp;`[location]: {`<br/>&nbsp;&nbsp;&nbsp;&nbsp;`actuation_type: X`<br/>&nbsp;&nbsp;&nbsp;&nbsp;`actuation_priority: X`<br/>&nbsp;&nbsp;` }`<br/>`}` |
57+
| valve_actuated | `type: X`<br/>`location: X` |

docs/propulsion/aphlex/cea.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
---
2+
title: Aphlex 1C Engine - CEAgui
3+
sidebar_label: CEAgui
4+
---
5+
6+
## Overview
7+
The first step in designing the Aphlex 1C engine is to calculate several chemical and thermodynamic parameters using CEAgui. CEAgui (Chemical Equilibrium with Applications) is a program developed by NASA's Glenn Research Center for calculating advanced chemical properties and interactions for propellant combustion in rocket engines. By using CEAgui, we can find values for the ratio of specific heats ($k$), combustion temperature ($T_0$), molecular mass of gas ($M$), characteristic velocity ($c*$), and specific impulse ($Isp$). In conjuction with the following programs, we can find driving paramaters of engine performance such as thrust.
8+
9+
10+
## Inputs
11+
| Name | Symbol | Description | Value | Unit |
12+
| :----------- | :------------ | :------------------------------------------------------------------------------------ | :--- |
13+
| Oxidizer to Fuel Ratio | $O/F$ |Ratio of mass of oxidizer to fuel | 4.0 | No Units |
14+
| Chamber Pressure | $P_0$ | | | $Pa$ |
15+
| Altitude | $H$ | | | $m$ |
16+
| Frozen Flow | None | Assumes reactant do not react further in expansion | False | Boolean |
17+
| Fuel | None | Propellant | Denatured Ethanol (95% by weight) and Water (5% by weight) | None |
18+
| Oxidizer | None | Propellant | Nitrous oxide| None |
19+
| Ambient Temperature | $T_3$ | Temperature of oxidizer and fuel | 293 | K |
20+
21+
22+
## Program Structure and Function
23+
The main method calls `cea_inp(data: dict, case_name: str)` to create a .inp file for CEAgui to read. The inputed dictionary retrieves all inputs, and with this method, writes and formats the input for CEAgui. This method also creates a new directory to store all files throughout the process, and returns the directory name, `case_dir`. Next, the method calls `cea_driver(case_name, case_dir)` to do two tasks: 1. begin a thread, 2. call CEAgui as a subprocess. Prior to doing this, the .inp file is moved to the same directory as CEAgui to ensure the .exe can reach all helper functions such as thermo.lib. CEAgui is called and asks for a file path to the .inp file. The thread calls the `type_with_delay(case_dir: str , delay: float)` to type in the file path to begin CEAgui. CEAgui outputs a .out file which is immediately with the .inp file moved to `case_dir` to be parsed. `cea_outparse(data: dict, case_name: str, case_dir: str)` is lastly called to iterate through the .out file's lines to find the desired outputs. The outputs are added to the dict and used to write a .csv file. The method returns the dict as an input for the following functions.
24+
25+
26+
## Outputs
27+
| Name | Symbol | Descriptions | Value | Unit |
28+
| :----------- | :------------ | :------------------------------------------------------------------------------------ | :--- | :---
29+
| Throat Pressure | $P_1$ | | | $Pa$ |
30+
| Specific Impulse | $I_{sp}$ | Impulse per unit weight | | $m/s$ |
31+
| Characteristic Velocity | $c^*$ | Ideal velocity of the system | | $m/s$ |
32+
| Ratio of Specific Heats | $\gamma$ | Determines thermodynamic properties in isentropic flow | | No Units |
33+
| Molecular Mass | $M$ | | | $kg/mol$ |
34+
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
title: Aphlex 1C Engine - Design Overview
3+
sidebar_label: Design Overview
4+
---

docs/propulsion/aphlex/injector.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
---
2+
title: Aphlex 1C Engine - Injector
3+
sidebar_label: Injector
4+
---
5+
6+
### Overview
7+
The third step in designing the Aphlex 1C engine is the injector portion, which takes in key input parameters including manufacturing constraints and key defining characteristics, as well as the propellant mass flow rates and properties. The code characterizes a like-on-like doublet impinging injector, outlining the number of oxidizer and fuel orifices, as well as their respective diameters, distances, and more. These outputs can be used to design and manufacture the injector.
8+
9+
## Inputs
10+
| Name | Symbol | Value | Unit | Origin |
11+
| :----------- | :------------ | :--- | :--- | :--- |
12+
| Total Mass Flow Rate | $\dot{m}$ | | $kg/s$ | |
13+
| Oxidizer to fuel ratio | $OF$ | | dimensionless | |
14+
| Fuel density | $\rho_{f}$ | | $kg/m^3$ | |
15+
| Oxidizer density | $\rho_{o}$ | | $kg/m^3$ | |
16+
| Chamber pressure | $P_{0}$ | | $Pa$ | |
17+
| Pressure drop across injector | $\Delta{P}$ | | % (of chamber pressure) | |
18+
| Starting diameter of oxidizer orifice | $d_{o}$ | 1.58 | $mm$ | |
19+
| Discharge coefficient of oxidizer orifice | $C_{d_{o}}$ | 0.9 | dimensionless | |
20+
| Starting diameter of fuel orifice | $d_{f}$ | 1.00 | $mm$ | |
21+
| Discharge coefficient of fuel orifice | $C_{d_{f}}$ | 0.88 | dimensionless | |
22+
| Impingement angle | $\lambda$ | 60 | °degrees | | |
23+
| Jet length to distance between orifices ratio* | $\frac{L}{D}$ | 6 | dimensionless | |
24+
*Obtained from NASA SP-8089
25+
26+
## Formulas
27+
| Name | Equation | Reference |
28+
| :- | :---------------------------------- | :------ |
29+
| Total orifice area | $A = \frac{Q}{C_{d}\sqrt{2\rho\delta{p}}}$ | |
30+
| Oxidizer orifice number | $n_{o} = \frac{\dot{m}_{o}}{\dot{m}_{oi}}$| |
31+
| Fuel orifice number | $n_{f} = \frac{\dot{m}_{o}}{\dot{m}_{of}}$| |
32+
| Oxidizer orifice diameter | $d_{o} = 2\sqrt{\frac{\dot{m}}{C_{d}n_{o}\pi\sqrt{2\rho\Delta p}}}$ | |
33+
| Fuel orifice diameter |$d_{f} = 2\sqrt{\frac{\dot{m}}{C_{d}n_{f}\pi\sqrt{2\rho\Delta p}}}$ | |
34+
| Injector length | $L_{inj} = 10d_{max}\cos\frac{\lambda}{2}$ | |
35+
| Fuel jet length | $L_{jet_{f}}=\frac{L}{D} d_{f}$ | |
36+
| Oxidizer jet length | $L_{jet_{o}} =\frac{L}{D} d_{o}$ | |
37+
| Oxidizer impingement distance | $L_{POI_{o}} = L_{jet_{o}}\cos \lambda$
38+
| Fuel imingmenet distance | $L_{POI_{f}} = L_{jet_{f}}\cos\lambda$
39+
| Oxidizer combustor orifice distance | $d_{com_{o}} = 2L_{jet_{o}}sin (90\degree - \lambda)$| |
40+
| Fuel combustor orifice distance | $d_{com_{f}} = 2L_{jet_{f}}sin (90\degree - \lambda)$| |
41+
| Oxidizer manifold orifice distance |$d_{man_{o}} =\frac{\frac{d_{com_{o}}}{L_{POI_{o}}}}{L_{inj}+L_{POI_{o}}}$|
42+
| Fuel manifold orifice distance | $d_{man_{f}} =\frac{\frac{d_{com_{f}}}{L_{POI_{f}}}}{L_{inj}+L_{POI_{f}}}$ |
43+
44+
## Program Structure and Functions
45+
Similar to nozzle.py, injector.py runs `injector_main(data: dict)` to receive inputs from the recurring `data` dictionary. THe method then attempts to calculate injector dimensions. The method stores the dimensions back into `data` to be returned.
46+
47+
## Outputs
48+
| Name | Symbol | Value | Unit |
49+
| :- | :---------------------------------- | :---- | :------ |
50+
| Oxidizer orifice number | $n_{o}$| | dimensionless |
51+
| Oxidizer orifice diameter | $d_{o}$ | | $mm$ |
52+
| Oxidizer orifice area | $a_{o}$ | | $mm^{2}$ |
53+
| Oxidizer jet length | $L_{jet_{o}}$ | | $mm$ |
54+
| Oxidizer impingement distance | $L_{poi_{o}}$ | | $mm$ |
55+
| Oxidizer combustor orifice distance | $d_{com_o}$ | | $mm$ |
56+
| Oxidizer manifold orifice distance | $d_{man_o}$ | | $mm$ |
57+
| Fuel orifice number | $n_{f}$ | | dimensionless |
58+
| Fuel orifice diameter | $d_{f}$ | | $mm$ |
59+
| Fuel orifice area | $a_{f}$ | | $mm^{2}$ |
60+
| Fuel jet length | $L_{jet_{f}}$ | | $mm$ |
61+
| Fuel impingement distance | $L_{poi_{f}}$ | | $mm$ |
62+
| Fuel combustor orifice distance | $d_{com_{f}}$ | | $mm$ |
63+
| Fuel manifold orifice distance | $d_{man_{f}}$ | | $mm$ |
64+
| Injector plate thickness | $L_{inj}$ | | $mm$ |

docs/propulsion/aphlex/inputs.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
---
2+
title: Aphlex 1C Engine - Inputs
3+
sidebar_label: Input Overview
4+
---
5+
| Name | Symbol | Description | Value | Unit | CEAgui | Nozzle | Injector | Propsim |
6+
| :-------- | :----------- | :--------------------------------- | :-- | :-- | :-- | :-- | :-- | :-- |
7+
| Thrust| $F$ | Downward force exerted by engine | | $N$ | No | Yes | No | No |
8+
| Chamber Pressure | $P_0$ | Pressure in combustion chamber| | $Pa$ | Yes | Yes | Yes | Yes |
9+
| Oxidizer to Fuel Ratio | $O/F$ | Ratio of oxidizer mass to fuel mass | 4.0 | dimensionless | Yes | Yes | Yes | Yes |
10+
| Operational Altitude | $ALT$ | Altitude where exhaust gas does not expand| | $m$ | Yes | Yes | Yes | Yes |
11+
| L-star | $L^*$ | Length needed for adequate mixing of propellants| | $m$ | No | Yes | No | Yes |
12+
| Ambient Temperature | $T_3$ | Temperature outside the engine| 298 | $K$ | Yes | No | No | Yes |
13+
| Oxidizer density | $\rho_{o}$ | Density of oxidizer | | $kg/m^{3}$ | No | No | Yes | Yes |
14+
| Fuel density | $\rho_{f}$ | Density of fuel | | $kg/m^{3}$ | No | No | Yes | Yes |
15+
| Injector Pressure Drop | $\Delta{P}_{inj}$ | Pressure drop across injector (stifness) | | % | No | No | Yes | No |
16+
| Oxidizer Orifice Starting Diameter | $d_{o,i}$ | Initital oxidizer orifice diameter based on manufacturing | | $mm$ | No | No | Yes | No |
17+
| Fuel Orifice Starting Diameter | $d_{f,i}$ | Initital fuel orifice diameter based on manufacturing | | $mm$ | No | No | Yes | No |
18+
| Oxidizer Orifice Discharge Coefficient | $Cd_{o}$ | Fill | | dimensionless | No | No | Yes | Yes |
19+
| Fuel Orifice Discharge Coefficient | $Cd_{f}$ | Fill | | dimensionless | No | No | Yes | Yes |
20+
| Impingement Angle | $\lambda$ | Arranged angle of impinging injector orifices | No | No | Yes | No |
21+
22+
<!-- | Frozen Flow | f | Assumes gas composition at exit matches that in the chamber | False | Boolean | Yes | No | No | No | -->

docs/propulsion/aphlex/nozzle.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
---
2+
title: Aphlex 1C Engine - Nozzle
3+
sidebar_label: Nozzle
4+
---
5+
6+
## Overview
7+
The second step in designing the Aphlex 1C engine involves determining nozzle dimensions. nozzle.py attempts to calculate these paramaters by using properties of combustion ascertained by CEAgui. Information on the dimensions of the "significant" portions of the nozzle such as the throat, allows us to design an optimized geometry of a rocket nozzle. This alows for further analysis using CFD to determine other properties of Callisto 1.
8+
9+
## Inputs
10+
| Name | Symbol | Value | Unit | Origin |
11+
| :----------- | :------------ | :--- | :--- | :--- |
12+
| Desired Thrust | $F$ | 5 | $kN$ | |
13+
| Chamber Pressure | $P_{0}$ | placeholder | $MPa$ | |
14+
| Altitude (optional) | $ALT$ | placeholder | unit | |
15+
| Oxidizer to fuel ratio | $O/F$ | placeholder | dimensionless | |
16+
| Combustion chamber temperature| $TO$ | placeholder | $K$ | |
17+
| Molecular mass of the gas | $M$ | placeholder | $kg/mol$ | |
18+
| Ratio of specific hear capacities | $k$ | placeholder | dimensionless | |
19+
| Characteristic chamber length | $L*$ | placeholder | $m$ | |
20+
21+
## Formulas
22+
| Name | Equation | Reference |
23+
| :- | :---------------------------------- | :------ |
24+
| Mass Flow Rate | $\frac{F_t}{c}$ | |
25+
| R (placeholder) | $\frac{R_{u}}{M}$ | |
26+
| Pressure Ratio | $\frac{P_{exit}}{P_{chamber}}$ | |
27+
| AR | $A_{R} = {\frac{k+1}{2}}{\frac{1}{k-1}}{{\frac{P_{3}}{P_{0}}}{\frac{1}{k}}{\sqrt{\frac{k+1}{k-1}{(1-\frac{P_{3}}{P_{0}}{\frac{k-1}{k}})}}}}$
28+
| $ER$ | $\frac{1}{A_{R}}$ |
29+
| $T_{t}$ | $\frac{2*{TO}}{k + 1}$ |
30+
| $v_{2}$ | $\sqrt{\frac{2k}{k-1}*RT_{0}(1-{\frac{P_{3}}{P_{0}}}\frac{k-1}{k})}$
31+
| $\dot{m}$| $\frac{F}{v_{2}}$ |
32+
| $\dot{m}$ fuel | $\frac{\dot{m}}{OF + 1}$ |
33+
| $\dot{m}$ oxidizer | $\frac{\dot{m}}{OF + 1} * OF$ |
34+
| $I_{sp}$ | $\frac{F}{\dot{m}{g}}$
35+
| $T_{e}$ | $\frac{TO}{({\frac{P_{0}}{P_{3}}})^\frac{k-1}{k}}$
36+
| $M_{num}$ | $\frac{v_{2}}{\sqrt{k*{R}*{T_{e}}}}$
37+
| $A_{t}$ | $\frac{\dot{m}\sqrt{k*{R}*{T_{0}}}}{k{P_{0}}{\sqrt{(\frac{2}{k+1})(\frac{k+1}{k-1})}}}$
38+
| $A_{e}$ | $ER\times{AR}$ |
39+
| $R_{t}$ | $\sqrt{\frac{A_{t}}{\pi}}$|
40+
| $R_{e}$ | $\sqrt{\frac{A_{e}}{\pi}}$|
41+
| $A_{c}$ | $8A_{e}$ |
42+
| $R_{c}$ | $\sqrt{\frac{A_{c}}{\pi}}$|
43+
| $L_{c}$ | $\frac{A_{t}\times{L_{*}}}{A_{c}}$
44+
| $L_{dn}$ | $\frac{R_{e} - R_{t}}{tan(15)}$
45+
| $L_{cn}$ | $\frac{R_{c} - R_{t}}{tan(45)}$
46+
47+
## Program Structure and Functions
48+
`nozzle_main(data: dict)` inputs `data`, a recurring dictionary which is passed through each program. Using the formulas from (insert here) calculate the nozzle dimensions and store them back into `data` to be returned.
49+
50+
## Outputs
51+
| Name | Symbol | Value | Unit |
52+
| :----------- | :------------ | :--- | :--- |
53+
| Specific impulse at altitude | $Isp$ | | $s$ |
54+
| Throat temperature | $T_{t}$ | | $K$ |
55+
| Effective exhaust velocity | $v_{2}$ | | $m/s$ |
56+
| Mass flow rate | $\dot{m}$ | | $kg/s$ |
57+
| Mass flow rate of the oxidizer | $\dot{m}_{oxidizer}$ | | $kg/s$ |
58+
| Mass flow rate of the fuel | $\dot{m}_{fuel}$ | | $kg/s$ |
59+
| Pressure Ratio | $PR$ | | dimensionless |
60+
| Expansion ratio | $ER$ | | dimensionless |
61+
| Exit temperature | $T_{e}$ | | $K$ |
62+
| Exit Mach number | $M_{num}$ | | $m/s$ |
63+
| Area of the throat | $A_{t}$ | | $m^2$ |
64+
| Area of the exit | $A_{e}$ | | $m^2$ |
65+
| Radius of the throat | $R_{t}$ | | $m$ |
66+
| Radius of the exit | $R_{e}$ | | $m$ |
67+
| Radius of the chamber | $R_{c}$ | | $m$ |
68+
| Length of the chamber | $L_{c}$ | | $m$ |
69+
| Length of the diverging nozzle | $L_{dn}$ | | $m$ |
70+
| Length of the converging nozzle | $L_{cn}$ | | $m$ |
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
title: Aphlex 1C Engine - Optimizer
3+
sidebar_label: Optimization
4+
---
5+
6+
### Overview
7+
To Be Completed
8+
9+
## Program Structure and Functions
10+
To Be Completed

0 commit comments

Comments
 (0)