Halcyon - Aerospace Team Graz - 2023#
Launched at EuRoC’23, allowing the team to become the Overall Champions. Permission to use flight data given by Dorothea Krasser, 2024.
These results were extracted out of the flight card:
Team number:
1
Launch date:
October 13th, 2023. around 14hrs local time
Last simulated apogee before flight:
3163 m
(this value differs from the simulation shown below because of the updates to rocketpy software)Official recorded apogee:
3450 m
The relative error of altitude apogee is only 9.1%
[8]:
%load_ext autoreload
%autoreload 2
The autoreload extension is already loaded. To reload it, use:
%reload_ext autoreload
[9]:
from rocketpy import Function, Environment, Flight, Rocket
from rocketpy.motors import CylindricalTank, Fluid, HybridMotor
from rocketpy.motors.tank import MassFlowRateBasedTank
import datetime
import matplotlib.pyplot as plt
plt.style.use("seaborn-v0_8-colorblind")
[10]:
tomorrow = datetime.date(2023, 10, 13) + datetime.timedelta(days=1)
Env = Environment(
latitude=39.388692,
longitude=-8.287814,
elevation=130,
)
The team preferred to set a custom atmospheric model. However, for better resolution, this examples will only run the windy atmosphere that was registered in windy.
[11]:
Env.set_date((tomorrow.year, tomorrow.month, tomorrow.day, 12))
Env.set_atmospheric_model(
type="custom_atmosphere",
pressure=None,
temperature=300,
wind_u=[(0, 8), (1000, 10)],
wind_v=[(0, 0), (500, 0), (1600, 0)],
)
Env.max_expected_height = 5000
[12]:
Env.info()
Gravity Details
Acceleration of gravity at surface level: 9.8008 m/s²
Acceleration of gravity at 5.000 km (ASL): 9.7857 m/s²
Launch Site Details
Launch Date: 2023-10-14 12:00:00 UTC
Launch Site Latitude: 39.38869°
Launch Site Longitude: -8.28781°
Reference Datum: SIRGAS2000
Launch Site UTM coordinates: 44507.97 W 4373270.52 N
Launch Site UTM zone: 30S
Launch Site Surface Elevation: 130.0 m
Atmospheric Model Details
Atmospheric Model Type: custom_atmosphere
custom_atmosphere Maximum Height: 5.000 km
Surface Atmospheric Conditions
Surface Wind Speed: 8.29 m/s
Surface Wind Direction: 270.00°
Surface Wind Heading: 90.00°
Surface Pressure: 997.99 hPa
Surface Temperature: 300.00 K
Surface Air Density: 1.159 kg/m³
Surface Speed of Sound: 347.22 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
Environment#
[13]:
env = Environment(
gravity=9.80665,
date=(2023, 10, 13, 14),
latitude=39.388692,
longitude=-8.287814,
elevation=130,
datum="WGS84",
timezone="Portugal",
)
# env.set_atmospheric_model(type="Windy", file="ECMWF")
# env.max_expected_height = 4000
# env.info()
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.8066 m/s²
Acceleration of gravity at 4.000 km (ASL): 9.8066 m/s²
Launch Site Details
Launch Date: 2023-10-13 13:00:00 UTC | 2023-10-13 14:00:00 Portugal
Launch Site Latitude: 39.38869°
Launch Site Longitude: -8.28781°
Reference Datum: WGS84
Launch Site UTM coordinates: 44507.97 W 4373270.52 N
Launch Site UTM zone: 30S
Launch Site Surface Elevation: 130.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: 160.86 m/s
Surface Wind Direction: 340.86°
Surface Wind Heading: 3.80°
Surface Pressure: 1000.00 hPa
Surface Temperature: 296.79 K
Surface Air Density: 1.174 kg/m³
Surface Speed of Sound: 345.36 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#
[14]:
oxidizer_liq = Fluid(name="N2O_l", density=960)
oxidizer_gas = Fluid(name="N2O_g", density=1.9277)
tank_shape = CylindricalTank(70 / 1000, 320 / 1000)
oxidizer_tank = MassFlowRateBasedTank(
name="oxidizer_tank",
geometry=tank_shape,
flux_time=(5),
initial_liquid_mass=4.2,
initial_gas_mass=0,
liquid_mass_flow_rate_in=0,
liquid_mass_flow_rate_out=4.2 / 5,
gas_mass_flow_rate_in=0,
gas_mass_flow_rate_out=0,
liquid=oxidizer_liq,
gas=oxidizer_gas,
)
hybrid_motor = HybridMotor(
thrust_source="../../data/rockets/astg/engine_Halcyon_4thHotfire.eng",
dry_mass=10670 / 1000,
dry_inertia=(1.668, 1.668, 0.026),
center_of_dry_mass_position=780 / 1000,
burn_time=5,
reshape_thrust_curve=False,
grain_number=1,
grain_separation=0,
grain_outer_radius=43 / 1000,
grain_initial_inner_radius=22.5 / 1000,
grain_initial_height=310 / 1000,
grain_density=920,
nozzle_radius=0.0141,
throat_radius=0.00677,
interpolation_method="linear",
grains_center_of_mass_position=385 / 1000,
coordinate_system_orientation="nozzle_to_combustion_chamber",
)
hybrid_motor.add_tank(tank=oxidizer_tank, position=934.75 / 1000)
[15]:
hybrid_motor.info()
Nozzle Details
Outlet Radius: 0.0141 m
Throat Radius: 0.00677 m
Outlet Area: 0.000625 m²
Throat Area: 0.000144 m²
Position: 0 m
Grain Details
Number of Grains: 1
Grain Spacing: 0 m
Grain Density: 920 kg/m3
Grain Outer Radius: 0.043 m
Grain Inner Radius: 0.0225 m
Grain Height: 0.31 m
Grain Volume: 0.001 m3
Grain Mass: 1.203 kg
Motor Details
Total Burning Time: 5 s
Total Propellant Mass: 5.403 kg
Average Propellant Exhaust Velocity: 1805.600 m/s
Average Thrust: 1951.160 N
Maximum Thrust: 2127.473 N at 0.2503 s after ignition.
Total Impulse: 9755.800 Ns
Rocket and Aerodynamic surfaces#
[17]:
HALCYON = Rocket(
radius=152.4 / 2000,
mass=14613 / 1000,
inertia=(24.56, 24.56, 70.074),
center_of_mass_without_motor=2344 / 1000,
power_off_drag="../../data/rockets/astg/DragCoeffOR_off.csv",
power_on_drag="../../data/rockets/astg/DragCoeffOR_on.csv",
coordinate_system_orientation="tail_to_nose",
)
HALCYON.set_rail_buttons(2.808, 1.549)
HALCYON.add_motor(hybrid_motor, position=20 / 1000)
[18]:
NoseCone = HALCYON.add_nose(length=0.46, kind="vonKarman", position=3556 / 1000)
FinSet = HALCYON.add_trapezoidal_fins(
n=4,
span=0.125,
root_chord=0.247,
tip_chord=0.045,
position=0.263,
)
Tail = HALCYON.add_tail(
top_radius=152.4 / 2000, bottom_radius=0.0496, length=0.254, position=0.254
)
[19]:
Main = HALCYON.add_parachute(
name="Main",
cd_s=9.621,
trigger="apogee",
sampling_rate=100,
lag=5,
)
Flight Simulation Data#
[20]:
test_flight = Flight(
rocket=HALCYON, environment=env, inclination=85, heading=90, rail_length=12
)
[21]:
test_flight.prints.apogee_conditions()
test_flight.plots.trajectory_3d()
Apogee State
Apogee Time: 26.363 s
Apogee Altitude: 3342.856 m (ASL) | 3212.856 m (AGL)
Apogee Freestream Speed: 19.943 m/s
Apogee X position: 765.047 m
Apogee Y position: -351.735 m
Apogee latitude: 39.3855277°
Apogee longitude: -8.2789101°
Data analysis#
[23]:
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/astg/altimeter_halcyon.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']
[24]:
Function.compare_plots(
[
(test_flight.altitude, "RocketPy"),
(cots_altimeter_flight.altitude, "COTS Altimeter"),
],
title="Altitude Comparison",
xlabel="Time (s)",
ylabel="Altitude (m)",
)
[26]:
columns_map = {
"ts": "time",
"latitude": "latitude",
"longitude": "longitude",
}
cots_gnss_flight = FlightDataImporter(
name="COTS GNSS Flight",
paths="../../data/rockets/astg/gnss_halcyon.csv",
columns_map=columns_map,
interpolation="linear",
extrapolation="zero",
delimiter=",",
encoding="utf-8",
)
The following attributes were create and are now available to be used: ['time', 'latitude', 'longitude']
[27]:
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)",
)