Juno III - Projeto Jupiter 2023#

Launched at Spaceport America Cup 2023 edition. Projeto Jupiter is a rocket design team from the University of São Paulo, Brazil. Permission to use flight data given by Juliana Carloni, 2023.

These results were extracted out of the flight card:

  1. Team number: 138

  2. Launch date: June 23rd, 2023. around 17hrs local time

  3. Last simulated apogee before flight: 3026.054 m

  4. Official recorded apogee: 3213 m

If we divided the simulation error (3213 - 3026.054) and divide by the actual apogee, we have a relative error of 8.08%

[3]:
%load_ext autoreload
%autoreload 2
The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload
[4]:
from rocketpy import Function, Rocket, SolidMotor, Flight, Environment
from rocketpy.simulation.flight_data_importer import FlightDataImporter

import matplotlib.pyplot as plt

plt.style.use("seaborn-v0_8-colorblind")
[5]:
env = Environment(
    latitude=32.939377,
    longitude=-106.911986,
    elevation=1480,
)
[6]:
env.set_date(date=(2023, 6, 23, 17), timezone="America/Denver")

env.set_atmospheric_model(
    type="Reanalysis",
    file="../../data/weather/spaceport_america_pressure_levels_2023_hourly.nc",
    dictionary="ECMWF",
)
env.max_expected_height = 6000
[7]:
env.info()

Gravity Details

Acceleration of gravity at surface level:    9.7910 m/s²
Acceleration of gravity at   6.000 km (ASL): 9.7771 m/s²


Launch Site Details

Launch Date: 2023-06-23 23:00:00 UTC | 2023-06-23 17:00:00 America/Denver
Launch Site Latitude: 32.93938°
Launch Site Longitude: -106.91199°
Reference Datum: SIRGAS2000
Launch Site UTM coordinates: 321254.52 W    3646188.36 N
Launch Site UTM zone: 13S
Launch Site Surface Elevation: 1480.0 m


Atmospheric Model Details

Atmospheric Model Type: Reanalysis
Reanalysis Maximum Height: 6.000 km
Reanalysis Time Period: From  2023-06-19 00:00:00  to  2023-06-24 23:00:00  UTC
Reanalysis Hour Interval: 1  hrs
Reanalysis Latitude Range: From  36.75 ° To  29.0 °
Reanalysis Longitude Range: From  -108.87999725341797 ° To  -105.12999725341797 °


Surface Atmospheric Conditions

Surface Wind Speed: 10.77 m/s
Surface Wind Direction: 244.23°
Surface Wind Heading: 64.23°
Surface Pressure: 849.92 hPa
Surface Temperature: 306.95 K
Surface Air Density: 0.965 kg/m³
Surface Speed of Sound: 351.22 m/s


Earth Model Details

Earth Radius at Launch site: 6371.85 km
Semi-major Axis: 6378.14 km
Semi-minor Axis: 6356.75 km
Flattening: 0.0034


Atmospheric Model Plots

../_images/examples_juno3_flight_sim_5_1.png
[8]:
mandioca = SolidMotor(
    thrust_source="../../data/motors/mandioca/thrustCurve.csv",
    reshape_thrust_curve=(5.8, 8800),
    grain_number=5,
    grain_separation=0.006,
    grain_outer_radius=0.0465,
    grain_initial_inner_radius=0.016,
    grain_initial_height=0.156,
    grain_density=1748.9,
    nozzle_radius=0.0335,
    throat_radius=0.0114,
    interpolation_method="linear",
    dry_mass=0.00000000001,
    grains_center_of_mass_position=-0.683,
    center_of_dry_mass_position=-0.683,
    dry_inertia=(0.0000000000001, 0.0000000000001, 0.0000000000001),
    nozzle_position=-1.294,
)
mandioca.draw()
../_images/examples_juno3_flight_sim_6_0.png
[9]:
mandioca.info()
Nozzle Details
Nozzle Radius: 0.0335 m
Nozzle Throat Radius: 0.0114 m

Grain Details
Number of Grains: 5
Grain Spacing: 0.006 m
Grain Density: 1748.9 kg/m3
Grain Outer Radius: 0.0465 m
Grain Inner Radius: 0.016 m
Grain Height: 0.156 m
Grain Volume: 0.001 m3
Grain Mass: 1.634 kg

Motor Details
Total Burning Time: 5.8 s
Total Propellant Mass: 8.169 kg
Average Propellant Exhaust Velocity: 1077.193 m/s
Average Thrust: 1517.241 N
Maximum Thrust: 2472.691294388508 N at 3.26701244813278 s after ignition.
Total Impulse: 8800.000 Ns

../_images/examples_juno3_flight_sim_7_1.png
[10]:
# this drag curve comes from RASAero II
drag_curve = "../../data/juno3/drag_curve.csv"

juno = Rocket(
    radius=0.0655,
    mass=24.05,
    inertia=(15.07, 15.07, 0.067),
    power_off_drag=drag_curve,
    power_on_drag=drag_curve,
    center_of_mass_without_motor=0,
    coordinate_system_orientation="tail_to_nose",
)
juno.add_motor(mandioca, 0)
[11]:
juno.add_nose(
    length=0.565,
    kind="vonKarman",
    position=1.477,
).draw()
../_images/examples_juno3_flight_sim_9_0.png
[12]:
juno.add_trapezoidal_fins(
    n=4,
    root_chord=0.20,
    tip_chord=0.12,
    span=0.130,
    position=-0.928,
    cant_angle=0,
    airfoil=(Function([[0, 0.0002], [2, 0.3320], [4, 0.6335], [6, 0.6877]]), "degrees"),
).draw()
../_images/examples_juno3_flight_sim_10_0.png
[13]:
tail = juno.add_tail(
    top_radius=0.0655, bottom_radius=0.0535, length=0.068, position=-1.226
)
[14]:
rail_buttons = juno.set_rail_buttons(
    upper_button_position=0.24,
    lower_button_position=-1.17,
    angular_position=45,
)
[15]:
drogue = juno.add_parachute(
    "Drogue",
    cd_s=0.885,
    trigger="apogee",
    sampling_rate=105,
    noise=(0, 8.3, 0.5),
    lag=0.5,
)
[16]:
factor = 0.38 / juno.power_off_drag(0.6)  # From CFD analysis

juno.power_on_drag *= factor
juno.power_off_drag *= factor
[17]:
juno.info()
juno.draw()

Inertia Details

Rocket Mass: 24.050 kg (without motor)
Rocket Dry Mass: 24.050 kg (with unloaded motor)
Rocket Loaded Mass: 32.219 kg (with loaded motor)
Rocket Inertia (with unloaded motor) 11: 15.070 kg*m2
Rocket Inertia (with unloaded motor) 22: 15.070 kg*m2
Rocket Inertia (with unloaded motor) 33: 0.067 kg*m2
Rocket Inertia (with unloaded motor) 12: 0.000 kg*m2
Rocket Inertia (with unloaded motor) 13: 0.000 kg*m2
Rocket Inertia (with unloaded motor) 23: 0.000 kg*m2

Geometrical Parameters

Rocket Maximum Radius: 0.0655 m
Rocket Frontal Area: 0.013478 m2

Rocket Distances
Rocket Center of Dry Mass - Center of Mass without Motor: 0.000 m
Rocket Center of Dry Mass - Nozzle Exit: 1.294 m
Rocket Center of Dry Mass - Center of Propellant Mass: 0.683 m
Rocket Center of Mass - Rocket Loaded Center of Mass: 0.173 m


Aerodynamics Lift Coefficient Derivatives

Nose Cone Lift Coefficient Derivative: 2.000/rad
Fins Lift Coefficient Derivative: 9.797/rad
Tail Lift Coefficient Derivative: -0.666/rad

Center of Pressure

Nose Cone Center of Pressure position: 1.195 m
Fins Center of Pressure position: -1.006 m
Tail Center of Pressure position: -1.259 m

Stability

Center of Mass position (time=0): -0.173 m
Initial Static Margin (mach=0, time=0): 3.221 c
Final Static Margin (mach=0, time=burn_out): 4.543 c
Rocket Center of Mass (time=0) - Center of Pressure (mach=0): 0.422 m


Parachute Details

Parachute Drogue with a cd_s of 0.8850 m2
Ejection signal trigger: At Apogee
Ejection system refresh rate: 105.000 Hz
Time between ejection signal is triggered and the parachute is fully opened: 0.5 s

../_images/examples_juno3_flight_sim_15_1.png
[18]:
test_flight = Flight(
    rocket=juno,
    environment=env,
    inclination=85,
    heading=105,
    rtol=1e-6,
    atol=1e-6,
    max_time=600,
    rail_length=5.2,
)
[19]:
test_flight.prints.out_of_rail_conditions()
test_flight.prints.burn_out_conditions()
test_flight.prints.apogee_conditions()
test_flight.prints.impact_conditions()
test_flight.plots.trajectory_3d()

Rail Departure State

Rail Departure Time: 0.892 s
Rail Departure Velocity: 15.692 m/s
Rail Departure Stability Margin: 3.305 c
Rail Departure Angle of Attack: 35.750°
Rail Departure Thrust-Weight Ratio: 5.212
Rail Departure Reynolds Number: 1.241e+05

Burn out State

Burn out time: 5.800 s
Altitude at burn out: 750.976 m (AGL)
Rocket velocity at burn out: 243.882 m/s
Freestream velocity at burn out: 247.849 m/s
Mach Number at burn out: 0.714
Kinetic energy at burn out: 7.152e+05 J

Apogee State

Apogee Altitude: 4485.553 m (ASL) | 3005.553 m (AGL)
Apogee Time: 26.463 s
Apogee Freestream Speed: 60.736 m/s

Impact Conditions

X Impact: 608.608 m
Y Impact: -148.294 m
Latitude: 32.9380434°
Longitude: -106.9054652°
Time of Impact: 150.181 s
Velocity at Impact: -23.531 m/s
../_images/examples_juno3_flight_sim_17_1.png
[32]:
columns_map = {
    "time": "time",
    "altitude": "altitude",
    "velocity": "vz",
}

cots_altimeter_flight = FlightDataImporter(
    name="COTS Altimeter Flight",
    paths="../../data/juno3/cots_altimeter.csv",
    columns_map=columns_map,
    units=None,
    interpolation="linear",
    extrapolation="zero",
    separator=",",
    encoding="utf-8",
)
The following attributes were create and are now available to be used:  ['time', 'altitude', 'vz', 'static_pressure']
[37]:
Function.compare_plots(
    [
        (test_flight.altitude, "RocketPy"),
        (cots_altimeter_flight.altitude, "COTS Altimeter"),
    ],
    title="Altitude Comparison",
    xlabel="Time (s)",
    ylabel="Altitude (m)",
    lower=0,
    upper=30,
)
Function.compare_plots(
    [
        (test_flight.vz, "RocketPy"),
        (cots_altimeter_flight.vz, "COTS Altimeter"),
    ],
    title="Vertical Velocity Comparison",
    xlabel="Time (s)",
    ylabel="Velocity (m/s)",
    lower=0,
    upper=30,
)
../_images/examples_juno3_flight_sim_19_0.png
../_images/examples_juno3_flight_sim_19_1.png
[58]:
columns_map = {
    "ALT": "z",
    "VERTV": "vz",
    "LAT": "latitude",
    "LON": "longitude",
}
units = {
    "ALT": "ft",
    "VERTV": "ft/s",
}

cots_gnss_flight = FlightDataImporter(
    name="COTS GNSS Flight",
    paths="../../data/juno3/cots_GNSS.csv",
    columns_map=columns_map,
    units=units,
    interpolation="linear",
    extrapolation="zero",
    separator=",",
    encoding="utf-8",
)
Attribute 'z' converted from ft to SI
Attribute 'vz' converted from ft/s to SI
The following attributes were create and are now available to be used:  ['z', 'vz', 'latitude', 'longitude']
[59]:
Function.compare_plots(
    [(test_flight.latitude, "RocketPy"), (cots_gnss_flight.latitude, "Actual - GNSS")],
    title="Latitude Comparison",
    xlabel="Time (s)",
    ylabel="Latitude (deg)",
)
Function.compare_plots(
    [
        (test_flight.longitude, "RocketPy"),
        (cots_gnss_flight.longitude, "Actual - GNSS"),
    ],
    title="Longitude Comparison",
    xlabel="Time (s)",
    ylabel="Longitude (deg)",
)
Function.compare_plots(
    [(test_flight.z, "RocketPy"), (cots_gnss_flight.z, "Actual - GNSS")],
    title="Altitude ASL Comparison",
    xlabel="Time (s)",
    ylabel="Altitude ASL (m)",
)
../_images/examples_juno3_flight_sim_21_0.png
../_images/examples_juno3_flight_sim_21_1.png
../_images/examples_juno3_flight_sim_21_2.png