|
| Optional | airframe_mass = Field(default=None, gt=0, description="Airframe mass (fuselage, fins, nosecone, avionics, payload) - NO propulsion [kg]") |
| Optional | engine_mass = Field(default=None, gt=0, description="Engine + plumbing mass (chamber, nozzle, injector, valves, ALL fittings & lines) [kg]") |
| Optional | lox_tank_structure_mass = Field(default=None, gt=0, description="Empty LOX tank only (walls, no fittings) [kg]") |
| Optional | fuel_tank_structure_mass = Field(default=None, gt=0, description="Empty fuel tank only (walls, no fittings) [kg]") |
| float | engine_cm_offset = Field(default=0.15, ge=0, description="Height of engine+plumbing CM above nozzle exit [m]. Typical: 0.1-0.3m.") |
| Optional | propulsion_dry_mass = Field(default=None, gt=0, description="COMPUTED: Total propulsion dry mass (engine + tanks) [kg]") |
| float | propulsion_cm_offset = Field(default=0.3, description="COMPUTED: Propulsion system CM above nozzle exit [m]") |
| Optional | copv_dry_mass = Field(default=None, gt=0, description="COPV tank structure mass (tank walls only, no pressurant gas) [kg]") |
| List | inertia = Field(description="AIRFRAME inertia only (without motor/propulsion), relative to airframe CM [Ixx, Iyy, Izz] [kg·m²]. Motor inertia is added separately by RocketPy from propulsion_dry_mass.") |
| float | radius = Field(gt=0, description="Rocket body radius (outer diameter / 2) [m]") |
| Optional | rocket_length = Field(default=None, gt=0, description="Total rocket length from tail to nose tip [m]. Used for MoI estimation.") |
| float | motor_position = Field(default=0.0, description="Nozzle exit position from rocket tail (z=0 at tail, positive toward nose) [m]") |
| Optional | fins = Field(default=None, description="Fins configuration") |
| str | nose_kind = Field(default="vonKarman", description="Nosecone profile (RocketPy): vonKarman | lvhaack | ogive | conical | …") |
| float | nose_fineness_ratio = Field(default=4.5, gt=0, description="Nose length / body diameter (von Kármán ~4.5:1 is near-optimal transonic). Used when nose_length is unset.") |
| Optional | nose_length = Field(default=None, gt=0, description="Explicit nosecone length [m]. Overrides nose_fineness_ratio when set.") |
| float | avionics_payload_length_m = Field(default=4.0, ge=0, description="Length of avionics/payload/recovery section ABOVE the propulsion stack, before the nosecone [m].") |
| Optional | drag_curve_power_off = Field(default=None, description="Axial Cd with the motor off, [[Mach, Cd], ...]. Replaces the build-up; needs drag_curve_power_on and drag_curve_source.") |
| Optional | drag_curve_power_on = Field(default=None, description="Axial Cd while thrusting, [[Mach, Cd], ...]. Give the power-off table again if the source has only one.") |
| Optional | drag_curve_source = Field(default=None, description="Where the drag tables came from: tool and version, file, test.") |
| float | surface_roughness_m = Field(default=60e-6, ge=0, description="Skin roughness height for the drag build-up [m]. Default 60 um is OpenRocket's default finish, 'regular paint' (Niskanen 2013 table 3.2); 20 um smooth paint, 0 hydraulically smooth.") |
| float | fin_thickness_m = Field(default=0.003, gt=0, description="Fin thickness for the drag build-up [m]. Default 3 mm is OpenRocket's default fin, not the drawing.") |
| Literal | fin_profile = Field(default="square", description="Fin edge profile for the drag build-up (Niskanen 2013 sec. 3.4.4). Default 'square' is OpenRocket's default, not the drawing.") |
| Optional | rail_button_upper_pos_m = Field(default=None, description="Forward rail button, distance from the tail [m]. With the lower button set, rail exit is when this one leaves the rail; unset, the full rail length is flown.") |
| Optional | rail_button_lower_pos_m = Field(default=None, description="Aft rail button, distance from the tail [m].") |
| Optional | mass = Field(default=None, gt=0, description="LEGACY: Airframe mass. Use airframe_mass instead.") |
| Optional | cm_wo_motor = Field(default=None, description="LEGACY: CM without motor. Now auto-calculated from airframe_mass and propulsion positions.") |
| Optional | dry_mass = Field(default=None, gt=0, description="LEGACY: Unused field.") |
| Optional | motor_inertia = Field(default=None, description="LEGACY: Motor inertia. Now estimated from propulsion_dry_mass.") |
| Optional | motor = Field(default=None, description="LEGACY: Motor config. Use propulsion_dry_mass instead.") |
Rocket configuration for flight simulation.
NEW Mass Model (recommended):
- airframe_mass: Rocket body without propulsion (fuselage, fins, nosecone, avionics, payload)
- engine_mass: Engine + ALL plumbing (chamber, nozzle, injector, valves, fittings, lines)
- lox_tank_structure_mass: Empty LOX tank only (walls, no fittings)
- fuel_tank_structure_mass: Empty fuel tank only (walls, no fittings)
- copv_dry_mass: Empty COPV tank only (walls, no pressurant gas)
- engine_cm_offset: Height of engine CM above nozzle exit
- rocket_length: Total rocket length (tail to nose tip) for MoI estimation
propulsion_dry_mass and propulsion_cm_offset are COMPUTED from the above.
Total dry mass = airframe_mass + engine_mass + lox_tank_structure_mass + fuel_tank_structure_mass + copv_dry_mass
Total wet mass = dry mass + lox_tank.mass + fuel_tank.mass (propellants) + press_tank.initial_gas_mass
LEGACY fields (mass, motor.dry_mass) still supported for backward compatibility.
Definition at line 1488 of file config_schemas.py.