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:
Team number:
23
Launch date:
October 12th, 2023. around 11hrs local time
Simulated apogee:
3284.115 m
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

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

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)

[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)

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°

[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°

[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°

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,
)

