You are on page 1of 8

William Vogeley

Aer E 351 Astrodynamics I


Project 1 – Rocket Optimization

The goal of this project is to optimize a rocket to launch a payload into a given GEO based on various design
constraints. The rocket should be as small as possible at launch while delivering the largest possible payload.

The rocket constraints are as follows

Stage 1 Stage 2 Stage 3


𝜖1 = 0.11 𝜖2 = 0.13 𝜖3 = 0.15
𝐼𝑠𝑝 1 = 320 𝑠 𝐼𝑠𝑝 2 = 455 𝑠 𝐼𝑠𝑝 3 = 280 𝑠
𝑚0 3 = 1200 𝑘𝑔

The problem is further constrained by the parameters of the chosen orbit.


• The rocket is launched into a GTO with a perigee of 86km altitude and apogee of 35,786 𝑘𝑚 at a true
anomaly angle of 15°
• The rocket is launched from Cape Kennedy at a 28.5° latitude.
• Stage 1 and 2 are responsible for insertion into GTO, and stage 3 performs the circularization burn to
a GEO at 0° inclination with a radius of 35,786 𝑘𝑚 altitude.
• All of stage 3 is contained within the given 1200 𝑘𝑔, this includes the structure for fuel and
propulsion, the fuel itself, and the actual electronic payload of the rocket.

Lastly, some assumptions are made to simplify the problem


• All ∆𝑉 from the burnout of stage 1 and 2 is converted into orbital velocity in GTO
• Drag and changes in gravitational acceleration is approximated by an adding 1.6𝑘𝑚/𝑠 to the ∆𝑉
required to reach GTO

Some general constants are needed for the problem


𝜇𝐸 = 3.986 ∗ 105 𝑘𝑚3 ⁄𝑠 2
𝑔0 = 0.00981 𝑘𝑚⁄𝑠 2
𝑟𝑒 = 6378 𝑘𝑚
𝑡𝑑𝑎𝑦 = 86400 𝑠

Expressing the orbital parameters as variables is as follows:


𝑟𝑝 𝐺𝑇𝑂 = 6464 𝑘𝑚
𝑟𝑎 𝐺𝑇𝑂 = 42164 𝑘𝑚
𝜈0 𝐺𝑇𝑂 = 15°
𝑟𝐺𝐸𝑂 = 42164 𝑘𝑚
𝑖𝐺𝐸𝑂 = 28.5°
∆𝑉𝑔𝑖𝑣𝑒𝑛 = 1.6 𝑘𝑚⁄𝑠
The orbital position magnitudes are calculated by adding 𝑟𝑒 = 6378 𝑘𝑚 to the given altitude. The inclination
angle is due to the latitude of launch 28.5° and the restraint that the circularization and plane change occurs
in stage 3.
Due to the nature of the problem, it is easier to calculate the optimization of stage 3 before dealing with stage
1 and 2. The first step is to calculate the ∆𝑉 involved in performing the circularization burn.

Velocity at apogee in GTO


𝑟𝑝 + 𝑟𝑎 𝐺𝑇𝑂
𝑎𝐺𝑇𝑂 = 𝐺𝑇𝑂 = 24314 𝑘𝑚
2
2𝜇𝐸 𝜇𝐸
𝑣𝑎 𝐺𝑇𝑂 = √ − = 1.5853 𝑘𝑚⁄𝑠
𝑟𝑎 𝐺𝑇𝑂 𝑎𝐺𝑇𝑂
Velocity at apogee in GEO
𝑎𝐺𝐸𝑂 = 𝑟𝐺𝐸𝑂 = 42164𝑘𝑚
𝜇𝐸
𝑣𝑎 𝐺𝐸𝑂 = √ = 3.0747 𝑘𝑚⁄𝑠
𝑎𝐺𝐸𝑂
Combined transfer calculation
∆𝑉3 = √𝑣𝑎 𝐺𝑇𝑂 2 + 𝑣𝑎 𝐺𝐸𝑂 2 − 2𝑣𝑎 𝐺𝐸𝑂 𝑣𝑎 𝐺𝑇𝑂 cos(𝑖𝐺𝐸𝑂 ) = 1.8438 𝑘𝑚⁄𝑠
By algebraically solving the rocket equation for the payload factor 𝜋3 , the values for 𝑚𝑝 3 , 𝑚𝑓 , and 𝑚𝑠 3
3
(payload, fuel, and structure respectively) can be determined by using the given value for 𝜖3 and algebraic
rearrangement of the definitions of those dimensionless ratios.
∆𝑉3 = −𝑉𝑒𝑥 ln(𝜖3 + (1 − 𝜖3 )𝜋3 )
∆𝑉3
𝑒 −𝐼𝑠𝑝3 𝑔0 − 𝜖3
𝜋3 = = 0.42479
1 − 𝜖3
𝑚𝑝 3
𝜋3 = => 𝜋3 𝑚0 3 = 𝑚𝑝 3 = 509.75 𝑘𝑔
𝑚0 3
𝑚𝑠 3 𝑚𝑠 3
𝜖3 = = => (𝑚0 3 − 𝑚𝑝 3 ) 𝜖3 = 𝑚𝑠 3 = 103.54 𝑘𝑔
𝑚𝑠 3 + 𝑚𝑓 𝑚0 3 − 𝑚𝑝 3
3
𝑚𝑓 = 𝑚0 3 − 𝑚𝑝 3 − 𝑚𝑠 3 = 586.71𝑘𝑔
3

The final results for stage 3 are as follows:


∆𝑉3 = 1.8438 𝑘𝑚⁄𝑠
𝑚𝑝 3 = 509.75 𝑘𝑔
𝑚𝑠 3 = 103.54 𝑘𝑔
𝑚𝑓 = 586.71 𝑘𝑔
3
𝜋3 = 0.42479

The first step in calculating stage 1 and 2 is to determine the total ∆𝑉 needed to reach GTO insertion. As
permitted by the assumptions outlined in the problem, this is simply the sum of the orbital velocity at
insertion, the given drag approximation, and the initial rotational velocity of the earth

To calculate the velocity at GTO insertion, several more parameters must be determined
𝑟𝑎 𝐺𝑇𝑂 − 𝑟𝑝 𝐺𝑇𝑂
𝑒𝐺𝑇𝑂 = = 0.73414
𝑟𝑎 𝐺𝑇𝑂 + 𝑟𝑝 𝐺𝑇𝑂
𝑝𝐺𝑇𝑂 = 𝑎𝐺𝑇𝑂 (1 − 𝑒𝐺𝑇𝑂 2 ) = 11,210 𝑘𝑚
𝑝
𝑟𝜈0 = = 6558.6 𝑘𝑚
𝐺𝑇𝑂 1 + 𝑒𝐺𝑇𝑂 cos 𝜈0 𝐺𝑇𝑂
2𝜇𝐸 𝜇𝐸
𝑣𝜈0 𝐺𝑇𝑂 = √ − = 10.254 𝑘𝑚⁄𝑠
𝑟𝜈0 𝑎𝐺𝑇𝑂
𝐺𝑇𝑂
The initial velocity provided by the rotation of the earth needs to be calculated
𝑐𝑒 = 2𝜋𝑟𝑒 = 40074 𝑘𝑚
𝑐𝑒
𝑣𝑒 = = 0.46382 𝑘𝑚⁄𝑠
𝑡𝑑𝑎𝑦
𝑣𝑒 𝑙𝑎𝑡 = 𝑣𝑒 cos(𝑖𝐺𝐸𝑂 ) = 0.40761 𝑘𝑚⁄𝑠
The sum of the velocities gives the total for ∆𝑉1+2
∆𝑉1+2 = 𝑣𝜈0 𝐺𝑇𝑂 + ∆𝑉𝑔𝑖𝑣𝑒𝑛 − 𝑣𝑒 𝑙𝑎𝑡 = 11.4470 𝑘𝑚⁄𝑠
This represents the total ∆𝑉 that must be provided by stage 1 and 2.

The final step is also the most complex. Given the value for ∆𝑉1+2 and the design constraints for stage 1 and 2,
the lowest possible initial mass must be determined.

First, the multi-stage rocket equation is used


𝑁

∆𝑉1+2 = − ∑(𝑉𝑒𝑥 )𝑘 ln(𝜖𝑘 + (1 − 𝜖𝑘 )𝜋𝑘 )


𝑘=1
∆𝑉1+2 = −𝐼𝑠𝑝 1 𝑔0 ln(𝜖1 + (1 − 𝜖1 )𝜋1 ) − 𝐼𝑠𝑝 2 𝑔0 ln(𝜖2 + (1 − 𝜖2 )𝜋1 )
Because this is a multistage rocket, the payload factors can be expressed in terms of the masses of various
stages
𝑚0 𝑚0
∆𝑉1+2 = −𝐼𝑠𝑝 1 𝑔0 ln (𝜖1 + (1 − 𝜖1 ) 2 ) − 𝐼𝑠𝑝 2 𝑔0 ln (𝜖2 + (1 − 𝜖2 ) 3 )
𝑚0 1 𝑚0 2

Finding the minimum value of 𝑚01 is extremely difficult through analytical means, as there are two unknowns
and only one equation. However, it can be solved numerically using the help of computer software. It is
possible to define a function for 𝑚0 2 in terms of ∆𝑉2 . Then, software can be used to create a large vector
containing a very large number of possible values for 𝑚0 2 within the range of stage 2 providing 0 ∆𝑉 to the
entire 11.4470 𝑘𝑚⁄𝑠 ∆𝑉 in the combined staging. Then, 𝑚01 can be solved in terms of 𝑚0 2 and ∆𝑉1 . Since
every value of ∆𝑉1 corresponds to a specific value of ∆𝑉2 , another vector can be made with a large number of
possible values for 𝑚01 and the computer software can then iterate through that vector to find the lowest
possible value for 𝑚01 .

The first step is to solve for 𝑚0 2 in terms of ∆𝑉2


𝑚0
∆𝑉2 = 𝐼𝑠𝑝 2 𝑔0 ln (𝜖2 + (1 − 𝜖2 ) 3 )
𝑚0 2
(1 − 𝜖2 )𝑚0 3
𝑚0 2 = −∆𝑉2
𝑒 −𝐼𝑠𝑝2𝑔0 −𝜖2
Then, using the relation ∆𝑉1 = ∆𝑉1+2 − ∆𝑉2 , the same thing can be written to express 𝑚01 in terms of 𝑚0 2 and
∆𝑉2 .
(1 − 𝜖1 )𝑚0
𝑚01 = −(∆𝑉 −∆𝑉 ) 2
1+2 2
𝑒 −𝐼𝑠𝑝1𝑔0 −𝜖1
Each value of 𝑚0 2 corresponds to a given value of ∆𝑉2 , so a vector can be made with all possible values within
the range.

Upon implementing this in MATLAB, it is revealed that there is a specific range of useful results for 𝑚01 .
Outside that range represents rocket configurations that are not physically possible. This is easily seen from
the initial graph of 𝑚01 and ∆𝑉2
The range of useful results is clearly visible in
figure 1. The values not in-between the two
asymptotes report a negative mass, indicating
that such a rocket configuration is actually not
possible. To make this graph more useful and to
have MATLAB determine the proper minima,
the data needs to be truncated to only show the
relevant region.

Using built in MATLAB functions to find the


local minima and remove all entries not
between those indices, a more useful graph is
created as shown in figure 2. However, this
shows a lot of superfluous range on the mass
axis. It’s clear that the minimum is somewhere
around the center of the graph, but it’s barely
any visual distance from 0. It would be more
useful to set the axis such that the minimum is
more apparent, as shown in figure 3
Once MATLAB has found the local minimum that corresponds to a realistic rocket configuration, and thus has
given 𝑚01 , 𝑚0 2 , ∆𝑉1 , and ∆𝑉2 those values can be used in combination with the structural coefficients to
determine the rest of the staging configurations.
𝑚01 = 89,391 𝑘𝑔
𝑚0 2 = 13,051 𝑘𝑔
∆𝑉1 = 4.4808 𝑘𝑚⁄𝑠
∆𝑉2 = 6.9662 𝑘𝑚⁄𝑠
𝑚0 2
𝜋3 = = 0.14600
𝑚0 1
𝑚0 3
𝜋3 = = 0.09195
𝑚0 2
𝑚𝑠 1 = (𝑚01 − 𝑚0 2 )𝑒1 = 8,937.4 𝑘𝑔
𝑚𝑓 = 𝑚01 − 𝑚𝑠 1 − 𝑚0 2 = 80,993 𝑘𝑔
1
𝑚𝑠 2 = (𝑚0 2 − 𝑚0 3 )𝑒2 = 1,540.6 𝑘𝑔
𝑚𝑓 = 𝑚02 − 𝑚𝑠 2 − 𝑚0 3 = 11,510 𝑘𝑔
2

This is the output of the MATLAB script that displays all the finalized staging information from its calculations
--Stage 1--
Delta V: 4.4808 km/s
Total Mass: 89391.0968 kg
Structure Mass: 8397.3997 kg
Payload Mass: 13051.0993 kg
Fuel Mass: 80993.6971 kg
Payload Factor: 0.146
--Stage 2--
Delta V: 6.9662 km/s
Total Mass: 13051.0993 kg
Structure Mass: 1540.6429 kg
Payload Mass: 1200 kg
Fuel Mass: 11510.4564 kg
Payload Factor: 0.091946
--Stage 3--
Delta V: 1.8438 km/s
Total Mass: 1200 kg
Structure Mass: 103.5375 kg
Payload Mass: 509.7499 kg
Fuel Mass: 586.7126 kg
Payload Factor: 0.42479

The rest of this document is the code that was used to assist in this calculation and produce that output.
%define various known values
r_e = 6378; %radius of earth, km
mu_e = 3.986*10^5; %gravitional parameter, km^3/s^2
g0 = 0.00981; %gravitational acceleration, km/s^2
rotation = 24*60*60; %seconds per day in earths rotation
rot_vel = (pi*r_e*2)/rotation; %rotational speed at equator, km/s
%GTO orbital parameters and calculations
rp_gto = 86 + r_e; %periapsis of GTO, km
ra_gto = 35786 + r_e; %apoapsis of GTO, km
nu_i = 15; %true anomaly angle of GTO orbital insertion, degrees
drag = 1.6; %problem given drag approximation, km/s
i_gto = 28.5; %inclination angle for GTO, degrees
a_gto = (ra_gto + rp_gto)/2; %semi-major axis of gto, km
e_gto = (ra_gto-rp_gto)/(ra_gto+rp_gto); %eccentricity of gto, unitless
p_gto = a_gto*(1-e_gto^2); %p for gto, km
r15_gto = p_gto / (1+e_gto*cosd(nu_i)); %distance at 15 deg, km
v15_gto = ((2*mu_e)/r15_gto - mu_e/a_gto)^(1/2); %velocity of gto at 15deg,
km/s
va_gto = ((2*mu_e)/ra_gto - mu_e/a_gto)^(1/2); %velocity of gto at apoapsis,
km/s
dv_to_gto = v15_gto + drag - rot_vel*cosd(i_gto); %delta-v to reach GTO, km/s
%Rocket Stage properties
e1 = 0.11; %struc coeff for stage 1, unitless
e2 = 0.13; %struc coeff for stage 2, unitless
e3 = 0.15; %struc coeff for stage 3, unitless
Isp1 = 320; %specific impulse for stage 1, seconds
Isp2 = 455; %specific impulse for stage 2, seconds
Isp3 = 280; %specific impulse for stage 3, seconds
m0_3 = 1200; %mass of stage 3, kg
%GEO parameters and transfer calculations
r_geo = ra_gto; %radius of circular GEO, km
v_geo = (mu_e/r_geo)^(1/2); %velocity of GEO, km/s
dv_circ = (v_geo^2 + va_gto^2 -2*(v_geo)*(va_gto)*cosd(i_gto))^(1/2);
%combined burn d-v for circularization, km/s
%use equation from report to calculate payload factor
pf_3 = (exp((-dv_circ) / (Isp3*g0))-e3) / (1-e3);
mp_3=m0_3*pf_3; %mass of payload for stage 3, kg
ms_3=(m0_3-mp_3)*e3; %mass of structure for stage 3, kg
mf_3=m0_3-mp_3-ms_3; %mass of propellant for stage 3, kg
%optimization of stage 1 and 2
%this solution is essentially numeric, using a large vector to find the
%lowest value for the initial mass of stage 1.
%A more comprehensive explanation is available in the report
res = 10000; %the number of values in the array, more values = more accurate
%create a vector of a large amount of numbers within the delta-v range
range = [0:dv_to_gto/(res-1):dv_to_gto];
m2_range = zeros(1,res); %create empty array of proper size
%populate array with all possible values for m0_2
for i=1:res
m2_range(i) = ((1 - e2) * m0_3) / (exp(-1*(range(i))/(Isp2*g0)) - e2);
end
%populate array with possible values for m0_1
m1_range = zeros(1,res); %create empty array of proper size
for i=1:res
m1_range(i) = ((1 - e1) * m2_range(i)) / (exp(-1*(dv_to_gto-
range(i))/(Isp1*g0)) - e1);
end
%plot the first graph (fig 1 on report)
figure
plot(range,m1_range);
title("Optimization function (fig 1)")
xlabel("DV stage 2 (km/s)");
ylabel("Mass (kg)");
%find the local maxima and trunctuate irrelevant data
[m1_max,m1_ind] = findpeaks(m1_range);
m1_useful = m1_range(m1_ind(1):m1_ind(2));
range_useful = range(m1_ind(1):m1_ind(2));
%plot the second graph (fig 2 on report)
figure
plot(range_useful,m1_useful);
title("Optimization function (fig 2)");
xlabel("DV stage 2 (km/s)");
ylabel("Mass (kg)");
%plot the final, scaled graph (fig 3 on report)
figure
plot(range_useful,m1_useful,range_useful(min_index),m1_useful(min_index),'r*'
)
title("Optimization function (fig 3)");
xlabel("DV stage 2 (km/s)");
ylabel("Mass (kg)");
axis([range_useful(1) range_useful(length(range_useful)) 0 0.35*10^6]);
%use the truncuated data vector to find the minimum mass
[m0_1,min_index] = min(m1_useful);
m2_useful = m2_range(m1_ind(1):m1_ind(2)); %create trunctuated versions of
the other vectors to use the index
m0_2 = m2_useful(min_index); %pull mass of stage 2 from index corresponding
to mass of stage 1, kg
dv_1 = dv_to_gto - range_useful(min_index); %delta-v for stage 1, km/s
dv_2 = range_useful(min_index); %pull delta-v for stage 2 from corresponding
index, km/s
%calculate the rest of the rocket data
dv_3 = dv_circ; %delta v for stage 3, km/s
pf_1 = m0_2 / m0_1; %payload factor stage 1, unitless
pf_2 = m0_3 / m0_2; %payload factor stage 2, unitless
ms_1 = (m0_1-m0_2)*e1; %structure mass stage 1, kg
mf_1 = m0_1-ms_1; %fuel mass stage 1, kg
ms_2 = (m0_2-m0_3)*e2; %structure mass stage 2, kg
mf_2 = m0_2-ms_2; %fuel mass stage 2, kg
%output all relevant values
disp("--Stage 1--")
disp("Delta V: "+dv_1+" km/s")
disp("Total Mass: "+m0_1+" kg")
disp("Structure Mass: "+ms_1+" kg")
disp("Payload Mass: "+m0_2+" kg")
disp("Fuel Mass: "+mf_1+" kg")
disp("Payload Factor: "+pf_1)
disp("--Stage 2--")
disp("Delta V: "+dv_2+" km/s")
disp("Total Mass: "+m0_2+" kg")
disp("Structure Mass: "+ms_2+" kg")
disp("Payload Mass: "+m0_3+" kg")
disp("Fuel Mass: "+mf_2+" kg")
disp("Payload Factor: "+pf_2)
disp("--Stage 3--")
disp("Delta V: "+dv_3+" km/s")
disp("Total Mass: "+m0_3+" kg")
disp("Structure Mass: "+ms_3+" kg")
disp("Payload Mass: "+mp_3+" kg")
disp("Fuel Mass: "+mf_3+" kg")
disp("Payload Factor: "+pf_3)

You might also like