Lince - Student Team for Aerospace and Rocketry UC3M - 2023#

Launched at EUROC’23, with a target apogee of 3k meters using a COTS Solid motor. The main parachute deployed at apogee Permission to use flight data given by Saúl Hidalgo, 2024.

These results were extracted out of the flight card:

  1. Team number: 23

  2. Launch date: October 12th, 2023. around 11hrs local time

  3. Simulated apogee: 3284.115 m

  4. Official recorded apogee: 3587 m

The relative error of altitude apogee is only 8.4%

[2]:
%load_ext autoreload
%autoreload 2
[3]:
from rocketpy import Function, Environment, Flight, Rocket, SolidMotor
from rocketpy.motors import SolidMotor

import matplotlib.pyplot as plt

plt.style.use("seaborn-v0_8-colorblind")

Environment#

[4]:
env = Environment(
    date=(2023, 10, 12, 11),
    latitude=39.3897,
    longitude=-8.288964,
    elevation=158,
    datum="WGS84",
    timezone="Portugal",
)

env.set_atmospheric_model(
    type="Reanalysis",
    file="../../data/weather/euroc_2023_all_windows.nc",
    dictionary="ECMWF",
)
env.max_expected_height = 4000
env.info()

Gravity Details

Acceleration of gravity at surface level:    9.8007 m/s²
Acceleration of gravity at   4.000 km (ASL): 9.7888 m/s²


Launch Site Details

Launch Date: 2023-10-12 10:00:00 UTC | 2023-10-12 11:00:00 Portugal
Launch Site Latitude: 39.38970°
Launch Site Longitude: -8.28896°
Reference Datum: WGS84
Launch Site UTM coordinates: 44415.43 W    4373388.31 N
Launch Site UTM zone: 30S
Launch Site Surface Elevation: 158.0 m


Atmospheric Model Details

Atmospheric Model Type: Reanalysis
Reanalysis Maximum Height: 4.000 km
Reanalysis Time Period: from 2023-10-12 08:00:00 to 2023-10-15 18:00:00 utc
Reanalysis Hour Interval: 1 hrs
Reanalysis Latitude Range: From 40.0° to 39.0°
Reanalysis Longitude Range: From -9.0° to -7.0°

Surface Atmospheric Conditions

Surface Wind Speed: 1.21 m/s
Surface Wind Direction: 139.64°
Surface Wind Heading: 319.64°
Surface Pressure: 1000.00 hPa
Surface Temperature: 296.78 K
Surface Air Density: 1.174 kg/m³
Surface Speed of Sound: 345.35 m/s


Earth Model Details

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


Atmospheric Model Plots

../_images/examples_lince_flight_sim_4_1.png

Motor#

[4]:
M1101 = SolidMotor(
    thrust_source="../../data/motors/cesaroni/Cesaroni_M1101.eng",
    burn_time=4.736,
    grain_number=4,
    grain_density=1363,
    grain_initial_inner_radius=0.01,
    grain_outer_radius=0.035,
    grain_initial_height=0.16,
    nozzle_radius=0.0335,
    nozzle_position=0,
    throat_radius=0.0114,
    grain_separation=0.00,
    grains_center_of_mass_position=0.315533,
    dry_inertia=(0, 0, 0),
    center_of_dry_mass_position=1.061,
    dry_mass=0,
)
[5]:
M1101.info(filename=None)
Nozzle Details
Nozzle Radius: 0.0335 m
Nozzle Throat Radius: 0.0114 m

Grain Details
Number of Grains: 4
Grain Spacing: 0.0 m
Grain Density: 1363 kg/m3
Grain Outer Radius: 0.035 m
Grain Inner Radius: 0.01 m
Grain Height: 0.16 m
Grain Volume: 0.001 m3
Grain Mass: 0.771 kg

Motor Details
Total Burning Time: 4.736 s
Total Propellant Mass: 3.083 kg
Structural Mass Ratio: 0.000
Average Propellant Exhaust Velocity: 1686.522 m/s
Average Thrust: 1097.889 N
Maximum Thrust: 1436.62 N at 0.05 s after ignition.
Total Impulse: 5199.605 Ns

../_images/examples_lince_flight_sim_7_1.png

Rocket and Aerodynamic surfaces#

[6]:
LincePreDeploy = Rocket(
    radius=0.052,
    mass=10.6851352,
    inertia=(4.9939475, 4.9939475, 0.0213204),
    center_of_mass_without_motor=1.061,
    power_off_drag="../../data/rockets/lince/drag_coefficient_power_off.csv",
    power_on_drag="../../data/rockets/lince/drag_coefficient_power_on.csv",
    coordinate_system_orientation="tail_to_nose",
)

LincePreDeploy.add_motor(M1101, position=0)

LincePreDeploy.set_rail_buttons(1.54049, 0.13549)

NoseCone = LincePreDeploy.add_nose(length=0.28, kind="vonKarman", position=2.109417)

Fins = LincePreDeploy.add_trapezoidal_fins(
    n=4, span=0.0825, root_chord=0.17, tip_chord=0.0425, position=0.17
)
Tail = LincePreDeploy.add_tail(
    top_radius=0.052, bottom_radius=0.04852, length=0.022, position=0
)
[7]:
Main = LincePreDeploy.add_parachute(
    "Main", cd_s=3.9, trigger="apogee", sampling_rate=150, lag=0, noise=(0, 0, 0)
)
[8]:
LincePreDeploy.draw(filename=None)
../_images/examples_lince_flight_sim_11_0.png
[9]:
LincePostDeploy = Rocket(
    radius=0.052,
    mass=10.3521352,
    inertia=(4.8109919, 4.8109919, 0.0211382),
    center_of_mass_without_motor=0.846961,
    power_off_drag="../../data/rockets/lince/drag_coefficient_power_off.csv",
    power_on_drag="../../data/rockets/lince/drag_coefficient_power_on.csv",
    coordinate_system_orientation="tail_to_nose",
)

LincePostDeploy.add_motor(M1101, position=0)

LincePostDeploy.set_rail_buttons(1.54049, 0.13549)

NoseCone_stage_1 = LincePostDeploy.add_nose(
    length=0.28, kind="vonKarman", position=2.109417
)

Fins_stage_1 = LincePostDeploy.add_trapezoidal_fins(
    n=4, span=0.0825, root_chord=0.17, tip_chord=0.0425, position=0.17
)
Tail_stage_1 = LincePostDeploy.add_tail(
    top_radius=0.052, bottom_radius=0.04852, length=0.022, position=0
)
[10]:
Main_stage_1 = LincePostDeploy.add_parachute(
    "Main", cd_s=3.9, trigger="apogee", sampling_rate=150, lag=0, noise=(0, 0, 0)
)
[11]:
LincePostDeploy.draw(filename=None)
../_images/examples_lince_flight_sim_14_0.png

Payload#

[12]:
Payload = Rocket(
    radius=0.052,
    mass=0.333,
    inertia=(0.000465, 0.000465, 0.000182),
    center_of_mass_without_motor=0.98551,
    power_off_drag=0.5,
    power_on_drag=0.5,
    coordinate_system_orientation="tail_to_nose",
)

Payload.set_rail_buttons(0.47949, -0.92551)
[12]:
<rocketpy.rocket.aero_surface.rail_buttons.RailButtons at 0x1a56b0e7430>
[13]:
Main_stage_2 = Payload.add_parachute(
    "Main", cd_s=0.159248, trigger="apogee", sampling_rate=150, lag=0, noise=(0, 0, 0)
)

Flight Simulation#

[14]:
flight = Flight(
    rocket=LincePreDeploy,
    environment=env,
    inclination=84,
    heading=133,
    rail_length=12,
    max_time=399.35159,
)
flight.prints.impact_conditions()

Impact Conditions

Time of impact: 399.352 s
X impact: 0.000 m
Y impact: 0.000 m
Altitude impact: 674.867 m (ASL) | 516.867 m (AGL)
Latitude: 39.3945220°
Longitude: -8.2730871°
Vertical velocity at impact: 0.000 m/s
Number of parachutes triggered until impact: 1
[15]:
flight.prints.apogee_conditions()
flight.plots.trajectory_3d(filename=None)

Apogee State

Apogee Time: 24.721 s
Apogee Altitude: 3442.107 m (ASL) | 3284.107 m (AGL)
Apogee Freestream Speed: 26.718 m/s
Apogee X position: 562.861 m
Apogee Y position: -558.884 m
Apogee latitude: 39.3846725°
Apogee longitude: -8.2824133°
../_images/examples_lince_flight_sim_20_1.png
[16]:
flight_post_deploy = Flight(
    rocket=LincePostDeploy,
    environment=env,
    inclination=80,
    heading=90,
    rail_length=12,
    initial_solution=flight.solution[-2],
)
[17]:
flight_post_deploy.prints.apogee_conditions()
flight_post_deploy.plots.trajectory_3d(filename=None)

Apogee State

Apogee Time: 396.931 s
Apogee Altitude: 691.766 m (ASL) | 528.631 m (AGL)
Apogee Freestream Speed: 6.963 m/s
Apogee X position: 1362.857 m
Apogee Y position: 528.676 m
Apogee latitude: 39.3944545°
Apogee longitude: -8.2731005°
../_images/examples_lince_flight_sim_22_1.png
[18]:
flight_payload = Flight(
    rocket=Payload,
    environment=env,
    inclination=80,
    heading=90,
    rail_length=12,
    initial_solution=flight.solution[-2],
)
[19]:
flight_payload.prints.apogee_conditions()
flight_payload.plots.trajectory_3d(filename=None)

Apogee State

Apogee Time: 396.953 s
Apogee Altitude: 691.635 m (ASL) | 528.631 m (AGL)
Apogee Freestream Speed: 6.963 m/s
Apogee X position: 1362.857 m
Apogee Y position: 528.676 m
Apogee latitude: 39.3944545°
Apogee longitude: -8.2731005°
../_images/examples_lince_flight_sim_24_1.png

Data analysis#

[20]:
from rocketpy.simulation.flight_data_importer import FlightDataImporter


columns_map = {
    "ts": "time",
    "filtered_altitude_AGL": "altitude",
    "filtered_acceleration": "az",
}

cots_altimeter_flight = FlightDataImporter(
    name="COTS Altimeter Flight",
    paths="../../data/rockets/lince/main_data.csv",
    columns_map=columns_map,
    units=None,
    interpolation="linear",
    extrapolation="zero",
    delimiter=",",
    encoding="utf-8",
)
The following attributes were create and are now available to be used:  ['time', 'altitude', 'az']
[21]:
Function.compare_plots(
    [
        (flight.altitude, "RocketPy"),
        (cots_altimeter_flight.altitude, "COTS Altimeter"),
    ],
    title="Altitude Comparison",
    xlabel="Time (s)",
    ylabel="Altitude (m)",
    filename=None,
)

Function.compare_plots(
    [
        (flight.az, "RocketPy"),
        (cots_altimeter_flight.az, "COTS Altimeter"),
    ],
    title="Vertical Velocity Comparison",
    xlabel="Time (s)",
    ylabel="Velocity (m/s)",
    filename=None,
)
../_images/examples_lince_flight_sim_27_0.png
../_images/examples_lince_flight_sim_27_1.png