The bug I'm experiencing is I am trying to access the values of Flight.x, Flight.y and Flight.z. I checked the documentation and Flight.x and Flight.z are indexed differently to Flight.y. I want to be able to index the x,y, and z coordinates of the rocket at a certain point in time (17.1 seconds). This is because then the second stage will launch.
However, when I try to even use display(type(Flight_stage1.x))
or anything similar, I get the error message:
KeyError: 'x'
ValueError: array must not contain infs or NaNs
I tried writing a script to turn infs and NaNs to zero but it seems to be a decorator format which I am not used to.
Here is the code I tried to run, which works up until display(type(Flight_stage1.y))
:
(You'll have to use a thrust curve file in your directory!)
import math
import datetime
Env1 = Environment(latitude=67.89325597913002, longitude=21.065756056273834, elevation=300)
tomorrow = datetime.date.today() + datetime.timedelta(days=1)
Env1.set_date((tomorrow.year, tomorrow.month, tomorrow.day, 12))
Env1.set_atmospheric_model(type="Ensemble", file="GEFS")
Motor1 = SolidMotor(
thrust_source=r"...Python Modelling\Thrust curves\Motor.eng",
dry_mass=260, # kg (gross mass - propellant mass)
dry_inertia=(261.89, 261.89, 10.98),
nozzle_radius=0.23957143, # radius of the nozzle outlet in meteres
grain_number=1,
grain_density=1750,
grain_outer_radius=0.2795,
grain_initial_inner_radius=0.07985714,
grain_initial_height=2.6072,
grain_separation=0,
grains_center_of_mass_position= 1.445,
center_of_dry_mass_position=0,
nozzle_position=3.44,
burn_time=13.1,
throat_radius=0.07985714,
coordinate_system_orientation="combustion_chamber_to_nozzle",
)
# Rocket
rocket_stage1 = Rocket(
radius=0.483,
mass=555.736,
inertia=(2688.81, 2688.81, 36.97),
power_off_drag=r"...\Python Modelling\Drag curves\Motor1PowerOffDragCurve.eng",
power_on_drag=r"...\Python Modelling\Drag curves\Motor1PowerOnDragCurve.eng",
center_of_mass_without_motor=3.88, # m
coordinate_system_orientation="nose_to_tail",
)
rocket_stage1.add_motor(Motor1, position=4.893)
nose_cone = rocket_stage1.add_nose(length=2.49, kind="ogive", position=0)
fin_set_1 = rocket_stage1.add_trapezoidal_fins(
n=4,
root_chord=0.865,
tip_chord=0.302,
span=0.352,
position=3.985,
sweep_length = 0.707
)
# Defining triggers for parachutes
def drogueTrigger(p, y, x, z, already_triggered=False):
if already_triggered:
return False
if y < 0:
return True
return False
#return True if y < 0 else False # Less than zero, so rocket is coming back down from apogee
def mainTrigger(p, y, x, z, already_triggered=False): # Extra arguments are given because trigger is passing a lot through
if already_triggered:
return False
if y < 0 and y < 1000:
return True
return False
#print(type(y))
#print(y)
#return True if y < 0 and y < 1000 else False # Parachute within 1km from ground
Main = rocket_stage1.add_parachute('Main',
cd_s=10.0,
trigger=mainTrigger,
sampling_rate=105,
lag=1.5,
noise=(0, 8.3, 0.5))
Drogue = rocket_stage1.add_parachute('Drogue',
cd_s=1.0,
trigger=drogueTrigger,
sampling_rate=105,
lag=1.5,
noise=(0, 8.3, 0.5))
# Parameters for first stage rocket flight
Flight_stage1 = Flight(rocket=rocket_stage1, environment=Env1, inclination=85, heading=0 ,verbose=True, rail_length=10)
ignition_delay = 4
tsecond_stage = RedKite.burn_duration + ignition_delay
display(type(Flight_stage1.y))
I would expect the type of Flight_stage1.y to be listed. I want to be able to call Flight.y(tsecond_stage)
for example, to see what the y value is at the time t=tsecond_stage
.
I feel like this should be a simple fix! Any support on this I can get would be much appreciated.