PROPT Space Shuttle Reentry

From TomWiki
Revision as of 08:12, 9 November 2011 by Mbot (talk | contribs)
Jump to navigationJump to search

Notice.png

This page is part of the PROPT Manual. See PROPT Manual.

SOCS 6.5.0 Manual

7.4.4 Maximum Crossrange Space Shuttle Reentry Problem.

Problem Formulation

Find u over t in [0; t ] to maximize


subject to:

The equations given in the code below.

% Copyright (c) 2007-2008 by Tomlab Optimization Inc.

Problem setup

toms t t_f

% Scaled time
p1 = tomPhase('p1', t, 0, t_f, 30);
setPhase(p1);

tomStates alt long lat vel ggamma azi
tomControls aalpha bbeta

% Constants
tGuess = 2000;
tMax   = 4000;
tMin   = 100;
cr2d    = 180/pi;
betalim = 90;
weight  = 203000;
cm2w    = 32.174;
cea     = 20902900;
mmu      = 0.14076539e17;
rho0    = 0.002378;
href    = 23800;
cl0     = -0.20704;
cl1     = 0.029244;
cd0     = 0.07854;
cd1     = -6.1592e-3;
cd2     = 6.21408e-4;
sref    = 2690;

alt0 = 260000;
altf = 80000;

vel0 = 25600;
velf = 2500;

% Initial guess
x0 = {
    t_f == 1000
    icollocate({
    alt   == alt0-(alt0-altf)*t/t_f
    long  == -0.5*90/cr2d
    lat   == -89/cr2d
    vel   == vel0-(vel0-velf)*t/t_f
    ggamma == -1/cr2d-4/cr2d*t/t_f
    azi   == pi/2-pi*t/t_f
    })
    collocate({
    aalpha == 0
    bbeta  == 1/cr2d
    })
    };

% Boundary constraints
cbnd = {
    initial({
    alt   == alt0
    long  == -0.5*75.3153/cr2d
    lat   == 0
    vel   == 25600
    ggamma == -1/cr2d
    azi   == 90/cr2d
    aalpha == 17/cr2d
    bbeta  == -betalim/cr2d
    })
    final({
    alt   == altf
    vel   == velf
    ggamma == -5/cr2d
    })};

% Box constraints
cbox = {
    100 <= t_f <= 5000
    0             <= icollocate(alt)   <= 300000
    -0.5*90/cr2d  <= icollocate(long)  <= 0.5*90/cr2d
    -89/cr2d      <= icollocate(lat)   <= 89/cr2d
    1000          <= icollocate(vel)   <= 40000
    -89/cr2d      <= icollocate(ggamma) <= 89/cr2d
    -pi           <= icollocate(azi)   <= pi
    -89/cr2d      <= collocate(aalpha)  <= 89/cr2d
    -betalim/cr2d <= collocate(bbeta)   <= 1/cr2d
    };

mass   = weight/cm2w;
alphad = cr2d*aalpha;
radius = cea+alt;
grav   = mmu./radius.^2;

rhodns = rho0*exp(-alt/href);
dynp   = 0.5*rhodns.*vel.^2;
subl   = cl0+cl1*alphad;
subd   = cd0+cd1+cd2*alphad.*alphad;
drag   = dynp.*subd*sref;
lift   = dynp.*subl*sref;
vrelg  = vel./radius-grav./vel;

% ODEs and path constraints
ceq = collocate({
    dot(alt) == vel.*sin(ggamma)
    dot(long) == vel.*cos(ggamma).*sin(azi)./(radius.*cos(lat))
    dot(lat) == vel.*cos(ggamma).*cos(azi)./radius
    dot(vel) == -drag./mass-grav.*sin(ggamma)
    dot(ggamma) == lift.*cos(bbeta)./(mass.*vel)+cos(ggamma).*vrelg
    dot(azi) == lift.*sin(bbeta)./(mass.*vel.*cos(ggamma))+...
    vel.*cos(ggamma).*sin(azi).*sin(lat)./(radius.*cos(lat))
    });

% Objective
objective = -final(lat)*180/pi;

Solve the problem

options = struct;
options.name = 'Shuttle Reentry';
options.Prob.SOL.optPar(30) = 100000;
options.scale = 'auto';
solution = ezsolve(objective, {cbox, cbnd, ceq}, x0, options);
Problem type appears to be: lpcon
Auto-scaling
Time for symbolic processing: 0.90962 seconds
Starting numeric solver
===== * * * =================================================================== * * *
TOMLAB - TOMLAB Development license  999007. Valid to 2011-12-31
=====================================================================================
Problem: ---  1: Shuttle Reentry                f_k     -15.142919504944096000
                                       sum(|constr|)      0.000000004261906835
                              f(x_k) + sum(|constr|)    -15.142919500682190000
                                              f(x_0)     -0.000000000000795808

Solver: snopt.  EXIT=0.  INFORM=1.
SNOPT 7.2-5 NLP code
Optimality conditions satisfied

FuncEv    1 ConstrEv 3700 ConJacEv 3698 Iter  424 MinorIter 5688
CPU time: 40.139057 sec. Elapsed time: 10.405000 sec. 

Plot result

subplot(2,3,1)
ezplot(alt)
legend('alt');
title('Shuttle Reentry altitude');

subplot(2,3,2)
ezplot(vel)
legend('vel');
title('Shuttle Reentry velocity');

subplot(2,3,3)
ezplot(long)
legend('long');
title('Shuttle Reentry longitude');

subplot(2,3,4)
ezplot(lat)
legend('lat');
title('Shuttle Reentry latitude');

subplot(2,3,5)
ezplot(aalpha)
legend('aalpha');
title('Shuttle Reentry aalpha');

subplot(2,3,6)
ezplot(bbeta)
legend('bbeta');
title('Shuttle Reentry bbeta');

ShuttleEntry 01.png