<<

Project Bellerophon 644

A.6.0 Trajectory

A.6.1 Introduction The trajectory of the launch vehicle is critical to mission success. Without a sub-optimal trajectory, the amount of ∆V required is very large and increases the cost of the vehicle. The first thing that we do to understand the problem is to define the assumptions of our model. The trajectory group is mostly concerned with the translational degrees of freedom of the vehicle and leaves the attitude of the launch vehicle to the D&C group. Therefore, in all of our analysis, we assume that the launch vehicle is a point . Our second main assumption is that all of the acting on the vehicle are in the same plane, effectively reducing the translational degrees of freedom of the vehicle to two. Once the assumptions are defined, we derive the model and the equations of of the vehicle for each stage.

With the for the vehicle defined, the design moved to the creation of the steering laws. At this point, the design split into two distinct sections: one for ground and balloon launch and another for aircraft launch. This separation is due to the different initial conditions for each launch type. Once the steering laws are formed, the angles at the end of each stage are optimized to produce the best nominal trajectory for each launch type (ground, balloon and aircraft).

Due to the nature of trajectory optimization and design, all members of the trajectory group worked on all aspects of the problem. Even though each member contributed to every section, the sections are written by the trajectory group member that worked the most on that aspect of the design. The following sections go into the details of the trajectory group’s work.

Author: Elizabeth Harkness Project Bellerophon 645

A.6.2 Design Methods

A.6.2.1 Equations of Motion The first step to developing the equations of motion for the launch vehicle is setting up the appropriate coordinate systems. A complete set of coordinate systems is displayed in Fig.

A.6.2.1.1. We start with the ̂ frame. The ̂ frame is fixed in the , and rotates with the

Earth. The unit vector ̂ lies along the Earth’s axis of rotation. Next we need an intermediate coordinate frame, the frame. The frame is situated such that lies along ̂; is offset from ̂ by angle θ. Angle θ is analogous to longitude. The final coordinate frame is the frame. This frame is situated such that lies along ; is offset from by angle Φ. Angle Φ is analogous to latitude.

Fig.A.6.2.1.1: Coordinate frames used for developing equations of motion. (Amanda Briden)

We need to derive the transformation matrix to get from the frame to the ̂ frame. To do this,

we first define transformation matrices which represent the simple rotation from ̂ to (Eq. (A.6.2.1.1)), and from to (Eq. (A.6.2.1.2)). After we define these two transformation matrices, we can combine Eqs. (A.6.2.1.1) and (A.6.2.1.2) to get the desired transformation matrix in Eq. (A.6.2.1.3).

Author: Brad Ferris Project Bellerophon 646

⎡ax ⎤ ⎡ cos(θ ) sin(θ ) 0⎤⎡ex ⎤ ⎢a ⎥ = ⎢− sin(θ ) cos(θ ) 0⎥⎢e ⎥ (A.6.2.1.1) ⎢ y ⎥ ⎢ ⎥⎢ y ⎥ ⎣⎢az ⎦⎥ ⎣⎢ 0 0 1⎦⎥⎣⎢ez ⎦⎥

⎡bφ ⎤ ⎡cos(φ) 0 − sin(φ)⎤⎡ax ⎤ ⎢b ⎥ = ⎢ 0 1 0 ⎥⎢a ⎥ (A.6.2.1.2) ⎢ θ ⎥ ⎢ ⎥⎢ y ⎥ ⎣⎢br ⎦⎥ ⎣⎢sin(φ) 0 cos(φ) ⎦⎥⎣⎢az ⎦⎥

We combine Eqs. (A.6.2.1.1) and (A.6.2.1.2) to get:

⎡ex ⎤ ⎡cos(φ)cos(θ ) − sin(θ ) sin(φ)cos(θ )⎤⎡bφ ⎤ ⎢e ⎥ = ⎢cos(φ)sin(θ ) cos(θ ) sin(φ)sin(θ )⎥⎢b ⎥ (A.6.2.1.3) ⎢ y ⎥ ⎢ ⎥⎢ θ ⎥ ⎣⎢ez ⎦⎥ ⎣⎢ − sin(φ) 0 cos(φ) ⎦⎥⎣⎢br ⎦⎥

Next, we analyze the forces acting on the launch vehicle. The free body diagram of the launch vehicle is shown in Fig. (A.6.2.1.2). The angle γ is the flight path angle, or the angle between the direction of velocity and the local horizon.

For the purpose of developing a trajectory, the launch vehicle is treated as a point mass. The stability of the launch vehicle is left to the D&C group. Therefore, this model of the launch vehicle does not take into account the launch vehicle’s moments of , the location of the center of pressure, or any other perturbing forces that affect stability. The forces weight, , and thrust are assumed to act in the - plane. To summarize, the launch vehicle is modeled as a dot flying through .

Weight (W) is the force the Earth exerts on the launch vehicle. Weight is a function of the mass of the launch vehicle. Therefore, weight varies over the flight as the launch vehicle burns fuel and discards inert mass (stages and payload fairings). The weight of the launch vehicle is always directed to the center of the Earth (opposite ).

Thrust (T) is the force developed by the engine. A detailed description about modeling thrust is given in Section A.6.2.1.5. In modeling thrust, the angle ’ is the angle at which thrust is offset

Author: Brad Ferris Project Bellerophon 647 from the direction of the velocity. For the trajectory model, the thrust is always aligned with the velocity, therefore ’ is always equal to zero.

Drag (D) is the force the atmosphere exerts on the launch vehicle. A detailed description about modeling drag is given in Section A.6.2.1.6. Drag always acts opposite of the direction of the velocity.

Fig.A.6.2.1.2: Free-body diagram of launch vehicle used to develop equations of motion. (Brad Ferris) In order to develop the equations of motion, we use Newton’s Second Law. Newton’s Second Law states that force (F) is equal to mass (m) multiplied by acceleration (a).

(A.6.2.1.4)

The equations of motion satisfy Newton’s Second Law. The treatment of the forces is called kinetics, and the treatment of the motion (acceleration) is called kinematics.

In order to analyze the kinetics, it is necessary to break up the forces into their components in the frame. 0 (A.6.2.1.5)

Author: Brad Ferris Project Bellerophon 648

cos sin (A.6.2.1.6) cos′ sin ′ (A.6.2.1.7)

Next, we sum all of the forces in each direction. We introduce a term for the force of the wind in each direction (Fwi). A detailed description about modeling wind force is given in Section A.6.2.1.4.

′ ∑ (A.6.2.1.8) ′ ∑ (A.6.2.1.9)

∑ (A.6.2.1.10)

In order to obtain the kinematic part of the equations of motion, we first establish a position vector ( ). We need to differentiate the position vector two times in order to get acceleration. It is necessary to use the Basic Kinematic Equation (BKE) to differentiate, because the bi frame is not inertially fixed. With the BKE, we introduce angular velocity (ω).

(A.6.2.1.11)

With the angular velocity and the position vector, we can differentiate to get acceleration.

(A.6.2.1.12) cos sin (A.6.2.1.12) (A.6.2.1.13) sin (A.6.2.1.14) sin 2 cos sin 2 sin sin 2 cos (A.6.2.1.15)

Now that we have the kinetics and kinematics describing the motion of the launch vehicle, we can use Newton’s Second Law, Eq. (A.6.2.1.4), to get the equations of motion. Recall that kinetics pertains to the treatment of the forces, Eqs. (A.6.2.1.8) – (A.6.2.1.10), and the

Author: Brad Ferris Project Bellerophon 649 kinematics pertains to the treatment of the motion. The mass required for Newton’s Second Law is the mass of the launch vehicle (m). Since the launch vehicle is burning fuel and discarding inert mass, the mass of the launch vehicle is a function of time, m=m(t). Applying Newton’s Second Law, the final EOMs for the launch vehicle are defined in Eqs, (A.6.2.1.16) – (A.6.2.1.18):

′ : sin (A.6.2.1.16) : 2 cos sin (A.6.2.1.17) ′ : 2 sin sin 2 cos (A.6.2.1.18)

If we desire the orientation of the launch vehicle with respect to the Earth fixed frame (̂), we apply the transformation matrix in Eq. (A.6.2.1.3) to Eqs. (A.6.2.1.16) – (A.6.2.1.18).

Author: Brad Ferris Project Bellerophon 650

A.6.2.1.1 Aircraft launch For an aircraft launch, the equations of motion of the launch vehicle are the same as the equations of motion given in Eqs. (A.6.2.1.16) – (A.6.2.1.18) in Section A.6.2.1. For the numerical integration used in the trajectory codes, it is necessary to put the equations of motion into state space. Therefore, in state space form we have the following:

⎡x1 ⎤ ⎡r⎤ ⎢x ⎥ ⎢r⎥ ⎢ 2 ⎥ ⎢ &⎥ ⎢x3 ⎥ ⎢θ ⎥ ⎢ ⎥ = ⎢ ⎥ (A.6.2.1.1.1) ⎢x4 ⎥ ⎢θ&⎥ ⎢x ⎥ ⎢φ⎥ ⎢ 5 ⎥ ⎢ ⎥ ⎣⎢x6 ⎦⎥ ⎣⎢φ&⎦⎥

(A.6.2.1.1.2) ′ sin

′ 1 2 sin 2 cos

1 2 cos sin

The equations in Eqs. (A.6.2.1.1.1) – (A.6.2.1.1.2) are subject to the following initial condition:

⎡r(0)⎤ ⎡6,391,000[meters]⎤ ⎢ ⎥ ⎢ ⎥ ⎢r&(0)⎥ ⎢ 0[m / s] ⎥ ⎢θ (0)⎥ ⎢ (−80)[deg.] ⎥ ⎢ ⎥ = ⎢ ⎥ ⎢θ&(0)⎥ ⎢ 0[rad / s] ⎥ ⎢φ(0)⎥ ⎢ (90 − 28)[deg.] ⎥ ⎢ ⎥ ⎢ ⎥ ⎣⎢φ&(0)⎦⎥ ⎣⎢ 0[rad / s] ⎦⎥

Author: Brad Ferris Project Bellerophon 651

A.6.2.1.2 Balloon Launch For a balloon launch, the equations of motion of the launch vehicle are the same as the equations of motion given in Eqs. (A.6.2.1.16) – (A.6.2.1.18) in Section A.6.2.1. For the numerical integration used in the trajectory codes, it is necessary to put the equations of motion into state space. Therefore, in state space form we have the following:

⎡x1 ⎤ ⎡r ⎤ ⎢x ⎥ ⎢r ⎥ ⎢ 2 ⎥ ⎢ &⎥ ⎢x3 ⎥ ⎢θ ⎥ ⎢ ⎥ = ⎢ ⎥ (A.6.2.1.2.1) ⎢x4 ⎥ ⎢θ&⎥ ⎢x ⎥ ⎢φ⎥ ⎢ 5 ⎥ ⎢ ⎥ ⎣⎢x6 ⎦⎥ ⎣⎢φ&⎦⎥

(A.6.2.1.2.2) ′ sin

′ 1 2 sin 2 cos

1 2 cos sin

The equations in Eqs. (A.6.2.1.2.1) – (A.6.2.1.2.2) are subject to the following initial conditions:

⎡r(0)⎤ ⎡6,406,000[meters]⎤ ⎢ ⎥ ⎢ ⎥ ⎢r&(0)⎥ ⎢ 0[m / s] ⎥ ⎢θ (0)⎥ ⎢ (−80)[deg.] ⎥ ⎢ ⎥ = ⎢ ⎥ ⎢θ&(0)⎥ ⎢ 0[rad / s] ⎥ ⎢φ(0)⎥ ⎢ (90 − 28)[deg.] ⎥ ⎢ ⎥ ⎢ ⎥ ⎣⎢φ&(0)⎦⎥ ⎣⎢ 0[rad / s] ⎦⎥

Author: Brad Ferris Project Bellerophon 652

A.6.2.1.3 Ground Launch For a ground launch, the equations of motion of the launch vehicle are the same as the equations of motion given in Eqs. (A.6.2.1.16) – (A.6.2.1.18) in Section A.6.2.1. For the numerical integration used in the trajectory codes, it is necessary to put the equations of motion into state space. Therefore, in state space form we have the following:

⎡x1 ⎤ ⎡r ⎤ ⎢x ⎥ ⎢r ⎥ ⎢ 2 ⎥ ⎢ &⎥ ⎢x3 ⎥ ⎢θ ⎥ ⎢ ⎥ = ⎢ ⎥ (A.6.2.1.3.1) ⎢x4 ⎥ ⎢θ&⎥ ⎢x ⎥ ⎢φ⎥ ⎢ 5 ⎥ ⎢ ⎥ ⎣⎢x6 ⎦⎥ ⎣⎢φ&⎦⎥

(A.6.2.1.3.2) ′ sin

′ 1 2 sin 2 cos

1 2 cos sin

The equations in Eqs. (A.6.2.1.3.1) – (A.6.2.1.3.2) are subject to the following initial conditions:

⎡r(0)⎤ ⎡6,376,000[meters]⎤ ⎢ ⎥ ⎢ ⎥ ⎢r&(0)⎥ ⎢ 0[m / s] ⎥ ⎢θ (0)⎥ ⎢ (−80)[deg.] ⎥ ⎢ ⎥ = ⎢ ⎥ ⎢θ&(0)⎥ ⎢ 0[rad / s] ⎥ ⎢φ(0)⎥ ⎢ (90 − 28)[deg.] ⎥ ⎢ ⎥ ⎢ ⎥ ⎣⎢φ&(0)⎦⎥ ⎣⎢ 0[rad / s] ⎦⎥

Author: Brad Ferris Project Bellerophon 653

A.6.2.1.4 Wind and Atmosphere In order to accurately predict the trajectory of a launch the simulations need an atmospheric and wind profile model. This model predicts the conditions a launch vehicle is exposed to when traveling through Earth’s atmosphere. These conditions determine the various aerodynamic forces imparted on a moving vehicle. In the initial design we planned to use a ground launch at sea level, an aircraft launch at an altitude of 15 km, and a balloon launch at 30 km. The final design is a balloon launch and only uses the wind model for ascension.

In the equations of motion mentioned in section A.6.2.1 there is a force in all three directions,

Fw, which is the force on the launch vehicle due to the constant wind model coupled with the gusting of the wind. Since we are launching from a balloon at a starting altitude of 30 km we are above the effects of wind, which has a maximum altitude of 30 km, on the launch vehicle.1 The terms in the free body diagram and equations of motion are there for completeness and are 0. The wind only reaches an altitude of 30 km because its effects on a vehicle after the altitude are minimal. This is due to the fact that the atmospheric density is small enough that the wind will not affect the launch vehicle enough.1 The air density at 30 km is 0.018 kg/m3 and the air density at sea level is 1.225 kg/m3 which is 68 times larger than at 30 km.2

Author: Kyle Donahue and Allen Guzik Project Bellerophon 654

A.6.2.1.4.1 Standard Atmosphere Profiles The atmosphere model used to run the simulations is based on the standard atmosphere data based of the 1976 NASA Standard Atmosphere. Our simulations use a MATLAB function called atmosphere4.m.2 Input into the function is geopotential height. The function outputs the temperature, density, and pressure at the selected height. The model makes these calculations up to an altitude of 89.9 km. Figures A.6.2.1.4.1.1 through A.6.2.1.4.1.3 show plots of the pressure, temperature and density outputs from this function.

Fig A.6.2.1.4.1.1: Standard atmosphere temperature profile. (Allen Guzik and Kyle Donahue)

Fig A.6.2.1.4.1.2: Standard atmosphere pressure profile. (Allen Guzik and Kyle Donahue)

Author: Kyle Donahue and Allen Guzik Project Bellerophon 655

Fig A.6.2.1.4.1.3: Standard atmosphere density profile. (Allen Guzik and Kyle Donahue)

Author: Kyle Donahue and Allen Guzik Project Bellerophon 656

A.6.2.1.4.2 Constant Wind Profile Several assumptions are made in creating the wind profile. The first assumption we make is that the constant wind is linear at different heights. Another assumption we make is that the constant wind will always be traveling in an easterly direction. This means that the wind can never go east to west. For example the constant wind profile is limited to angles greater than 0o and less than 180o on a compass. We also assumed there would be random wind gusts throughout the wind profile. The restriction on the wind gusts is that their direction can only be ±90o from the constant wind profile. Also the wind gusts are impulsive. The final assumption we made in creating the wind model is that the wind itself is only two dimensional. We assume the wind will only be traveling in the north-east-south-west directions and never in the “up” or “down” directions.

We model the constant wind profile after a model used for the launch of Lunar Orbiter 2.2 Figure A.6.2.1.4.2.1 shows the wind profile which we used as a model.

Fig A.6.2.1.4.2.1: Wind profile from NASA CR-942. (B.A. Appleby and T.E. Reed)

Author: Kyle Donahue and Allen Guzik Project Bellerophon 657

The dark solid line in the figure is the constant wind profile which we used for our model. We did not model the direction from NASA CR-942, we only used Fig. A.6.2.1.4.2.1 for the speed of the constant wind. Figure A.6.2.1.4.2.2 is the constant wind profile which we used in the trajectory and D&C models.

Fig A.6.2.1.4.2.2: Constant Wind Profile for Project Bellerphone. (Kyle Donahue and Allen Guzik)

Our wind model is a simplified version of one of the current models. We assume that the wind speed is related to altitude in a linear fashion. This is not the case but for our model the linear representation works very well.

We found the constant wind using MATLAB code AAE450_Wind_Model.m. For the initial analysis for Project Bellerophon the wind model was not used. The wind model was implemented in the second round of design analysis. The wind model is broken up into several parts. The first part is computing the constant wind profile. The second part is determining the wind gusts. And the third part is converting the speed of the wind into the wind force (Fw).

Author: Kyle Donahue and Allen Guzik Project Bellerophon 658

The first part of the wind model is determining the constant wind profile. The constant wind profile itself is made up of two parts: the direction and the speed. The first part of the code determines the speed of the wind. The code uses logic and information which is based on Fig. A.6.2.1.4.2.1 The next step is determining the direction in which the constant wind profile is directed. Since the constant wind profile is launch dependent it changes every time the code is used. This works best as it represents the real wind profile more accurately.

Author: Kyle Donahue and Allen Guzik Project Bellerophon 659

A.6.2.1.4.3 Wind Gusting Algorithm Another aspect of the wind and atmospheric model is the unpredictable nature of wind gusts. Within the wind model architecture there is a wing gusting generator. The concept behind the wind gusting generator is to be able to generate random wind gusts then add them to the constant wind profile.

There are many parameters designed into the gusting algorithm to allow for random gusting. First we choose the number of gusts a vehicle can experience, unique to each launch. This number is random and can vary from zero to twenty gusts per launch. Another unique property to each launch is the altitude in the atmosphere where each gust occurs. Each gust is assigned a random altitude where the gust happens. The possible altitude range is from 0 km to 30 km.

The direction of each gust is also random. This allows for the unpredictable nature of the wind changing direction. The direction is selected to always be parallel to the ground. This means the model does not generate any up or down drafts. Each gust direction is in any direction that is plus or minus 90˚ from the direction of the constant wind profile.

The last component of the wind gust algorithm is the magnitude of each gust. Each gust has a random magnitude that can be anywhere between 0 m/s to 12 m/s. This magnitude is added to the constant wind profile. For example, if a gust of 9 m/s is assigned to the altitude of 10 km and is going in exactly the same direction of the constant wind the resulting wind, at that altitude, is the constant wind, which is 40 m/s, plus the gust resulting in the total wind velocity of 49 m/s. Lastly, the duration of each gust is variable. However, the gust is modeled such that the gust is an impulse. This decision is based on the assumption that the length of altitude each gust is small enough that when considering the velocity of the rocket traveling through that altitude range, the gust acts as an impulse.

Author: Kyle Donahue and Allen Guzik Project Bellerophon 660

Fig A.6.2.1.4.3.1: Example of a wind profile with gusting in the north/south direction. (Kyle Donahue and Allen Guzik)

An example of a possible wind profile generated from AAE450_wind_model.m with gusts for a ground rocket launch is provided in Figs. A.6.2.1.4.3.1 and A.6.2.1.4.3.2.

Fig A.6.2.1.4.3.2: Example of a wind profile with gusting in the East/West direction. (Kyle Donahue and Allen Guzik)

Author: Kyle Donahue and Allen Guzik Project Bellerophon 661

A.6.2.1.4.4 Wind Force The third, and final, part of the wind model is converting the wind velocity (constant wind profile plus wind gusts) into the wind force which is used in the equations of motion. The equation we used for converting the wind velocity into wind force is using Eq. (A.6.2.1.4.4.1)

1 2 = ρ Eq. (A.6.2.1.4.4.1) F w 2 W S w

where Fw is the force of the wind, ρ is the density of the air at the particular altitude, W is the total wind velocity which is the constant plus the gust, and Sw is the area exposed to the wind at the given time.

The force of the wind was modeled this way because we determined the wind would add to the drag force. For the most part, this is a good assumption. However, the wind will actually be helping but that is taken care of in the unit vector basis which was described earlier.

We analyze the wind on the launch vehicle for all three body-fixed directions, br, bθ, and bφ. Since one of our assumptions is that the wind would never moving “up” or “down” the speed and force in the br is therefore 0 m/s. It was also analyzed for all altitudes from 0 and up till 30 km. Figure A.6.2.1.4.4.1 is the wind force in the north/south direction, and Fig. A.6.2.1.4.4.2 is the wind force in the east/west direction.

Author: Kyle Donahue and Allen Guzik Project Bellerophon 662

Fig A.6.2.1.4.4.1: Force of the wind in the North/South compass direction. (Kyle Donahue and Allen Guzik)

Fig A.6.2.1.4.4.1: Force of the wind in the East/West compass direction. (Kyle Donahue and Allen Guzik)

The two figures above have the constant wind profile and the wind gusts combined into one to create the wind vector which is used to create the wind force.

Author: Kyle Donahue and Allen Guzik Project Bellerophon 663

Reference 1Appleby, B.A. and Reed, T.E., “Dynamic Stability of Space Vehicles,” NASA CR-942, November 1967. 2Heister, Dr. Stephen, “atmosphere4.m,” AAE 539 Advanced Rocket Propulsion lectures, January 2008.

Author: Kyle Donahue and Allen Guzik Project Bellerophon 664

A.6.2.1.5 Thrust The thrust of the launch vehicle’s engine will vary with altitude. We divide the thrust of the launch vehicle’s engine into two parts: momentum and pressure. The momentum thrust is a result of expelling mass out of the engine, and is a function of the engine’s exhaust mass flow rate ( ) and the velocity of the exhaust (ve). The pressure thrust is a result of the pressure difference between the exhaust and the ambient pressures, and is a function of the exhaust pressure (pe), the ambient pressure (pa), and the exit area of the engine nozzle (Ae). Putting together momentum and pressure thrust parts, we get Eq. (A.6.2.1.5.1) for thrust:

(A.6.2.1.5.1)

Now we notice that there can be a condition where ambient pressure may equal exhaust pressure. This condition would cause the pressure thrust to go to zero; the thrust at this condition is the thrust at optimal expansion (Topt).

(A.6.2.1.5.2)

We can combine Eqs. (A.6.2.1.5.1) and (A.6.2.1.5.2) to get the following:

(A.6.2.1.5.3)

The thrust at optimal expansion, exit pressure, and exit area of the nozzle is provided by the Propulsion group. The ambient pressure at a given altitude is found in the trajectory code (Section A.6.2.1.4).

Another aspect of the thrust that needs to be modeled is the time the engine takes to ramp up to full thrust from ignition and back down to zero thrust at burn out. We call a function to deliver the appropriate thrust value at a given time. The function takes burn time and total thrust as inputs. In the function, we assume the ramping up and down of the thrust is linear, and that the ramping takes place over an interval of one second. For example, the thrust at half a second after

Author: Brad Ferris Project Bellerophon 665 ignition would be half of the full thrust. The function returns the appropriate thrust value. Therefore, we are now able to model the thrust of the launch vehicle over the entire flight.

Author: Brad Ferris Project Bellerophon 666

A.6.2.1.6 Lift and Drag The launch vehicle travels through the Earth’s atmosphere for part of its flight. Therefore, the launch vehicle experiences atmospheric forces. We describe these forces as lift and drag.

In the trajectory model, the angle of attack of the launch vehicle is assumed to be zero. Consequently, the launch vehicle is always showing the same wetted area. This assumption was made early on in the trajectory modeling process. The trajectory model was not revised to include a variable angle of attack. This assumption affects the lift and drag forces, which are described later in this section. The D&C group uses a more comprehensive model of aerodynamic forces (Section A.3) than the one used by the Trajectory group.

Lift (L) is defined as the aerodynamic force acting normal to the direction of velocity. The launch vehicle is an axis symmetric body; zero-lift angle of attack occurs when angle of attack is zero. Consequently, the launch vehicle only experiences a lift force when the angle of attack is not zero. Since the angle of attack is assumed to be zero in the trajectory model, there is no lift force in the trajectory model.

Drag (D) is defined as the aerodynamic force acting opposite of the direction of velocity. Drag force is a function of several parameters, including the coefficient of drag (CD), the dynamic pressure (q), and the wetted area (S). The coefficient of drag is a function of the geometry of the vehicle. The dynamic pressure is a function of atmospheric density (ρ) and vehicle velocity (V), and is given by:

1 2 (A.6.2.1.6.1)

The wetted area is the area projected onto a plane normal to the direction of velocity. Since we made the simplifying assumption that angle of attack is zero, the direction of velocity will lie along the launch vehicle’s axis of symmetry.

Author: Brad Ferris Project Bellerophon 667

Now that all of the necessary parameters have been defined, we can now state the equation for drag:

(A.6.2.1.6.2)

The next step in modeling drag is to effectively model the change in drag force over the flight time. As the launch vehicle climbs and accelerates, the density of the atmosphere decreases and the velocity of the launch vehicle increases. These changes are captured in the dynamic pressure. The drag on the launch vehicle will change as it passes through the subsonic, transonic, and supersonic regions. To put it another way, drag is a function of Mach number. Drag is also a function of angle of attack, but the trajectory model assumes angle of attack of zero. The coefficient of drag captures the change in drag due to the change in Mach number (Sections A.1.2.3 – A.1.2.4).

As described above, it is necessary to model the Mach number to get drag behavior. Mach number is a function of the vehicle’s velocity (V) and the local speed of sound (a). The Mach number is defined as:

(A.6.2.1.6.3)

The speed of sound is a function of a number of parameter, including the ratio of specific heats of the medium (γ), the specific gas constant of the medium (R), and the local temperature (T). The speed of sound is given by:

(A.6.2.1.6.4)

In order to get an accurate value for CD, the Mach number is input into a function from the

Aerothermal group and a corresponding value for CD is output into the trajectory code.

Author: Brad Ferris Project Bellerophon 668

With these methods for getting values of CD and q that vary with altitude and velocity, and getting a value for S for angle of attack equal to zero, we can effectively model drag as the launch vehicle changes altitude and velocity.

Author: Brad Ferris Project Bellerophon 669

A.6.2.2 Steering Law Development

A.6.2.2.1 Balloon and Ground Launch The steering law, which controls the direction of the velocity vector of the launch vehicle, is one of the most crucial challenges in our project. A slight change in the steering law affects the

∆Vdrag, ∆Vgravity and the eccentricity of the ; therefore, the rocket will not obtain an acceptable orbit without good sub-optimal steering. We eventually incorporate the spherical Earth model, the aerodynamic drag due to the atmosphere, and the field as a function of altitude; however, the starting point of the construction of the steering law was to consider the flat Earth problem without drag. This simplified problem is a well-defined two point boundary value problem, which is analytically solvable by forming Hamiltonian and applying Euler-Lagrange equations, Transversality condition and Weierstrass condition. The optimal solution obtained is the Linear Tangent Steering Law1:

tanψ =+at b (A.6.2.2.1.1) where ψ is the steering angle, t is time, and a and b are the coefficients. The Linear Tangent Steering Law is the optimal steering law for the flat Earth when there is no atmosphere. As the steering laws that private companies and the governmental space agencies actually use are not available to the public, we decide to apply the Linear Tangent Steering Law for our ground and balloon launches. We recognize that it is not the optimal steering law when we apply it to the spherical Earth model with atmosphere; however, we also assume that the difference is small enough to treat the Linear Tangent Steering Law as a good sub-optimal steering law. We implement the steering law in our ordinary differential equations solvers and numerically integrate our equations of motion for each stage. Also, our rocket flies vertically without any steering for the first ten seconds of the first stage, so we do not need to implement the steering law for the very first part of the flight.

Author: Junichi Kanehara Project Bellerophon 670

Figure A.6.2.2.1.1 shows how we measure the steering angles and depicts the final steering angles of each stage, which numerically define our steering law. Figure A.6.2.2.1.2 shows the steering law versus time when the final steering angles at first, second and third stages are 40°, - 20° and -50° respectively. We should note that the initial steering angle is 88° rather than 90° since the tangent function is undefined at 90°.

Fig. A.6.2.2.1.1: Schematic of the steering angle at the end of each stage. (Amanda Briden)

Fig. A.6.2.2.1.2: Sample of the plot of steering law versus time. (Amanda Briden)

Author: Junichi Kanehara Project Bellerophon 671

By changing the final steering angles at each stage degree by degree, we are able to find the sub- optimal steering law that makes it possible to attain a nominal orbit with the eccentricity of as small as 0.0055. In Section A.6.2.3, we will discuss how we actually deal with the computationally expensive process of obtaining the sub-optimal steering law, which requires running the entire trajectory code once for each set of the final steering angles, by using a normal PC in the year 2008 rather than an expensive super computer. In the process of choosing the launch type, ground launch or balloon launch, we needed to compare the corresponding ∆Vdrag and ∆Vtotal. We did not have the final structural configurations when we did the analysis on the week five of the project, and we did not have a sub-optimized trajectory for each case either. However, the following results are still valid since the trend never changes for our launch vehicles regardless of the modifications since the week five.

Table A.6.2.2.1.1 Delta V Comparison

Payload [kg] Launch type ∆Vdrag ∆Vtotal Units 0.2 Balloon 21 10,027 m/s 1.0 Balloon 21 10,011 m/s 5.0 Balloon 20 9,932 m/s 0.2 Ground 2,904 14,033 m/s 1.0 Ground 2,899 13,978 m/s 5.0 Ground 2,875 13,711 m/s

Table A.6.2.2.1.1 shows ∆Vdrag of the ground launch is bigger than that of the balloon launch by the factor of 150, and ∆Vtotal of the ground launch is significantly bigger since ∆Vdrag is the major source of ∆Vtotal. Consequently, it is obvious that the balloon launch has a very big advantage in reducing ∆Vdrag, although the accuracy in the numerical values is not perfect since we use the preliminary analysis on the week five. Our final configurations of small, medium and big launch vehicle, whose payloads are 0.2 kg, 1 kg and 5 kg, for the balloon launch have ∆Vdrag of 6 m/s, 6 m/s and 4 m/s and require ∆Vtotal of 9,313 m/s, 9,379 m/s and 9,354 m/s respectively. These results validate that our preliminary analysis on the week five are numerically close to our final results; therefore, we confidently conclude that the balloon launch is better than the ground launch in terms of ∆Vtotal, which exponentially affects the total cost of our launch vehicles.

Author: Junichi Kanehara Project Bellerophon 672

References 1 Longuski, J.M. “AAE 508 Optimization in Aerospace Engineering Lectures,” Purdue University, West Lafayette, IN, January 2008.

Author: Junichi Kanehara Project Bellerophon 673

A.6.2.2.2 Aircraft Launch

From an aircraft launch, the launch vehicle’s initial orientation is parallel to the ground (along ˆ the bθ direction). With the results from the trade study comparing the ΔVdrag losses between the ground and balloon launch, the ideal trajectory for the aircraft launch is to pitch up to get out of the atmosphere, effectively minimizing losses due to ΔVdrag. Then, after departing the atmosphere (defined as an altitude of 90 km), the vehicle must pitch over in order to burn off radial velocity and enter a circular orbit (see Fig. A.6.2.2.1.1). Here, we discuss the final aircraft launch steering laws and any trade studies that were completed, which led to a final design decision.

Fig. A.6.2.2.1.1: Ideal aircraft trajectory. (Amanda Briden)

In order to achieve the trajectory described above, we implement a tangent steering law for the first stage, defined in Eq. (A.6.2.2.2.1). This law pitches the launch vehicle from a horizontal to vertical position in a matter of seconds. This vertical position is then maintained for the duration of the first stage.

ψ = tan −1 (at) (A.6.2.2.2.1) where a is a coefficient determined by Eq. (A.6.2.2.2.2).

a = tan(ψ 1e ) / tc limbtovertical (A.6.2.2.2.2)

Author: Amanda Briden Project Bellerophon 674

whereψ 1e is defined as the steering angle at the end of the first stage and has a maximum value of

ο 88 . tc limbtovertical is the amount of time it takes to reach ψ 1e and is defined as 10 seconds. These values are user defined and can be changed.

The second stage steering law is important, as it determines the amount of radial velocity remaining as the payload enters orbit. For a circular orbit, no radial velocity should remain. Significant time was spent finding the best sub-optimal steering law to burn off unwanted radial velocity. We completed a trade study to select the final second stage steering law; the study is detailed in the following paragraph.

We defined a successful steering law using the following criterion. First, the law had to be easy to implement into the main trajectory code. Second, the law had to allow for an optimization process that minimized the radial velocity at orbit insertion. We began by fitting third order (Fig. A.6.2.2.2.2) and second order polynomials (Fig. A.6.2.2.2.3) to a steering law shape we thought would minimize radial velocity. Notice that the shapes of steering laws depend on the burn time of the second stage. As the burn time is longer, the change in orientation of the launch vehicle with time is more gradual.

Psi (rad) vs. t (s) Aircraft Launch - 2nd Stage Steering Law Variation with t_burn2 tb2 = 20 s tb2 = 30 s 2 tb2 = 40 s tb2 = 50 s tb2 = 60 s 1.5 tb2 = 70 s tb2 = 80 s tb2 = 90 s 1 tb2 = 100 s tb2 = 110 s tb2 = 120 s 0.5 tb2 = 130 s tb2 = 140 s psi (rad) psi Poly. (tb2 = 20 s) 0 0 20 40 60 80 100 120 140 160 -0.5 y = -0.0015x3 + 0.0488x2 - 0.4936x + 1.5184 R2 = 1 -1 tb2 (s)

Fig. A.6.2.2.2.2: 2nd stage aircraft steering law – 3 degree polynomial. (Amanda Briden)

Author: Amanda Briden Project Bellerophon 675

Fig. A.6.2.2.2.3: 2nd stage aircraft steering law – quadratic. (Amanda Briden)

Implementation of either type of polynomial into the trajectory code would be complex. For example, a look up table of the coefficients for the polynomial (Table A.6.2.2.2.1) would need to be included in the trajectory code, as the burn time of the second stage varies with each vehicle design iteration.

Table A.6.2.2.2.1 Steering Angle Coefficient Look-up

2 tb2 ax bx c 20 0.0065 -0.2313 1.5184 30 0.0029 -0.1542 1.5184 40 0.0016 -0.1156 1.5184 50 0.0010 -0.0925 1.5184

It was also not clear how we optimize this steering law. There was no way to change the steering law because it was set after the second stage burn time was known.

To avoid complexity and provide a way to optimize the steering law, we use three separate linear steering law sections for the aircraft launch second stage, defined by Eq. (A.6.2.2.2.3).

ψ = ait + bi (A.6.2.2.2.3)

Author: Amanda Briden Project Bellerophon 676 where i = 1,2, or 3 designates the linear section and a and b are coefficients that define the linear lines connecting the segments ABCD.

In Fig. A.6.2.2.2.4, the red curve (segments ABCD) corresponds to the second stage aircraft steering law. The simple steering law equation is easy to implement. The time span of each section and the final orientation of the launch vehicle (ψe) can be varied by parameter input changes as an optimization scheme.

Fig. A.6.2.2.2.4: 2nd stage aircraft steering law – three separate linear sections. (Amanda Briden)

The first linear section begins at the same angle the first stage ended at (point A) and ends at ο ψmid1 = 5 (point B). The range of this section is a user defined parameter and is a percentage of the second stage burn time. For this example, 25% of the second stage burn time was the input parameter.

ο The second linear section begins at point B and ends at ψ mid2 = 0 (point C). The time in which this must occur is not a variable parameter, but is defined as another 25% of the second stage burn time.

Author: Amanda Briden Project Bellerophon 677

The third and final linear section begins at point C and ends at ψ2e (point D). This occurs in the remaining time of the second stage burn. ψ2e is a variable parameter and the selection of ψ2e can change the slope of the final section. For this steering law, a look up table is not required and two input parameters can always be used for optimization no matter what the length of the burn time is for the second stage. All of the variable steering law parameters above are varied in the aircraft steering law optimization routine.

We use a linear steering law for the third stage of the aircraft launch. It continues from the end of the second stage, an example is shown as the green line in Fig. A.6.2.2.2.5. The variable parameter for this section of the steering law is the orientation of the launch vehicle at the end of the third stage. However, for the final design, this angle is not varied because the third stage of the launch vehicle is spin stabilized.

Fig. A.6.2.2.2.5: 2nd stage aircraft steering law – 3rd stage steering law. (Amanda Briden)

The aircraft launch was not selected because the aircraft steering law is not first derivative continuous (C1), making it extremely difficult for the D&C group to follow without a significant effort put toward fitting a complex spline to the law. This is an important lesson learned. Communication between the Trajectory and D&C groups needs to be seamless from the start of

Author: Amanda Briden Project Bellerophon 678 the project. D&C must be aware of every update to any stage’s steering law and be provided sufficient time to accept or reject the law based on whether or not it can be followed easily.

Author: Amanda Briden Project Bellerophon 679

A.6.2.2.3 Third Stage Steering Law Angle Trade Studies We perform many trade studies to obtain the correct steering law. Once selected, the steering law needs the ending orientation of the vehicle at certain intervals to be defined. These angles are defined for our launch configuration as the required orientation of the vehicle at the end each stage during the launching trajectory.

The resulting orbit is very sensitive to the angles we choose. Also, for each launch, the initial conditions vary significantly from vehicle to vehicle. Examples of some conditions that change from vehicle to vehicle are GLOM, thrust for each stage, and burn times. The sensitivity of the trajectory to the initial conditions proved to be very difficult to choose the correct steering angles for each launch configuration.

Particularly, the final angle, denoted as Ψ3 is of great importance. Ψ3 is the angle that represents the orientation of the vehicle at then end of the third stage. We also have found the Ψ3 angle is used to burn off excess radial velocity making the final orbit more circular. A few trade studies were done to better understand how changing the angle of Ψ3 affects the resulting orbit the payload is inserted into.

The goal of the first of two trade studies done was to understand how to choose the angle for Ψ3 was to simply observe the trends, if any, this angle has on the resulting orbit. Finding the trends were done by changing Ψ3 from +90º to – 90º and observing the resulting orbit parameter trends.

For this study the same launching configuration was used, and Ψ1 and Ψ2 were held constant. At each variation of Ψ3 the following were recorded; radial velocity, periapsis, apoapsis, eccentricity, ΔV drag, ΔV total, ΔV to circularize, energy of the resulting orbit, and the maximum acceleration. Some very useful data and trends were observed from this study. Figures A.6.2.2.3.1 through A.6.2.2.3.4 show plots of the most prevalent resulting data.

Author: Allen Guzik Project Bellerophon 680

Figure A.6.2.2.3.1: Affect of changing Ψ3 on periapsis for a ground launch. (Allen Guzik)

Figure A.6.2.2.3.2: Affect of changing Ψ3 on apoapsis for a ground launch. (Allen Guzik)

Author: Allen Guzik Project Bellerophon 681

Figure A.6.2.2.3.3: Affect of changing Ψ3 on eccentricity for a ground launch. (Allen Guzik)

Figure A.6.2.2.3.4: Affect of changing Ψ3 on radial velocity for a ground launch. (Allen Guzik)

These figures show some expected and unexpected trends. For example, Fig. A.6.2.2.3.1 shows decreasing Ψ3 caused the periapsis to decrease and the radial velocity to decrease. Unexpectedly, the behavior was complex and showed unpredictable responses from one angle to the next.

The most important result of this study is the effect Ψ2 has on Ψ3. The study showed the resulting orbit is only as good as the chosen Ψ2 angle. Also, on the whole, the most desirable orbit. A circular orbit with a periapsis close to 300 km from the surface of the Earth), occurs when Ψ3 equals Ψ2. The revelation of the best orbit is when Ψ3 equals Ψ2 is particularly

Author: Allen Guzik Project Bellerophon 682 important because it supports using a spin stabilized third stage. Spin stabilizing the final stage is desired because it reduces the weight and cost of the vehicle by not requiring a control system to control the rocket motor.

The second trade study was done to observe the effect of error in the actual flight’s trajectory to the nominal case. The D&C group needed to know the allowable range of angles that the error in Ψ3 can be and still have the payload be inserted into an acceptable orbit. For this study the same balloon launch configuration was used with only changing the Ψ3 angle. Ψ3 was changed 1º at a time off of the nominal angle both positively and negatively until the propagation of the orbit hit the surface of the Earth. The periapsis, apoapsis, and eccentricity were recorded for each Ψ3 angle change. The resulting trends are plotted and shown in Fig. A.6.2.2.3.5 through A.6.2.2.3.10.

20%

15%

10% Percent Error 5%

0% -24 -20 -16 -12 -8 -4 0 4 Psi3 Angle Change from the Nominal [degree]

Figure A.6.2.2.3.5: Eccentricity percent error from changing Ψ3. (Allen Guzik)

Author: Allen Guzik Project Bellerophon 683

0.43 Eccentricity 0.42 Nominal Value 0.41 0.40 0.39 0.38 0.37 0.36 0.35

Eccentricity 0.34 0.33 0.32 0.31 0.30 -24 -20 -16 -12 -8 -4 0 4 Psi3 Angle Change from the Nominal [degree]

Figure A.6.2.2.3.6: Eccentricity sensitivity from changing Ψ3. (Allen Guzik)

20%

15%

10% Percent Error Percent 5%

0% -24 -20 -16 -12 -8 -4 0 4 Psi3 Angle Change from the Nominal [degree]

Figure A.6.2.2.3.7: Apoapsis percent error from changing Ψ3. (Allen Guzik)

Author: Allen Guzik Project Bellerophon 684

9,000 Apogee Nominal Value 8,500

8,000

7,500

7,000 Apogee [km] Apogee

6,500

6,000 -24 -20 -16 -12 -8 -4 0 4 Psi3 Angle Change from the Nominal [degree]

Figure A.6.2.2.3.8: Apoapsis sensitivity from changing Ψ3. (Allen Guzik)

110% 100% 90% 80% 70% 60% 50% 40%

Percent Error Percent 30% 20% 10% 0% -24 -20 -16 -12 -8 -4 0 4 Psi3 Angle Change from the Nominal [degree]

Figure A.6.2.2.3.9: Periapsis percent error from changing Ψ3. (Allen Guzik)

Author: Allen Guzik Project Bellerophon 685

550 Perigee 500 Nominal Value Requested Orbit 450

400

350

300

250

200 Perigee [km] Perigee 150

100

50

0 -24 -20 -16 -12 -8 -4 0 4 Psi3 Angle Change from the Nominal [degree]

Figure A.6.2.2.3.10: Periapsis sensitivity from changing Ψ3. (Allen Guzik)

These figures show that changing the Ψ3 angle off the nominal value greatly influences the periapsis. Figure A.6.2.2.3.9 shows that for every 1º change the percent error of the resulting change in periapsis is about 10%. Also shown is the orbit is much more sensitive to angles that have negative error. Figure A.6.2.2.3.10 shows after an error of less than -6º, the vehicle will have a resulting orbit that hits the surface of the Earth. While, for positive error angles, the error can be as much as +21º off of the nominal before the vehicle hits the Earth. In general, for an acceptable orbit the error can be no less than -1º and no more than +17º off of the nominal angle. A large allowable positive error shows if error is a problem, to guarantee an acceptable orbit the nominal case may need to be chosen to be well above the required 300km periapsis requirement.

Author: Allen Guzik Project Bellerophon 686

A.6.2.3 Optimization Like much of the code developed during the course of this project, our optimization algorithm underwent multiple revisions and several complete rewrites. We begin with the assumption that the launch vehicle is a typical three-stage, ground-launched vehicle. A linear-tangent steering law prescribes the steering angle of the launch vehicle at any given moment:

Ψ=tan−1(at + b) (A.6.2.3.1) where Ψ is the steering angle, t is the time elapsed since the last engine burnout in seconds, and a and b are constants for each stage.

The optimization problem is then: find a and b for each stage such that the ΔV required to meet the mission specifications is minimized. To simplify the process, we define three burnout steering angles - Ψ1 , Ψ2 and Ψ3 - which we manipulate to obtain the best trajectory. The values of a and b can then be found by solving the equations:

bn = tan Ψ(n−1) (A.6.2.3.2)

tan(Ψn )− bn an = (A.6.2.3.3) tbo,n

where n denotes the stage number and tbo is the burnout time in seconds. Note that for stage one, Ψ(n−1) would actually be the initial launch angle.

In our first attempt at creating an optimization routine, we specified a series of values of Ψ1 and constant best-guess values of Ψ2 and Ψ3 . We then simulated the trajectory that would result from each combination of steering angles. For each simulated trajectory, we calculated the speed of the vehicle at the third-stage burnout (Vbo) as follows:

2 2 2 2 Vbo = r&3 + r3 (θ&3 + φ&3 ) (A.6.2.3.1)

Author: Daniel Chua Project Bellerophon 687

where r&3 , r3 , θ&3 and θ&3 are the radial speed of the vehicle, the radial from the centre of the earth at third-stage burnout, the rate of change of longitude and the rate of change of latitude at third-stage burnout respectively.

From the third-stage burnout speed, we found the energy of the trajectory:

1 μ energy = Vbo − (A.6.2.3.2) 2 r3 where μ is the standard gravitational parameter of Earth, equal to 3.986 ×1014 m3/s2.

We then compared this value of energy to the known amount of required energy (energyreq ) for a circular orbit around a spherical Earth:

μ energyreq =− (A.6.2.3.3) 2()hreq + REarth

where hreq is the required orbit altitude as defined in the mission specifications, equal to 300 km and REarth is the radius of the Earth, approximately 6376 km.

For each simulated trajectory, if the energy calculated with Eq. (A.6.2.3.2) was less than zero and r3 was greater than or equal to(hreq + REarth ), we classified the trajectory as orbital. If the energy calculated was greater than zero, we classified the trajectory as hyperbolic. Lastly, if neither of the above conditions were met, we classified the trajectory as sub-orbital.

Out of the set of orbital trajectories, we chose the best case as the one that gave the lowest ΔV.

Unfortunately, this first attempt at optimization was mostly unsuccessful. At times, the simulation would plot out a perfectly viable trajectory but the optimization routine (implemented

Author: Daniel Chua Project Bellerophon 688 in MATLAB) would consider it hyperbolic. On other occasions, where the simulation clearly showed that the trajectory was hyperbolic, the optimization routine would pronounce the trajectory sub-orbital. We were unable to determine if this was a result of a logical or syntactical error in our code. Furthermore, this version required the user to specify the range of values for

Ψ1 , and to make single educated guesses at Ψ2 and Ψ3 .

Since the major problems with our first optimization routine were the classification of trajectories and the recognition of feasible trajectories, we returned to the mission specifications and decided on a ranked list of three conditions that a simulated trajectory must pass to be considered feasible. These three conditions now make up the core of our current optimization routine:

1. At no time can the magnitude of the vehicle’s position vector (with the center of the Earth as the origin) fall below the radius of the Earth. We considered this the most important condition of a trajectory. Many of the early iterations using the first version of the optimization routine showed that our simulated rocket disappeared beneath the surface of the Earth shortly after liftoff.

2. The perigee of the trajectory must be at least 300 km above the surface of the Earth. This condition is expressed in the mission specifications.

3. The eccentricity of the orbit must not be greater than 0.5. This condition allows us to easily exclude hyperbolic or highly eccentric trajectories.

The next stage in developing the optimization routine was to allow Ψ2 and Ψ3 to be varied. In this version, the user specified upper and lower bounds for all three angles. Again, we simulated the trajectory for every possible combination of angles. We tested each resulting trajectory against the aforementioned conditions. We then chose the feasible orbit with the lowest ΔV as the best case.

Author: Daniel Chua Project Bellerophon 689

Using this approach, we immediately ran into another problem. We were effectively searching for the optimal solution by brute force. To run through every possible combination of angles at a precision of one degree would have taken us an excessive amount of time. Using the computers available to us, each simulation took approximately 1 minute to run. Trying all possible combinations would have taken more than 11 years.

We impose two conditions on the angles that greatly reduce the amount of time that the entire optimization routine takes to run:

1. The third stage is spin-stabilized. This means that Ψ2 and Ψ3 are always equal, which effectively limits the number of angles we have to manipulate to two. In fact, since we were still using a precision of one degree throughout the whole range of angles, this reduced the run time by up to a factor of 181. Our computation time thus fell from 11 years to about 3 weeks.

2. Ψ2 is always less than or equal to Ψ1 . By limiting the chance that the launch vehicle pitches back up during the second stage burn, the computation time was further reduced to about 1.5 weeks.

At this point, we started making use of MATLAB’s parallel processing functionality. The computers available to us in the lab have dual-core processors, and some of the AAE department compute servers have quad-core processors. However, most of the functionality in MATLAB runs on a single core. Since we are trying to solve the problem by brute force using the results of many independent simulations, distributing the load to both cores can significantly reduce our computational time. By doing so, we nearly quartered the time to about 3 days.

To quickly obtain preliminary results for the other groups, we were using guessed ranges of angles and low tolerances followed by a process of iteratively homing-in on a rough result. The next logical step was therefore to implement a way to do this automatically and systematically, bringing us to our final optimization routine.

Author: Daniel Chua Project Bellerophon 690

We start with the largest possible range of Ψ1 and Ψ2 - from negative 90 degrees to positive 90 degrees – at intervals of 30 degrees. We then simulate the trajectories that result from each combination of angles and choose the combination that gives the lowest eccentricity. We use eccentricity instead of ΔV due to reports from the D&C group that the steering in our preliminary results was too aggressive to control. Next, we examine the range centered on the angles making up the best combination of the previous iteration. This time, we use intervals of 15 degrees. We repeat this process with intervals of 8˚, 4˚, 2˚ and 1˚. After the final iteration (using intervals of 1˚), we either report the best-case angles (correct to 1˚), or that all simulations failed the above criteria for feasible .

If there are any feasible trajectories, we re-simulate the best cases and pass the details of the trajectory to D&C for control. The final optimization routine takes approximately 15 minutes to run. It should also be mentioned at this point that the exact same optimization routine is used for the balloon launch since the steering law remains unchanged.

Author: Daniel Chua Project Bellerophon 691

The best-case angles we obtain using the above routine are tabulated below:

Table A.6.2.3.1 Optimized Angles (0.2kg payload)

Variable Value Units 42 deg Ψ1 Ψ -25 deg 2 Ψ3 -25 deg

Angles are the nose pointing based on the horizon

Table A.6.2.3.2 Optimized Angles (1kg payload)

Variable Value Units

Ψ1 30 deg

Ψ2 -10 deg

Ψ3 -10 deg

Angles are the nose pointing based on the horizon

Table A.6.2.3.3 Optimized Angles (5kg payload)

Variable Value Units

Ψ1 24 deg

Ψ2 -32 deg

Ψ3 -32 deg

Angles are the nose pointing based on the horizon

Author: Daniel Chua Project Bellerophon 692

A.6.2.4 ΔV Analysis The ΔV calculations are essential to the determination of the trajectory, indexing of flight path characteristics, and fuel mass determination. Due to the vital nature of these calculations, the equations for each applicable ΔV loss was determined very early in the design process and implemented within the trajectory codes. The equations used to determine each ΔV calculation are included below:1

The velocity required to maintain lower Earth orbit is calculated using Eq. (A.6.2.4.1)

μ ΔVleo = (A.6.2.4.1) R p

14 3 2 μ is 3.986 x 10 m /s for Earth and Rp is the radius of the Earth plus the height of the periapsis

(from Earth’s surface). Rp is held constant for our simulation.

The velocity required to overcome the effect of drag occurring within the Earth’s atmosphere are calculated using Eq. (A.6.2.4.2).

tb D(t) ΔV = dt drag ∫ (A.6.2.4.2) 0 m(t) where D(t) is the drag experienced over every time step, m(t) is the mass of the rocket for every time step, and tb is the total burn time. It is noted that once the rocket leaves the atmosphere the D(t) term goes to zero and thus no more drag is accumulated.

The velocity required to overcome gravity losses experienced during flight is calculated using Eq (A.6.2.4.3) below.

ΔV = g(t) *sin(γ (t))dt grav ∫ (A.6.2.4.3)

Author: Scott Breitengross Project Bellerophon 693 where g(t) is the gravity force experienced by the rocket over the course of the flight for every time step, and γ(t) is the flight path angle of the rocket from horizontal over the course of the flight for every time step. The ΔV earned from launching the spacecraft a certain location on the Earth was calculated using Eq. (A.6.2.4.4).

φπ 2πR cos( ) e 180 (A.6.2.4.4) ΔVearth assist = td

where Re is the radius of the Earth [m] , φ is the latitude of the launch location and td is the total time in a day in seconds. For Earth, td is 86400 seconds and Re is 6,376,000 meters.

The trajectory group is also interested in determining whether the ΔV from the trajectory code is matching the ΔV distribution from the MAT codes. In order to determine this, a comparison is made between the two codes using Eq. (A.6.2.4.5).

T(t) ΔV = dt (A.6.2.4.5) thrust ∫ m(t) where T(t) is the thrust experienced by the rocket over the entire length of the flight for every time step. This equation allows the trajectory group to compare the ΔV distribution amongst the stages from the trajectory codes and the MAT codes.

The previous equations were combined from each stage and then the final ΔV determination is calculated using Eq. (A.6.2.4.6).

ΔVtotal = ΔVleo + ΔV drag+ΔVgrav − ΔVearth assist (A.6.2.4.6)

This equation allows the team to make a determination about which trajectory is the most ideal and to give the propulsion group an estimation on the required ΔV consumption and thus the required fuel needed to reach the trajectory and lower Earth orbit.

Author: Scott Breitengross Project Bellerophon 694

It is important to note that the values for ΔVthrust, ΔVdrag, and ΔVgrav are calculated using ode45 in Matlab. Since the ode codes are used separate from the launch vehicle determination, it is required that the ΔV requirements for each stage be separated until the entire code is run. Once this is complete the outputs from the separate stages are combined for a total ΔV determination for the entire flight path.

There is also consideration paid to the fact that while a trajectory may exist, the characteristics of that trajectory are not ideal and needs to be corrected while in orbit. This consideration prompts a calculation of the ΔV required to circularize the orbit. This ΔV is calculated using Eq. (A.6.2.4.7).

2 2 ΔV2circ = (Vcirc +Vleo ) − (2VcircVleo cos(γ )) (A.6.2.4.7)

where Vcirc is the velocity required for a circular orbit based on the perioapsis of the obtained orbit, Vleo is the velocity of the obtained orbit, and γ is the flight path angle.

The ΔV calculations are then used as a comparison tool for the optimization of the trajectory. There is a correlation between required ΔV and cost of the rocket. This is based on the fuel cost and the additional size required to carry excess amounts of fuel. In the initial version of the optimization code, ΔV was the determining factor in choosing the applicable launch parameters, steering coefficients and angles, and the initial launch angle based on this determination.Later reviews of the trajectory revealed that there was significant change in the ΔV due to drag when the rocket was launched from an altitude instead of from the ground.

Author: Scott Breitengross Project Bellerophon 695

References 1 Humble, Ronald W., Henry, Gary N., Larson, Wiley J., Space Propulsion Analysis and Design. The McGraw-Hill Companies Inc. St. Louis, Missouri, 1995.

Author: Scott Breitengross Project Bellerophon 696

A.6.2.5 Trajectory Code

A.6.2.5.1 Main Script The main script calls all the necessary scripts and functions for getting inputs, calculations, outputting the numerical results, and producing plots for one particular set of inputs. We intentionally write the main script so that it represents the entire trajectory code as the “table of contents”. The users should be able to follow the outline of what the entire trajectory code does by taking a look at the main script while the details of the actual computations are located in each script or function that the main script calls. Another important purpose of the main script is to keep track of the log. The entire trajectory code consists of approximately 50 files, counting all the input files, scripts and functions that are necessary to run the entire trajectory code; therefore, it is essential to keep track of who is responsible for what in which file as we develop the trajectory code. We place the log section as comment lines at the beginning of the main script, and the log section consists of 63 % of the script in the final version.

Author: Junichi Kanehara Project Bellerophon 697

A.6.2.5.2 Three-dimensional Plots Plotting the three-dimensional plots that represent the Earth, the launch site and the trajectory of the rocket is the very final job of the trajectory code. In the developing phase of the project, we simply need the three-dimensional plots to judge if the test case gets into an acceptable orbit or not; however, the three-dimensional plots are the final “products” from the trajectory group, so they should be realistic and somewhat artistic as well at the end of the project since we have the final presentation in public.

The mapping toolbox of MATLAB makes it possible to produce a globe. We also implement the orientation of the in the plots. In order to produce three-dimensional plots with those features, the following MATLAB commands are convenient: sphere, surf, plot3, rotate, view, colormap and light.

By using light command, we are able to specify the position of the light source. The distance between the Sun and the Earth is 1 AU, which is approximately 150 million km, and the axial tilt of the Earth is 23.44°, or 0.409 radians.

Z ≈ rθ (A.6.2.5.2.1) where Z is the vertical position from X-Y plane, r is the distance between the Sun, and the Earth and θ is the axial tilt of the Earth.

In our Earth-centered inertial Cartesian coordinating system, the Sun is 61 million [km] above the plane of the equator of the Earth in summer of the northern hemisphere of the Earth, calculating by the equation (A.6.2.5.2.1), which approximates the vertical length by the arc length; we assume it is a good approximation for a technically non-serious calculation.

Once we are able to specify the position of the Sun by light command, it is not difficult to make it possible to specify the date and time, as the Earth rotates once every day and revolves around the Sun once every year; we simply use trigonometric functions. The only part that we need to

Author: Junichi Kanehara Project Bellerophon 698 pay attention to is to make sure to specify the time in UTC, which corresponds to the longitude of 0°; that is why the time in Fig. A.6.2.5.2.1 is specified in UTC.

Fig. A.6.2.5.2.1: Orbit Trajectory at June Solstice, viewing from the latitude of 20° N. (Junichi Kanehara)

Fig. A.6.2.5.2.2: Orbit Trajectory at December Solstice, viewing from the latitude of 20° S. (Junichi Kanehara)

Author: Junichi Kanehara Project Bellerophon 699

In version 3.2 of AAE450_Trajectory_Plots, we are able to specify the time in our local time since it automatically computes UTC based on our local time and time zone. We need an attentive observation of the date and time for this additional feature; for example, 10p.m. on December 31st, or the day 365, in New York (Eastern Standard Time) is 3a.m. on January 1st, or the day one, of UTC.

This way, we are able to produce realistic three-dimensional plots that feature the globe, the orientation of the Sun that is capable of representing the specified date and time, the location of the launch site, and the trajectory of the rocket as shown in Fig. A.6.2.5.2.1 and Fig. A.6.2.5.2.2.

Author: Junichi Kanehara Project Bellerophon 700

A.6.2.5.3 Validation of Equations of Motion It is essential to validate our trajectory code since not only the trajectory group but also other groups use the outputs of our trajectory code. One method of validating our equations of motion and the numerical integrations is to compare ∆Vthrust of historical data to the ∆Vthrust of our code.

∆Vthrust is defined in Eq. (A.6.2.5.3.1):

t burn Tt() Δ=Vdt (A.6.2.5.3.1) thrust ∫ mt() t0

where t0 is the initial time, tburn is the burn time, Tt() is the thrust as a function of time, and mt() is the mass of the launch vehicle as a function of time.

If we set the drag to be 0 N throughout our flight, in other words, if we neglect the atmosphere of the Earth, ∆Vthrust equals to ∆Vpropulsion, which is the ∆V that the propulsion system produces. We compute ∆Vpropulsion by using our trajectory and compare to the historical data of Ariane 4, Saturn V and Pegasus, which are 10,120 m/s, 13,470 m/s and 8,360 m/s respectively1. Running our trajectory codes with the corresponding inputs, our numerical values matched with the historical data in the accuracy of 3 to 5 significant figures; therefore, we conclude that our equations of motion are correct and that we correctly numerically integrate the equations.

References 1 Tsohas, John. Historical data of Ariane 4, Saturn V and Pegasus interview. February 2008.

Author: Junichi Kanehara Project Bellerophon 701

A.6.2.5.4 A vehicle’s ballistic coefficient1 is a “measure of its ability to overcome air resistance in flight”2. The coefficient is given as Eq. (A.6.2.5.4.1).

m Cballistic = (A.6.2.5.4.1) C D S

where m is the current mass, C D is the coefficient of drag (calculated by the Aerothermal group’s solve_cd.m), and S is the reference area (current stage diameter). A larger Cballistic means that a vehicle is massive enough to overcome air resistance during ascent. Unlike smaller launch vehicles, the Saturn V, Ariane 4, and Pegasus vehicles are not as susceptible to the effects of wind and are expected to have much larger Cballistic than our vehicle.

As another way of validating the trajectory model, we perform an analysis comparing the ballistic coefficient of our launch vehicle to the much larger vehicles listed above. Our trajectory code is run with our ground, balloon, or aircraft steering law. Table A.6.2.5.4.1 provides the steering angles at the end of each stage for each launch vehicle run.

Table A.6.2.5.4.1 Key Performance and Steering Law Characteristics

ο ο ο Vehicle m& 1 (kg/s) tb1 (s) ψ 1e ( ) ψ 2e ( ) ψ 3e ( ) Saturn V 13,360.24 161.0 87.0 40.0 0.0 Ariane4 01,112.19 205.0 87.0 40.0 0.0 Pegasus 00206.14 073.0 87.0 -25.0 -30.0 SB-HA-DA-DAa 00006.85 196.5 -14.0 -20.0 -20.0 SG-SA-DT-DTb 00014.21 182.4 0.0 -10.0 -10.0 LG-SA-DT-DTc 0018.391 171.2 34.0 -26.0 -26.0

a. 200 g balloon: 1st stage hybrid aluminum, 2nd stage solid aluminum, 3rd stage solid aluminum b. 200 g ground: 1st stage storable aluminum, 2nd stage solid titanium, 3rd stage solid titanium c. 5 kg ground: 1st stage storable aluminum, 2nd stage solid titanium, 3rd stage solid titanium

Author: Amanda Briden Project Bellerophon 702

For each case, the launch vehicles inputs (i.e. tb, m, T etc.) are changed and come from published data provided by John Tsohas3. The goal of the analysis is to see trends in the change in ballistic coefficient and is not meant to capture the exact value for every vehicle.

The ballistic coefficient variation with time for the larger launch vehicles is plotted in Fig. A.6.2.5.4.1. The coefficient is set to zero after the launch vehicle is out of the atmosphere. Trends match expectations as the Saturn V has the largest ballistic coefficient initially, followed by the Ariane 4 and Pegasus. The Ariane 4 is larger than the Saturn V after 60 s. This is explained by Saturn V’s first stage mass flow rate. It is much larger than the Ariane 4 and has a burn time that is smaller (refer to Table A.6.2.5.4.1). The large dips in the plots occur when the vehicle enters the transonic regime (M = 1) and C D spikes causing a sudden decrease in Cballistic.

Fig. A.6.2.5.4.1: Ballistic coefficient variation with time for larger launch vehicles (i.e. Saturn V, Ariane 4, Pegasus). (Amanda Briden)

Author: Amanda Briden Project Bellerophon 703

In comparison to the Saturn V, our large ground launch vehicle’s ballistic coefficient is approximately 16 times smaller. All of our launch vehicles fit in the lower left hand corner of Fig. A.6.2.5.4.1. A blown up view of that region is displayed in Fig. A.6.2.5.4.2. Within our region, the trends remain consistent as the bigger launch vehicle still has the largest ballistic coefficient.

Fig. A.6.2.5.4.2: Ballistic coefficient variation with time for our launch vehicles (i.e. SB-HA-DA-DA, SG-SA-DT- DT, LG-SA-DT-DT). (Amanda Briden)

The trends match our expectations and provide a boost of confidence in the modeling of drag in the trajectory code.

References 1Longuski, Professor James. “AAE 450 Spacecraft Design Lecture #6 Spring 2008.” Purdue University, West Lafayette, IN. 2 “Ballistic coefficient.” Wikipedia [online], January 18, 2008, URL: http://en.wikipedia.org/wiki/Ballistic_coefficient [cited 27 February 2008]. 3 Tsohas, John. Trajectory Input Values for Historical Launch Vehicles interview. February 2008.

Author: Amanda Briden Project Bellerophon 704

A.6.3 Closing Comments The success of the trajectory design process hinges on the collaborative efforts of the entire trajectory group, as well as the entire design team. There are many things that we think went well in the trajectory design process, as well as many things that we would do differently. In conclusion to the trajectory design section of the appendix, we discuss what we did well, our lessons learned and recommendations we have on future development of the trajectory design.

With the development of the multi-processor distributing capabilities, we were able to analyze more steering angles than we would have been able to manually. This was a good improvement and we recommend that it be used for any large optimization schemes. Another good choice was the use of a spin stabilized third stage. This greatly reduced the time needed to optimize the steering angles, since it reduced the number of angles varied from three to two.

Another aspect of our design on which we are proud of and are glad we implemented, was commenting and cataloging our code. All versions of our code where logged by version number and each new revision was accompanied by a description of the changes that were made from the previous version. Additionally, all of the different versions were compiled and organized online by one person (Junichi Kanehara). This system made it very easy for the entire trajectory group, as well as anyone else on the design team, to access and understand the progression and use of our codes.

With all of the things that went well in the trajectory design, there are also many things that we would do differently. When it came to interfacing with the D&C group to control the launch vehicle trajectory, we found that the optimized nominal trajectory found by the trajectory group was too optimistic for effective control by D&C. If faced with this problem again, we would make sure to work closer with D&C from the beginning of the steering law development phase, instead of waiting until the design was complete. We would also spend more time on refining the steering law for all launch types. A lot of time was spent on the aircraft steering law, while not as much time was spent on the steering law for the ground and balloon launch. This led to some difficulty in comparing the ΔV and cost of the

Author: Elizabeth Harkness Project Bellerophon 705 balloon and aircraft launches. Although the aircraft steering law was more optimized, it was harder for D&C to control.

The benchmarking and validation of our code were difficult, since steering laws and trajectory optimization processes are proprietary information. However, we feel that we should have started with a simplified two dimensional model of the trajectory before attempting to add in the steering laws and degrees of freedom. This would have made it easier in the end for us to benchmark our code and prove that our programs were modeled with the appropriate physics. On that same line, we should have worked more with the structures and propulsion groups to get more accurate input data earlier, so we can benchmark our code sooner. This would allow us to work more closely with the D&C group, so that we can make sure that the trajectory and the D&C models of the system work together satisfactorily, before the final design phase of the project.

Due to the limited time we had to work on the project, there are a few things that we left out of our analysis, which should be considered in future studies. We did not include any delay time between the separation of stages. This is not accurate, since the next stage cannot be fired at the same instant that the previous stage is jettisoned. Throttling the engine was also not considered as a solution to avoid maximum dynamic pressure. To solve these issues, more collaboration with the propulsion group would be needed to model the thrust profile more accurately.

More work also needs to be done on integrating the wind model into the dynamic and force model of the launch vehicle. Because we ultimately decided to use the balloon launch and there is not wind at the launch altitude, the trajectory group did not finish integrating the wind model. If future studies were to use the ground or aircraft launch type, the wind model would need to be implemented, because of greater weather variations at lower altitudes and its effects on the angle of attack of the launch vehicle.

In all, this project taught us many things about working in teams, both small and large, and the development of complex computer simulations. We understand the trajectory design process better and the many different aspects of designing an optimal (or sub-optimal) trajectory. We

Author: Elizabeth Harkness Project Bellerophon 706 learned that the ability to split the calculations between as many computer processors as possible made optimization easier and that keeping good version logs and commenting on changes in code made finding mistakes and transitioning to precious versions easier. We also learned that more communication earlier in the project with the D&C, propulsion and structures groups is essential to a smooth compilation at the end of the project. If we had more time to work on this project, we would write a simpler model of the trajectory and validated it before moving on to more complicated models. We would work with D&C to optimize the steering law further. We would integrate the wind model into the code, so that the effects of angle of attack can be accounted for when launching below 30,000 m and we would further develop the thrust profile with the propulsion group to take into account stage separation and engine throttling.

Author: Elizabeth Harkness Project Bellerophon 707

A.6.4 User’s Guide to Running the Trajectory Code Compiled and Edited by Elizabeth Harkness

The trajectory code is a conglomeration of 27 MATLAB scripts and functions. The following document is meant to be a guide to anyone wishing to use the trajectory code. Each script or function in the trajectory code folder is briefly described here, with a listing of inputs needed and outputs generated. The first section, AAE450_Trajectory_run(_distribute).m, describes how to run the overall code, while the rest of the sections are more detailed descriptions of the separate components. Index AAE450_Trajectory_run(_distribute).m E. Harkness page 708 AAE450_Trajectory_Main.m J. Kanehara page 716 AAE450_Trajectory_Get_Inputs.m J. Kanehara page 717 AAE450_run_traj_Optimization_GB.m D. Chua page 718 (AAE450_run_traj_Optimization_AC.m) AAE450_Trajectory_D2MP.m D. Chua page 719 AAE450_Trajectory_Calculations.m J. Kanehara page 720 AAE450_Trajectory_ODE.m J. Kanehara page 721 AAE450_Trajectory_ODE_AC_1st.m J. Kanehara page 723 AAE450_Trajectory_ODE_AC_2nd.m J. Kanehara page 725 AAE450_Trajectory_ODE_AC_linear.m J. Kanehara page 727 AAE450_Trajectory_ODE_steer.m J. Kanehara page 729 AAE450_Trajectory_ODE_coast.m J. Kanehara page 731 AAE450_Wind_Model.m K. Donahue page 733 atmosphere4.m A. Guzik page 734 solve_cd.m B. Ferris page 735 speedofsound.m B. Ferris page 736 thrustprofile.m B. Ferris page 737 AAE450_Trajectory_GSAC.m A. Briden page 738 AAE450_Trajectory_GSAC_2STO.m A. Briden page 739 AAE450_Trajectory_GSAC_Aircraft_2_3linear_sections.m A. Briden page 740 AAE450_Trajectory_GSAC_Aircraft_3.m A. Briden page 742 Delta_V.m S. Breitengross page 744 AAE450_orbit_param.m A. Guzik page 745 AAE450_Trajectory_outputs.m J. Kanehara page 746 AAE450_Trajectory_Plots.m J. Kanehara page 747 AAE450_Trajectory_Body2Inertial.m J. Kanehara page 768 Code Flowchart: Run Once K. Donahue page 749 Code Flowchart: Optimize S. Breitengross page 752

Author: Elizabeth Harkness Compiled by: Elizabeth Harkness Project Bellerophon 708

AAE450_Trajectory_run(_distribute).m Written by Elizabeth Harkness Revision 1.4 – 18 February 2008

Description: The function AAE450_Trajectory_run.m interfaces between the output of the structures and propulsion codes and the input of the trajectory code while the function AAE450_Trajectory_run_distribute.m interfaces between the output of the structures and propulsion codes and the input of the trajectory code which uses AAE450_Trajectory_D2MP.m or AAE450_Trajectory_D2MP_ac.m to optimize steering angles (for ground/balloon or aircraft respectively). This document describes how AAE450_Trajectory_run.m and AAE450_Trajectory_run_distribute.m function, the required inputs and the expected outputs.

Input Section: To get the inputs from the propulsion/structures code, the main_loop.m (MAT) code needs to be run with the following call line: [ID,Trajectory_Input]= main_loop

Propulsion/Structures Inputs: To make the input file for the AAE450_Trajectory_Main.m code, AAE450_Trajectory_run.m and AAE450_Trajectory_run_distribute.m need to be called with the call line:

AAE450_Trajectory_run(ID,Trajectory_Input) or AAE450_Trajectory_run_distribute(ID,Trajectory_Input)

Author: Elizabeth Harkness Compiled by: Elizabeth Harkness Project Bellerophon 709

All of the variables that are passed into the function from the propulsion/structures codes are described below:

Variable Name Description Run Identifier. This is the code for each case being run. ID E.g. ‘XX-XX-XX’ If the case is running an air launch or ground launch. type E.g. Ground: 1, Balloon: 2, Aircraft: 3. N Number of stages. E.g 1, 2, 3 payload_mass Mass of Payload [kg] E.g. 0.2, 1, 5 m1 Mass of the 1st Stage [kg] m2 Mass of the 2nd Stage [kg] m3 Mass of the 3rd Stage [kg] T1 Average Thrust of first stage. [N] T2 Average Thrust of second stage. [N] T3 Average Thrust of third stage. [N] t_vertical Time of vertical flight [s] t_burn_1 First stage burn time. [s] t_burn_2 Second stage burn time. [s] t_burn_3 Third stage burn time. [s] m_dot_1 Mass flow rate of 1st Stage. [kg/s] m_dot_2 Mass flow rate of 2nd Stage. [kg/s] m_dot_3 Mass flow rate of 3rd Stage. [kg/s] diam_1 Diameter of first stage. [m] diam_2 Diameter of second stage. [m] diam_3 Diameter of third stage. [m] diam_4 Diameter of fourth (payload) stage. [m] Pe_1 Exit pressure of 1st stage engine. [Pa] Pe_2 Exit pressure of 2nd stage engine. [Pa] Pe_3 Exit pressure of 3rd stage engine. [Pa] Ae_1 Exit area of 1st stage engine. [m^2] Ae_2 Exit area of 2nd stage engine. [m^2] Ae_3 Exit area of 3rd stage engine. [m^2]

Author: Elizabeth Harkness Compiled by: Elizabeth Harkness Project Bellerophon 710

User Inputs: AAE450_Trajectory_run.m For Ground and Balloon Launch After the propulsion/structures data has been loaded, the function will then prompt the user to input the steering angles: Variable Name Description psi1_0 Angle at the end of 1st stage vertical [deg] psi1_1 Starting angle for end of first stage variation [deg] psi1_2 Final angle for end of first stage variation [deg] psi_increment Number of increments between psi1_1 and psi1_2 psi2 Angle at the end of 2nd stage [deg] psi3 Angle at the end of 3rd stage [deg] Note: To run only one steering angle, make psi1_1 equal to psi1_2 and set psi_increment to one.

E.g. psi1_1 = 10, psi1_2 = 10, psi_increment = 1.

For Aircraft Launch After the propulsion/structures data has been loaded, the function will then prompt the user to input the steering angles: Variable Name Description angle_tclimb Steering angle at the end of climb [deg] tb2sec1_percent_tb2 Percent of first steering law for stage two [s] psi2 Angle at the end of 2nd stage [deg] psi3 Angle at the end of 3rd stage [deg]

AAE450_Trajectory_run_distribute.m For All Launch Types There are no user generated inputs for AAE450_Trajectory_run_distribute.m, the steering angles are all varied by the program AAE450_Trajectory_D2MP.m (or AAE450_Trajectory_D2MP_ac.m for an aircraft launch).

Internal Inputs: The following inputs are defined internally in AAE450_Trajectory_run.m and AAE450_Trajectory_run_distribute.m. These values should not need altering by the casual user (if ever). They include all initial conditions (these are set to vary with the type of launch), as well as some placeholder variables (labeled 4) for the orbit propagation stage.

Author: Elizabeth Harkness Compiled by: Elizabeth Harkness Project Bellerophon 711

Variable Name Description h_i Initial altitude [m] psi1_0 ***Initial launch angle [deg] r_dot_i_1 Initial radial velocity [m/s] theta_dot_i_1 Initial tangential velocity [rad/s] launch_lat Launch latitude [deg] launch_long Launch longitude [deg] phi_dot_i_1 Initial phi velocity [rad/sec] b_1 Coefficient of angle at the end of 1st vertical stage. R_Earth Radius of the Earth [m] t_vertical Time of vertical flight to clear launch tower. [sec] *** Note: For AAE450_Trajectory_run_distribute.m only. The values for these variables are shown below:

%% User non-variable inputs. R_Earth = 6376*1000; launch_lat = 28; %[deg] launch_long = -80; t_vertical = 10; %[sec] (psi1_0 = 88;) ...... % Set initial conditions for different launches if type == 1 % Ground h_i = 0; r_i_1=R_Earth+h_i; % [m] r_dot_i_1 = 0; % [m/sec] theta_i_1=launch_long*pi/180; % [rad] theta_dot_i_1 = 0; % [rad] phi_i_1=(90-launch_lat)*pi/180; % [rad] phi_dot_i_1=0; % [rad/s] b_1=tan(psi1_0*pi/180); end if type == 2 % Balloon h_i = 30000; r_i_1=R_Earth+h_i; % [m] r_dot_i_1 = 0; % [m/sec] theta_i_1=launch_long*pi/180; % [rad] theta_dot_i_1 = 0; % [rad] phi_i_1=(90-launch_lat)*pi/180; % [rad] phi_dot_i_1=0; % [rad/s] b_1=tan(psi1_0*pi/180); end if type == 3 % Airplane h_i = 15000; % Launch Altitude (from MSL) [m] {Pegasus deployment Altitude} r_i_1=R_Earth+h_i; r_dot_i_1 = 0; % [m/sec] theta_i_1=launch_long*pi/180; theta_dot_i_1=59.72/r_i_1; % [rad/s] phi_i_1=(90-launch_lat)*pi/180;

Author: Elizabeth Harkness Compiled by: Elizabeth Harkness Project Bellerophon 712

phi_dot_i_1=0; b_1=tan(angle_tclimb*pi/180); end

% Coasting Orbit Propagation Parameters m4=0; T4 = 0; % Zero thrust for coasting. t_burn_4=3*60^2; % [s] for orbit trajectory m_dot_4=0; % Mass flow rate of coasting Stage [kg/s] Pe_4=0; % Exit pressure, 4th stage engine [Pa] Ae_4=0; % Exit area, 4th stage engine [m^2] diam_4=0; ...... if N==2 t_burn_3=0; m_dot_3=0; T3 = 0; End

Output Section: The function creates an input file called AAE450_Trajectory_Inputs.m this is the input file used by AAE450_Trajectory_Main.m. After writing the input file, the main trajectory code needs to be run to generate the solution. The call line is simply:

AAE450_Trajectory_Main for AAE450_Trajectory_run.m and

AAE450_Trajectory_D2MP for AAE450_Trajectory_run_distribute.m.

Or, for an aircraft launch, AAE450_Trajectory_D2MP_ac

Note: Before running AAE450_Trajectory_Main.m, make sure that the script AAE450_Get_Inputs.m has the script AAE450_Trajectory_Inputs.m as the only uncommented line. Otherwise, AAE450_Trajectory_Main.m will not load the correct inputs. Once AAE450_Trajectory_Main.m has been run, an output file will be written. This output file is a copy of what has been printed to the MATLAB Command Window and is named with the Case ID number that was assigned to it. (E.g. MG-CA-DS-DC)

Author: Elizabeth Harkness Compiled by: Elizabeth Harkness Project Bellerophon 713

AAE450_Trajectory_run.m Sample Output: The output of AAE450_Trajectory_run(_distribute).m is the input file for the AAE450_Trajectory_Main.m. File: AAE450_Trajectory_Inputs.m: ID = 'SB-HA-DA-DA.txt'; type = 2.0000000000; airplane = 0.0000000000; N = 3.0000000000; h_i = 30000.0000000000; r_i_1 = 6406000.0000000000; r_dot_i_1 = 0.0000000000; theta_dot_i_1 = 0.0000000000; payload_mass = 0.2000000000; t_vertical = 10.0000000000; t_burn_1 = 147.7675026979; t_burn_2 = 160.8812170075; t_burn_3 = 206.2408603065; psi1_1 = psi1orig; psi2 = psi2orig; psi3 = psi3orig; psi1_0 = 88.0000000000; m1 = 437.8415091229; m2 = 91.5734691245; m3 = 31.2258015670; T1 = 6606.1670069556; T2 = 1392.5576461998; T3 = 355.7926808351; m_dot_1 = 2.0741303114; m_dot_2 = 0.4325914350; m_dot_3 = 0.1105253106; diam_1 = 0.7731278821; diam_2 = 0.3350953988; diam_3 = 0.2309862864; diam_4 = 0.0000000000; Pe_1 = 2821.1669372331; Pe_2 = 11453.6603989692; Pe_3 = 11453.6603989692; Ae_1 = 0.1054496676; Ae_2 = 0.0064027858; Ae_3 = 0.0016358851; launch_lat = 28.0000000000; launch_long = -80.0000000000; theta_i_1 = -1.3962634016; phi_i_1 = 1.0821041362; phi_dot_i_1 = 0.0000000000; b_1 = 28.6362532829; phi_i_1 = 1.0821041362; m4 = 8.4309664231; T4 = 0.0000000000; t_burn_4 = 32400.0000000000; m_dot_4 = 0.0000000000; Pe_4 = 0.0000000000; Ae_4 = 0.0000000000; m0_1 = 560.8407798144; m0_2 = 122.9992706915; m0_3 = 31.4258015670; m0_4 = 8.6309664231;

Author: Elizabeth Harkness Compiled by: Elizabeth Harkness Project Bellerophon 714

Sample Output for Entire Trajectory Code: The following is a sample output of the entire trajectory code (this is the output of the code AAE450_Trajectory_outputs.m). This is output to both the MATLAB command window as well as to a text file that has the same name as the case ID:

Currently running 24 deg case.

*************************************** Output from AAE450_Trajectory_outputs.m *************************************** Case ID: LB_HA_DA_DA Orbital Parameters Period: 6038.7878 [s] Semi-major axis: 7167.36 [km] eccentricity: 0.0025 periapsis: 773.14 [km](from the surface of the Earth) apoapsis: 809.57 [km](from the surface of the Earth) Linear Tangent Steering Parameters: a1 = -0.16117 b1 = 28.6363 a2 = -0.00502483 b2 = 1.32415 a3 = 2.86231e-019 b3 = -0.624869 Flight Path Angle = 0.1 [deg].

at t=0[s]: Altitude: h=30000 [m] (Initial Condition) Radial(Vertical) Speed: Vr=0 [m/s] (Initial Condition) Payload Mass= 5.000 [kg] GLOW= 6294.7686 [kg]

Thrust 1st stage: 75.073 [kN] 2nd stage: 15.257 [kN] 3rd stage: 0.692 [kN]

Max Acceleration Max a @1st Stage= 28.5 [m/s^2] Max a @1st Stage= 2.90 G Max a @2nd Stage= 51.2 [m/s^2] Max a @2nd Stage= 5.22 G Max a @3rd Stage= 39.0 [m/s^2] Max a @3rd Stage= 3.97 G Max a @Coasting Stage= 3.8 [m/s^2] Max a @Coasting Stage= 0.38 G

Burn Times 1st Stage: 175[s] (first 10.00 [s] is vertical flight) 2nd Stage: 212.96[s] 3rd Stage: 178.40[s]

Times at the end of each stage End of first stage: 174.00[s] End of second stage: 386.00[s] End of third stage: 564.00[s]

Constant Mass Flow Rates 1st Stage: 23.571[kg/s] 2nd Stage: 4.739[kg/s] 3rd Stage: 0.215[kg/s]

Author: Elizabeth Harkness Compiled by: Elizabeth Harkness Project Bellerophon 715

Constant Exit Pressures 1st Stage: 2.82[kPa] 2nd Stage: 11.45[kPa] 3rd Stage: 11.45[kPa]

Altitudes at the end of the vertical part of flight: 30112.44[m] at t= 0 [s] : 30.00[km] at the end of the first stage: 131.57[km] at the end of the second stage: 560.08[km] at the end of the third stage: 801.62[km] from AAE450_Delta_V.m Delta_V_Thrust_1st= 3486 [m/s] (29.4 percent) Delta_V_Thrust_2nd= 4775 [m/s] (40.3 percent) Delta_V_Thrust_3rd= 3592 [m/s] (30.3 percent) Delta_V_Thrust_Total (what we get)= 11853 [m/s]

Delta_V_Leo= 7727 [m/s] Delta_V_Grav= 2034 [m/s] DeltaV_drag= 4 [m/s] Delta_V_Earth_assist= 411 [m/s] Delta_V_Total (what we need)= 9354 [m/s] Delta V required to circularize: 568 [m/s]

************************************************************

Note: it takes approximately 20[s] to produce all the plots. Please wait until you get the three figures of 3-D plots.

There are six plots that are output:

Figure 1: Distance from the ground versus time Figure 3: Radial speed versus time Figure 5: Tangential speed versus time Figure 6: Three views of the 3D orbit and trajectory Figure 7: One view of the orbit (with wireframe Earth) Figure 8: One view of the orbit (with solid sphere Earth)

Author: Elizabeth Harkness Compiled by: Elizabeth Harkness Project Bellerophon 716

AAE450_Trajectory_Main.m Written by Junichi Kanehara Revision 1.0 – 16 March 2008

Description: AAE450_Trajectory_Main.m is the main script of the trajectory code. This code calls all the necessary scripts and functions in order to compute and output the numerical results and produce plots for one particular set of input.

Assumptions: All necessary inputs are assumed to be given by the input file, AAE450_Trajectory_Inputs.m, which has either been created by AAE450_Trajectory_run.m or AAE450_Trajectory_run_distribute.m as described above.

Important Notes: The log section of this main script addresses the modifications in every component of the entire trajectory code.

Input Section: The call line of the script is: AAE450_Trajectory_Main

Output Section: There is no “output” in the way a function does since this is a script.

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 717

AAE450_Get_Inputs.m Written by Junichi Kanehara Revision 1.0 – 16 March 2008

Description: This is a simple script that chooses which input file to call.

Important Notes: In the early version of the codes, AAE450_Trajectory_default_inputs was usually called. In the later version of the codes, AAE450_Trajectory_Inputs was usually called. In the final version of the codes, the winners of each case such as LB_HA_DA_DA_v125_Inputs should be called.

Input Section: The call line of the function is: AAE450_Get_Inputs

Output Section: All the necessary input variables should be obtained by this script, as it calls an input file.

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 718

AAE450_run_traj_Optimization_GB.m (AAE450_run_traj_Optimization_AC.m) Written by Daniel Chua Revision 1.0 – 10 March 2008

Description: AAE450_run_traj_Optimization_GB.m runs AAE450_Trajectory_Main.m multiple times for each given steering angle. AAE450_run_traj_Optimization_AC.m runs AAE450_Trajectory_Main.m multiple times for each given aircraft input.

Input Section: The input to AAE450_run_traj_Optimization_GB(AC).m is the input file generated by AAE450_Trajectory_run_distribute.m.

Output Section: For each iteration of steering angle through AAE450_Trajectory_Main.m, AAE450_run_traj_Optimization_GB(AC).m outputs the results to the following files: • outfile.txt : an output file holding the results of feasible iterations of AAE450_Trajectory_Main.m • failfile.txt : an output file holding the results of infeasible iterations of AAE450_Trajectory_Main.m • optcount.txt : an output file used to track the number of completed iterations

Author: Daniel Chua Compiled by: Elizabeth Harkness Project Bellerophon 719

AAE450_Trajectory_D2MP.m Written by Daniel Chua Revision 1.0 – 10 March 2008

Description: AAE450_Trajectory_D2MP.m runs AAE450_run_traj_Optimization_GB(AC).m multiple times, narrowing the range of steering angles input into AAE450_run_traj_Optimization_GB(AC).m with each iteration. The least eccentric output from AAE450_run_traj_Optimization_GB(AC).m is displayed and used to run AAE450_Trajectory_Main.m to show the results of using the steering angles that give the least eccentric trajectory. If the Distributed Computing Toolbox (DCT) is installed, the optimization process is distributed to as many processors as are available to MATLAB.

Author: Daniel Chua Compiled by: Elizabeth Harkness Project Bellerophon 720

AAE450_Trajectory_Calculations.m Written by Junichi Kanehara Revision 1.0 – 16 March 2008

Description: This is a script called by AAE450_Trajectory_Main.m that computes the time history of the position and the velocity in the spherical coordinating system and ΔV’s in each stage by calling ODE files (described below).

Input Section: The call line of the function is: AAE450_Trajectory_Calculations

Output Section: The main output of this script is the time history of the position and the velocity in the spherical coordinating system. Please see the description of AAE450_Delta_V.m for ΔV’s.

Variable Name Description r The radial position from the center of the Earth [m] r_dot The radial velocity [m/s] theta One component of angular position [rad] theta_dot One component of angular velocity [rad/s] phi The other component of angular position [rad] phi_dot The other component of angular velocity [rad/s] V Speed of the rocket [m/s]

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 721

AAE450_Trajectory_ODE.m Written by Junichi Kanehara Revision 1.0 – 17 March 2008

Description: This is an ordinary solver; the state variables 1 through 6 are for the time history of the position and the velocity in the spherical coordinating system, and the state variables 7 and 8 are the ΔV’s due to the drag and the propulsion respectively. The first line of this function is: function xdot=AAE450_Trajectory_ODE(t,x,T_full,m0,m_dot,Pe,Ae,t_burn,diam)

Assumptions: It is assumed that the rocket is launched vertically and is not steering.

Important Notes: Since this is an ODE, we need the initial conditions, which are defined when the input file is written: x_i_1v=[r_i_1 r_dot_i_1 theta_i_1 theta_dot_i_1 phi_i_1 phi_dot_i_1 0 0]; t_i_1v=[0:time_step:t_vertical];

Input Section: The call line of the function is: [t1_v,x1_v]= ode45(@(t,x)AAE450_Trajectory_ODE(t,x,T1_temp,m0_1,m_dot_1,Pe_1,Ae_1, t_burn_1,diam_1),t_i_1v,x_i_1v,options);

All of the variables that are passed into the function are described below:

Variable Name Description t Time vector [s] x State Variables Constant Thrust [N] T_full Note: thrustprofile.m should be used inside the ODE. m0 Initial Mass of the rocket [kg] m_dot Constant mass flow rate [kg/s] Pe Exit Pressure [Pa] Ae Exit Area [ m2 ] t_burn Burn time [s] diam Cross sectional diameter of the rocket [m]

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 722

Output Section: The following commands are used to convert from the state variables to the variables with physical meanings, which will be used in the calculations section of the main program: r_1_v=x1_v(:,1); r_dot_1_v=x1_v(:,2); theta_1_v=x1_v(:,3); theta_dot_1_v=x1_v(:,4); phi_1_v=x1_v(:,5); phi_dot_1_v=x1_v(:,6); deltaV_1v_drag=(x1_v(:,7)); deltaV_1v_drag=deltaV_1v_drag(length(deltaV_1v_drag)); deltaV_1v_thrust=(x1_v(:,8)); deltaV_1v_thrust=deltaV_1v_thrust(length(deltaV_1v_thrust));

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 723

AAE450_Trajectory_ODE_AC_1st.m Written by Junichi Kanehara Revision 1.0 – 17 March 2008

Description: This is an ordinary differential equation solver for the first stage of the aircraft launch; the state variables 1 through 6 are for the time history of the position and the velocity in the spherical coordinating system, and the state variables 7 through 9 are the ΔV’s due to the drag, the gravity loss and the propulsion respectively. The first line of this function is: function xdot=AAE450_Trajectory_ODE_AC_1st(t,x,T_full,m0,m_dot,a,Pe,Ae,t_burn,diam)

Assumptions: We assume that the rocket is launched from an aircraft and is steering.

Important Notes: Since this is an ODE, we need the initial conditions: x_i_1s=[r_i_1 r_dot_1_s theta_i_1 theta_dot_i_1 phi_i_1 phi_dot_i_1 0 0 0]; t_i_1s=[0:time_step:t_burn1];

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 724

Input Section: The call line of the function is:

[t1_s,x1]=ode45(@(t,x)AAE450_Trajectory_ODE_AC_1st(t,x,T1,m0_1_v,m_dot_1,a_1 Pe_1,Ae_1,t_burn_1,diam_1),t_i_1s,x_i_1s,options);

All of the variables that are passed into the function are described below:

Variable Name Description t Time vector [s] x State Variables Constant Thrust [N] T_full Note: thrustprofile.m should be used inside the ODE. m0 Initial Mass of the rocket [kg] m_dot Constant mass flow rate [kg/s] Pe Exit Pressure [Pa] Ae Exit Area [ m2 ] t_burn Burn time [s] diam Cross sectional diameter of the rocket [m] a The Coefficient of the Steering Law

Output Section: The following commands are useful to convert from the state variables to the variables with physical meanings: r_1=x1(:,1); r_dot_1=x1(:,2); theta_1=x1(:,3); theta_dot_1=x1(:,4); phi_1=x1(:,5); phi_dot_1=x1(:,6); deltaV_1s_drag=(x1(:,7)); deltaV_1s_drag=deltaV_1s_drag(length(deltaV_1s_drag)); deltaV_1s_gravity=(x1(:,8)); deltaV_1s_gravity=deltaV_1s_gravity(length(deltaV_1s_gravity)); deltaV_1s_thrust=(x1(:,9)); deltaV_1s_thrust=deltaV_1s_thrust(length(deltaV_1s_thrust));

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 725

AAE450_Trajectory_ODE_AC_2nd.m Written by Junichi Kanehara Revision 1.0 – 17 March 2008

Description: This is an ordinary differential equation solver for the second stage of the aircraft launch; the state variables 1 through 6 are for the time history of the position and the velocity in the spherical coordinating system, and the state variables 7 through 9 are the ΔV’s due to the drag, the gravity loss and the propulsion respectively. The first line of this function is: function xdot=AAE450_Trajectory_ODE_AC_2nd(t,x,T_full,m0,m_dot,a2sec1,b2sec1,a2sec2, b2sec2,a2sec3,b2sec3,Pe,Ae,t_burn,diam,tsec1,tsec2);

Assumptions: We assume that the rocket is launched from an aircraft and is steering.

Important Notes: Since this is an ODE, we need the initial conditions: x_i_2=[r_i_2 r_dot_i_2 theta_i_2 theta_dot_i_2 phi_i_2 phi_dot_i_2 0 0 0]; t_i_2=[0:time_step:t_burn2];

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 726

Input Section: The call line of the function is:

[t2,x2]=ode45(@(t,x)AAE450_Trajectory_ODE_AC_2nd(t,x,T2,m0_2,m_dot_2,a2_sec1, b2_sec1,a2_sec2,b2_sec2,a2_sec3,b2_sec3,Pe_2,Ae_2, t_burn_2,diam_2,tb2_sec1,tb2_sec2),t_i_2,x_i_2,options);

Some of the variables that are passed into the function are described below:

Variable Name Description T Time vector [s] x State Variables Constant Thrust [N] T_full Note: thrustprofile.m should be used inside the ODE. m0 Initial Mass of the rocket [kg] m_dot Constant mass flow rate [kg/s] Pe Exit Pressure [Pa] Ae Exit Area [ m2 ] t_burn Burn time [s] diam Cross sectional diameter of the rocket [m] a2_sec1 a Coefficient of the Steering Law tb2_sec1 Time for the first segment [s]

Output Section: The following commands are useful to convert from the state variables to the variables with physical meanings: r_2=x2(:,1); r_dot_2=x2(:,2); theta_2=x2(:,3); theta_dot_2=x2(:,4); phi_2=x2(:,5); phi_dot_2=x2(:,6); deltaV_2_drag=(x2(:,7)); deltaV_2_drag=deltaV_2_drag(length(deltaV_2_drag)); deltaV_2_gravity=(x2(:,8)); deltaV_2_gravity=deltaV_2_gravity(length(deltaV_2_gravity)); deltaV_2_thrust=(x2(:,9)); deltaV_2_thrust=deltaV_2_thrust(end);

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 727

AAE450_Trajectory_ODE_AC_linear.m Written by Junichi Kanehara Revision 1.0 – 17 March 2008

Description: This is an ordinary differential equation solver for the third stage of the aircraft launch; the state variables 1 through 6 are for the time history of the position and the velocity in the spherical coordinating system, and the state variables 7 through 9 are the ΔV’s due to the drag, the gravity loss and the propulsion respectively. The first line of this function is: function xdot=AAE450_Trajectory_ODE_AC_linear(t,x,T_full,m0,m_dot,a,b,Pe,Ae,t_burn,diam)

Assumptions: We assume the rocket is launched from an aircraft and is steering.

Important Notes: Since this is an ODE, we need the initial conditions: x_i_3=[r_i_3 r_dot_i_3 theta_i_3 theta_dot_i_3 phi_i_3 phi_dot_i_3 0 0 0]; t_i_3=[0:time_step:t_burn3];

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 728

Input Section: The call line of the function is:

[t3,x3]=ode45(@(t,x) AAE450_Trajectory_ODE_AC_linear (t,x,T3,m0_3,m_dot_3,a_3,b_3,Pe_3,Ae_3,t_burn_3, diam_3),t_i_3,x_i_3,options);

All of the variables that are passed into the function are described below:

Variable Name Description t Time vector [s] x State Variables Constant Thrust [N] T_full Note: thrustprofile.m should be used inside the ODE. m0 Initial Mass of the rocket [kg] m_dot Constant mass flow rate [kg/s] Pe Exit Pressure [Pa] Ae Exit Area [ m2 ] t_burn Burn time [s] diam Cross sectional diameter of the rocket [m] a a Coefficient of the Steering Law b a Coefficient of the Steering Law

Output Section: The following commands are useful to convert from the state variables to the variables with physical meanings: r_3=x3(:,1); r_dot_3=x3(:,2); theta_3=x3(:,3); theta_dot_3=x3(:,4); phi_3=x3(:,5); phi_dot_3=x3(:,6); deltaV_3_drag=(x3(:,7)); deltaV_3_drag=deltaV_3_drag(length(deltaV_3_drag)); deltaV_3_gravity=(x3(:,8)); deltaV_3_gravity=deltaV_3_gravity(length(deltaV_3_gravity)); deltaV_3_thrust=(x3(:,9)); deltaV_3_thrust=deltaV_3_thrust(end);

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 729

AAE450_Trajectory_ODE_steer.m Written by Junichi Kanehara Revision 1.0 – 17 March 2008

Description: This is an ordinary differential equation solver for the ground launch and the balloon launch; the state variables 1 through 6 are for the time history of the position and the velocity in the spherical coordinating system, and the state variables 7 through 9 are the delta V’s due to the drag, the gravity loss and the propulsion respectively. The first line of this function is: function xdot=AAE450_Trajectory_ODE_steer (t,x,T_full,m0,m_dot,a,b,Pe,Ae,t_burn,diam)

Assumptions: We assume the rocket is steering, following the linear tangent law.

Important Notes: Since this is an ODE, we need the initial conditions: x_i_2=[r_i_2 r_dot_i_2 theta_i_2 theta_dot_i_2 phi_i_2 phi_dot_i_2 0 0 0]; t_i_2=[0:time_step:t_burn_2];

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 730

Input Section: The call line of the function is: [t2,x2]=ode45(@(t,x) AAE450_Trajectory_ODE_steer(t,x,T2,m0_2,m_dot_2,a_2,b_2, Pe_2,Ae_2,t_burn_2,diam_2),t_i_2,x_i_2,options);

All of the variables that are passed into the function are described below:

Variable Name Description t Time vector [s] x State Variables Constant Thrust [N] T_full Note: thrustprofile.m should be used inside the ODE. m0 Initial Mass of the rocket [kg] m_dot Constant mass flow rate [kg/s] Pe Exit Pressure [Pa] Ae Exit Area [ m2 ] t_burn Burn time [s] diam Cross sectional diameter of the rocket [m] a a Coefficient of the Steering Law b a Coefficient of the Steering Law

Output Section: The following commands are useful to convert from the state variables to the variables with physical meanings: r_2=x2(:,1); r_dot_2=x2(:,2); theta_2=x2(:,3); theta_dot_2=x2(:,4); phi_2=x2(:,5); phi_dot_2=x2(:,6); deltaV_2_drag=(x2(:,7)); deltaV_2_drag=deltaV_2_drag(length(deltaV_2_drag)); deltaV_2_gravity=(x2(:,8)); deltaV_2_gravity=deltaV_2_gravity(length(deltaV_2_gravity)); deltaV_2_thrust=(x2(:,9)); deltaV_2_thrust=deltaV_2_thrust(end);

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 731

AAE450_Trajectory_ODE_coast.m Written by Junichi Kanehara Revision 1.0 – 17 March 2008

Description: This is an ordinary differential equation solver for the coasting stage in orbit; the state variables 1 through 6 are for the time history of the position and the velocity in the spherical coordinating system. The first line of this function is: function xdot=AAE450_Trajectory_ODE_coast(t,x,T,m0,m_dot,C_D,Pe,Ae,t_burn,diam)

Assumptions: We assume that no thrust or drug is acting.

Important Notes: Since this is an ODE, we need the initial conditions: x_i_4=[r_i_4 r_dot_i_4 theta_i_4 theta_dot_i_4 phi_i_4 phi_dot_i_4 0]; t_i_4=[0:time_step:t_burn_4];

Input Section: The call line of the function is: [t4,x4]=ode45(@(t,x) AAE450_Trajectory_ODE_coast(t,x,T4,m0_4,m_dot_4, C_D_orbit,Pe_4,Ae_4,t_burn_4,diam_4),t_i_4,x_i_4,options);

Some of the variables that are passed into the function are described below:

Variable Name Description t Time vector [s] x State Variables T Thrust = 0 [N] Length of Time to run this ODE [s] t_burn This should be longer than one period of the orbit.

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 732

Output Section: The following commands are useful to convert from the state variables to the variables with physical meanings: r_4=x4(:,1); r_dot_4=x4(:,2); theta_4=x4(:,3); theta_dot_4=x4(:,4); phi_4=x4(:,5); phi_dot_4=x4(:,6);

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 733

AAE450_Wind_Model.m Written by Kyle Donahue Revision 1.0 – 24 March 2008

Description: AAE450_Wind_Model.m uses atmosphere4.m to help create a wind profile. The wind profile is made up of a constant wind profile and randomized wind gusting. It also creates the wind force which the wind velocity causes on the launch vehicle.

Assumptions: One assumption is the constant wind can only go from 0o to 180o on the compass. The wind gusting angle can only be ±90o from the constant wind at the given altitude. Also the wind is only 2-D which means it will never go “up” or “down”.

Important Notes: The log section of this script addresses the modifications in every component of the entire trajectory code.

Input Section: The call line of the script is: AAE450_Wind_Model

Output Section: The output is only plots of the wind profile in the north/south direction, the wind profile in the east/west direction, the force of the wind in the north/south direction, and the force of the wind in the east/west direction. It also puts the wind force Fw variable in the workspace so it can be used in the equations of motion.

Author: Kyle Donahue Compiled by: Elizabeth Harkness Project Bellerophon 734 atmosphere4.m Written by Allen Guzik Revision 1.0 – 24 March 2008

Description: This function calculates static conditions of Earth’s atmosphere based on a given altitude. This program was no written by the design team. However, it is commonly used and accepted as a source to obtain standard atmospheric conditions.

Assumptions: Data is based off of the 1976 NASA standard atmosphere.

Input Section: The call line of the function is: [temp,press,rho,Hgeopvector]=atmosphere4(Hvector,GeometricFlag)

All of the variables that are passed into the function are described below:

Variable Name Description Hvector Vector of geopotential or geometric altitudes [ft] Denote if the altitude is geopotential or GeometricFlag geometric.

Output Section: Atmospheric conditions calculated are:

Variable Name Description temp Temperature [°R] press Pressure [lbf/ft2] rho Density [slug/ft3] Hgeopvector Vector of corresponding geopotential altitudes [ft].

Author: Allen Guzik Compiled by: Elizabeth Harkness Project Bellerophon 735 solve_cd.m Written by Brad Ferris Revision 1.0 – 07 March 2008

Description: This function was originally written by Jayme Zott from the Aerothermal group. The function was implemented into AAE450_Trajectory_Main.m by Brad Ferris. This function calculates a coefficient of drag value based on the current flight Mach number. This allows AAE450_Trajectory_Main.m to more accurately model drag throughout the launch vehicle’s flight.

Input Section: The flight Mach number is input from the ODE functions.

Output Section: The coefficient of drag corresponding to the input Mach number is output to the ODE functions.

Author: Brad Ferris Compiled by: Elizabeth Harkness Project Bellerophon 736 speedofsound.m Written by Brad Ferris Revision 1.0 – 07 March 2008

Description: This function calculates the current speed of sound.

Input Section: The current flight temperature is input from atmosphere4.m and AAE450_Trajectory_Calculations.m.

Output Section: The speed of sound corresponding to current flight conditions is output to the body of the code.

Author: Brad Ferris Compiled by: Elizabeth Harkness Project Bellerophon 737 thrustprofile.m Written by Brad Ferris Revision 1.0 – 07 March 2008

Description: The purpose of this function is to model the ramp up and ramp down times of a rocket engine. In its most current revision, the ramp up and ramp down times are one second.

Input Section: The maximum nominal input, the total burn time, and current time are input into the function.

Output Section: The thrust corresponding to the current flight time is output to the ODE functions. If the point of time is during the ramping period, the thrust returned will be less than maximum thrust.

Author: Brad Ferris Compiled by: Elizabeth Harkness Project Bellerophon 738

AAE450_Trajectory_GSAC.m Written by Amanda Briden Revision 1.0 – 16 March 2008

Description: This script determines the steering angle coefficients for a linear tangent steering law for each stage of a balloon or ground launch. It then saves the coefficients to a text file called ab.txt.

Assumptions: The desired steering angles at the end of each stage and the burn times for each stage are already defined.

Important Notes: This script is only called in AAE450_Trajectory _Main.m if there are three stages and if the launch configuration is balloon or ground.

Input Section: The call line of the script is: AAE450_Trajectory_GSAC

Output Section: The linear tangent steering law coefficients are defined based on the desired orientation of the rocket at the end of each stage and the burn time for each stage.

Variable Name Description Steer_coeffs [a_1temp b_1temp; a_2temp b_2temp; a_3temp b_3temp]

Sample Output: A sample ab.txt file is shown below. Note that the right column is a and the left column is b. The rows designate the stage.

-2.2410717e-001 2.8636253e+001 -1.6214735e-003 3.4671470e-001 0.0000000e+000 -1.7632698e-001

Author: Amanda Briden Compiled by: Elizabeth Harkness Project Bellerophon 739

AAE450_Trajectory_GSAC_2STO.m Written by Amanda Briden Revision 1.0 – 16 March 2008

Description: This script determines the steering angle coefficients for a linear tangent steering law for each stage of a balloon or ground launch. It then saves the coefficients to a text file called ab.txt.

Assumptions: The desired steering angles at the end of each stage and the burn times for each stage are already defined.

Important Notes: This script is only called in AAE450_Trajectory_Main.m if there are two stages and if the launch configuration is balloon or ground.

Input Section: The call line of the script is: AAE450_Trajectory_GSAC_2STO

Output Section: The linear tangent steering law coefficients are defined based on the desired orientation of the rocket at the end of each stage and the burn time for each stage.

Variable Name Description Steer_coeffs [a_1temp b_1temp; a_2temp b_2temp]

Sample Output: A sample ab.txt file is shown below. Note that the right column is a and the left column is b. The rows designate the stage.

-2.2410717e-001 2.8636253e+001 -1.6214735e-003 3.4671470e-001

Author: Amanda Briden Compiled by: Elizabeth Harkness Project Bellerophon 740

AAE450_Trajectory_GSAC_Aircraft_2_3linear_sections.m Written by Amanda Briden Revision 1.0 – 16 March 2008

Description: This script determines the steering angle coefficients for the first and second stages of an aircraft launch (with the rocket initially positioned horizontally). A tangent steering law is applied to the first stage until the rocket is pointed to 88°. The second stage steering law is broken up into three linear parts. The coefficient a for the first stage steering law, the slope and intercept for the three linear sections of the second stage steering law, and the amount of time of the second stage burn time devoted to the first and second sections of the second stage linear steering laws are determined. These are saved in a text file called ab_AC2.txt in AAE450_Trajectoy_Main.m.

Assumptions: The desired steering angles at the end of each stage, the burn times for each stage, and the percent of the 2nd stage burn time that the first linear portion of the steering law should be applied to are already defined.

Important Notes: This script is only called in AAE450_Trajectoy_Main.m if there are two stages and if the launch configuration is aircraft.

Input Section: The call line of the script is: AAE450_Trajectory_GSAC_Aircraft_2_3linear_sections

Author: Amanda Briden Compiled by: Elizabeth Harkness Project Bellerophon 741

Output Section: The following variables create a continuous steering law.

Variable Name Description a_1 Coefficient defining the 1st stage tangent steering law b_1 This value is always zero. Slope coefficient describing the 1st linear section of the 2nd stage linear a2_sec1 steering law Slope coefficient describing the 2nd linear section of the 2nd stage linear a2_sec2 steering law Slope coefficient describing the 3rd linear section of the 2nd stage linear a2_sec3 steering law Intercept coefficient describing the 1st linear section of the 2nd stage linear b2_sec1 steering law Intercept coefficient describing the 2nd linear section of the 2nd stage linear b2_sec2 steering law Intercept coefficient describing the 3rd linear section of the 2nd stage linear b2_sec3 steering law The amount of time of the second stage burn time devoted to the tb2sec1 implementation of the second stage’s first linear steering law portion. The amount of time of the second stage burn time devoted to the tb2sec2 implementation of the second stage’s second linear steering law portion.

Sample Output: A sample ab_AC2.txt file is shown below. The order is as such: tb2sec1 tb2sec2 a_1 b_1 a2_sec1 b2_sec1 a2_sec2 b2_sec2 a2_sec3 b2_sec3

8.0000000e+000 2.8000000e+001 1.9081137e+000 0.0000000e+000 -1.0864092e+001 8.7000000e+001 -4.3633231e-003 1.2217305e-001 -8.3910060e-003 2.3494817e-001

Author: Amanda Briden Compiled by: Elizabeth Harkness Project Bellerophon 742

AAE450_Trajectory_GSAC_Aircraft_3.m Written by Amanda Briden Revision 1.0 – 16 March 2008

Description: This script determines the steering angle coefficients for the third stage of an aircraft launch (with the rocket initially positioned horizontally). The third stage is a linear steering law that continues from the end of the second stage. The user can specify that the steering angle at the end of the second stage matches the end of the third, thus allowing for spin stabilization of the rocket’s third stage. The coefficient for the slope and intercept for the third stage are determined. These are appended to the end of the array specified in AAE450_Trajectory_GSAC_Aircraft_2_3linear_sections.m and the entire array is then saved in a text file called ab_AC3.txt in AAE450_Trajectory_Main.m.

Assumptions: The desired steering angles at the end of the second and third stages, the burn times for the third stage should already be defined.

Important Notes: This script is only called in AAE450_Trajectoy_Main.m if there are three stages and if the launch configuration is aircraft.

Input Section: The call line of the script is: AAE450_Trajectory_GSAC_Aircraft_3

Output Section: The following variables create a continuous steering law.

Variable Name Description a_3 Coefficient defining the 3rd stage linear steering law b_3 Intercept coefficient describing the 3rd stage linear steering law

Author: Amanda Briden Compiled by: Elizabeth Harkness Project Bellerophon 743

Sample Output: A sample ab_AC3.txt file is shown below. The order is as such (the other variables have been defined in the user guide for AAE450_Trajectory_GSAC_Aircraft_2_3linear_sections.m): tb2sec1 tb2sec2 a_1 b_1 a2_sec1 b2_sec1 a2_sec2 b2_sec2 a2_sec3 b2_sec3 a_3 b_3

8.0000000e+000 2.8000000e+001 1.9081137e+000 0.0000000e+000 -1.0864092e+001 8.7000000e+001 -4.3633231e-003 1.2217305e-001 -8.3910060e-003 2.3494817e-001 2.1816616e-003 -4.3633231e-001

Author: Amanda Briden Compiled by: Elizabeth Harkness Project Bellerophon 744

Delta_V.m Written by Scott Breitengross Revision 1.0 – 15 March 2008

Description: This is the main function for calculating the values of ΔV. It uses the values obtained from the ODE functions, AAE450_Trajectory_Calculations.m or from the input values to calculate these.

Assumptions: We assume the AAE450_Trajectory_Calculations.m has been completed.

Important Notes: Most of the variables needed are output directly to the workspace so very few variables need to be created in order for the function to work.

Input Section: The call line of the function is: AAE450_Delta_V

Output Section: These are the final determined values from this function which are displayed using AAE450_Trajectory_output.m

All of the variables that are passed into the function are described below:

Variable Name Description This is the ΔV due to the rotation of the Earth at the launch Delta_V_Earth_assist site. [m/s] Delta_V_Leo This is the velocity needed to get into the required orbit [m/s] Delta_V_Grav This is the ΔV due to gravity losses. [m/s] deltaV_drag This is the ΔV due to the drag. [m/s] deltaV_thrust This is the ΔV that the propulsion produces. [m/s] This is the ΔV that we need, not including the delta V to Delta_V_Total circularize. [m/s]

Author: Scott Breitengross Compiled by: Elizabeth Harkness Project Bellerophon 745

AAE450_orbit_param.m Written by Allen Guzik Revision 1.0 – 24 March 2008

Description: This program calculates various parameters that defines the orbit the trajectory code propagates.

Assumptions: Keplerian two-body orbits, the Earth is a point, and Earth’s gravity is uniform throughout the duration of the orbit. Input Section: All of the variables that are passed into the function are described below:

Variable Name Description Final radial velocity of the vehicle at the end of r_dot_final the third stage [rad/s] Final altitude of the vehicle at the end of the third r_final stage. [m] Final angular velocity of the vehicle at the end of theta_dot_final the third stage. [rad/s] Final angular velocity of the vehicle at the end of phi_dot_final the third stage. [rad/s] Vector of the radius from the center of the Earth r_4 of the orbit propagation. [m] mu Gravitational parameter of the Earth.

Output Section: The orbit parameters calculated are:

Variable Name Description rp Orbit Periapsis [m] ra Orbit Apoapsis [m] a Orbit Semi-major Axis [m] e Orbit Eccentricity energy Orbit Energy [J/kg] period Orbit period [s]

Author: Allen Guzik Compiled by: Elizabeth Harkness Project Bellerophon 746

AAE450_Trajectory_outputs.m Written by Junichi Kanehara Revision 1.0 – 16 March 2008

Description: This is a script to output the numerical values to the screen and to the file XX-XX-XX-XX.txt.

Assumptions: We assume AAE450_Trajectory_Calculations.m has been run.

Input Section: The call line of the function is: AAE450_Trajectory_outputs Output Section: The output of AAE450_Trajectory_outputs.m is what creates the outputs for the entire trajectory code. A sample output for the code was given at the first section of this guide.

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 747

AAE450_Trajectory_Plots.m Written by Junichi Kanehara Revision 1.0 – 16 March 2008

Description: This is a script that produces two-dimensional and three-dimensional plots.

Assumptions: We assume all the numerical outputs from the entire code have been generated.

Important Notes: It takes for a while (15-20 seconds) to get all the plots.

Input Section: The call line of the function is: AAE450_Trajectory_Plots

Some of the variables that are passed into the script are described below:

Variable Name Description X Position in the Cartesian coordinating system [m] r Radial position in the spherical coordinating system [m] R_Earth The radius of the Earth [m] t Time vector [s]

Output Section: Version 2.0 of this script generates three two-dimensional plots and two three-dimensional plots.

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 748

AAE450_Trajectory_Body2Inertial.m Written by Junichi Kanehara Revision 1.0 – 16 March 2008

Description: This function converts from the body frame in the spherical coordinating system to the inertial frame in the Cartesian coordinating system.

Assumptions: The origin is the center of the Earth.

Input Section: The call line of the function is: [X Y Z] = AAE450_Trajectory_Body2Inertial(r,phi,theta);

All of the variables that are passed into the function are described below:

Variable Name Description r Radial position from the center of the Earth [m] phi One component of angular position [rad] theta The other component of angular position [rad] Note: The example above is for the position, but we can also use this function for the velocity and the acceleration in the same unit vectors.

Output Section: X, Y and Z describe the position in the Cartesian coordinating system from the center of the Earth. The unit will be the same as r, assuming phi and theta are in radians.

Variable Name Description X Position in the Cartesian coordinating system [m] Y Position in the Cartesian coordinating system [m] Z Position in the Cartesian coordinating system [m]

Author: Junichi Kanehara Compiled by: Elizabeth Harkness Project Bellerophon 749

Trajectory Code Flowchart: Run Once Written by Kyle Donahue Revision 1.0 – 24 March 2008

Propulsion and Structures Inputs

AAE 450 Trajectory run. m

Ground/Balloon Launch Aircraft Type

User Inputs(steering law angles) User Inputs Beginning of flight Angle at end of climb End of 1st stage Fraction for first steering law End of 2nd stage Angle at end of 2nd stage End of 3rd stage Angle at end of 3rd stage

Main.m

Get_Inputs.m

Ground/Balloon Launch Aircraft Type

2 # 0f 3 2 # 0f 3 Stages Stages

AAE450_Trajectory_GSAC_ AAE450_Trajectory_GSAC_ Aircraft_2_3linear_sections.m Aircraft_2_3linear_sections.m

AAE450_Trajectory_GSAC_ Aircraft_3.m

AAE450_Trajetory_Main.m

Author: Kyle Donahue and Compiled by: Elizabeth Harkness Project Bellerophon 750

AAE450_Trajetory_Main.m

AAE450_Tracjetory_Calculations.m

_ODE

Ground Balloon Type of Launch

Aircraft

_ODE_Steer _ODE_Steer _ODE_AC_1st

_ODE_Steer _ODE_AC_2nd _ODE_Steer

_ODE_Steer _ODE_AC_linear _ODE_Steer

_ODE_coast

AAE450_Tracjetory_Calculations.m

AAE450_Delta_V.m

Author: Kyle Donahue and Compiled by: Elizabeth Harkness Project Bellerophon 751

AAE450_Delta_V.m

AAE450_Tracjetory_Calculations.m

AAE450_Trajectory_Main.m

_orbit_param _Delta_V _Ballistic _Body2Inertial _output _plots _coeff

Author: Kyle Donahue and Compiled by: Elizabeth Harkness Project Bellerophon 752

Trajectory Code Flowchart: Optimize Written by Scott Breitengross Revision 1.0 – 24 March 2008 Propulsion and Structures Inputs

AAE 450 Trajectory run distribute.

Ground/Balloon Launch Aircraft Type

AAE450_Trajectory_D2MP.m AAE450_Trajectory_D2MP_AC.m

AAE450_run_traj_Optimization_GB. AAE450_run_traj_Optimization_AC.m

Main.m

Get_Inputs.m

Ground/Balloon Launch Aircraft Type

2 # 0f 3 2 # 0f 3 Stages Stages

AAE450_Trajectory_GSAC_ AAE450_Trajectory_GSAC_ Aircraft_2_3linear_sections.m Aircraft_2_3linear_sections.m

AAE450_Trajectory_GSAC_ Aircraft_3.m

AAE450_Trajectory_ AAE450_Trajectory GSAC_2STO.m _GSAC.m

AAE450_Trajetory_Main.m

Author: Scott Breitengross Compiled by: Elizabeth Harkness Project Bellerophon 753

AAE450_Trajetory_Main.m

AAE450_Trajectory_Calculations.m

Ground/Balloon Launch Type

AAE450_Trajectory_ODE.m Aircraft

Ground/Balloon Launch Aircraft Type

AAE450_Trajectory_ODE_Steer.m AAE450_Trajectory_ODE_AC_1st.m

AAE450_Trajectory_ODE_AC_2nd.m

AAE450_Trajectory_ODE_AC_linear.m

AAE450_Trajectory_ODE_coast.m

AAE450_Delta_V.m

AAE450_orbit_param.m

AAE450_Trajectory_Body2Ineritial.m

AAE450_Trajectory_Plots.m

Author: Scott Breitengross Compiled by: Elizabeth Harkness