Design a spacecraft for the Solar Gravitational Lens mission

You can change parameters to resize the vehicle. The fuel masses must come from a mission sizing script.

See also BuildCADModel, CreateReport, ExportOBJ

Contents

%--------------------------------------------------------------------------
%   Copyright (c) 2015 Princeton Satellite Systems, Inc.
%   All Rights Reserved.
%--------------------------------------------------------------------------
%   Since 2016.1
%--------------------------------------------------------------------------

% The launch vehicle shroud is 5080 mm by 6096 + 7665

Vehicle parameters

power     = 1.7e6;        % W
nEngines  = 1;          % Number of engines at power level
specPower = 1;        % kW/kg
massHe3   = 0.24;    % kg
massD     = 3.600e+03; % kg
fS        = 0.02;       % Structural fraction for tanks, kg/kg fuel tank/fuel
fInsulation = 0.05;     % Fraction for sizing cyrogenic tank insulation

Script controls

exportCAD           = 1;
addLander           = 0; % the lander is a subassembly

Mission sizing calculations

% Use the density of the fuels as liquids for tank sizing.
% He3: 59 kg/m3 as a liquid or 0.1339 g/L at STP
rhoHe3        = 0.1339;     % kg/m^3
rhoD          = 163.83;     % kg/m^3
volD          = massD/rhoD;
volHe3        = massHe3/rhoHe3;
rD            = (3*volD/(4*pi))^(1/3);
rHe3          = (3*volHe3/(4*pi))^(1/3);
qSc.power     = power;
qSc.specPower = specPower;
rDTank       	=  (1+fInsulation)*rD;
massDTank    	= (1+fS)*massD;
rHe3Tank      = (1+fInsulation)*rHe3;
massHe3Tank   = (1+fS)*massHe3;

% Fusion engine
%--------------
rEngine             = 0.55;
lEngine             = (10-2)/(10-1)*power*1e-6 + 1.1;
lNozzle             = 0.8;
eta                 = 0.58; % engine efficiency for sizing radiators

Spacecraft parameters

lengthCylTrans      = 2;
radiusCylTrans      = 1.5;
wPayload            = 1;
lTruss              = [1 0.5 1];
massCylTrans        = 200; % arbitrary shell mass
xDTank              =  0;
xLander             = xDTank + rDTank + lTruss(1) + wPayload + 0.1;
xPayload            = xDTank + rDTank + wPayload/2 + lTruss(1);
xTruss              = [xDTank + rDTank, -rDTank-lTruss(2), -rDTank - lTruss(2) - 2*rHe3Tank - lTruss(3)];
xHe3Tank            = xTruss(2) - rHe3Tank;
xTrans              = xTruss(3) - lengthCylTrans;
xAntenna            = xPayload;
xEngine             = xTrans - lEngine;
xShell              = xTruss(3);
rShell              = 1.05*rDTank;
lShell              = xTruss(1) - xTruss(3);

% Propellant tubes
xD1                 = [xDTank;0.5*rD;-0.5*rD];
xD2                 = [xTrans;0.5*rD;-0.5*rD];
xHe1              	= [xHe3Tank;0.3*rHe3;0.3*rHe3];
xHe2                = [xTrans;0.3*rHe3;0.3*rHe3];
rDT                 = 0.05;
rHeT                = 0.05;

% Radiator
radiatorArealMass   = 2.75;
tempRadiator        = 625;
tRadiator           = 0.1;
lengthTruss         = 3;

% Solar panels
solarEff            = 0.3;
powerSolar          = 2000;
areaSolar           = (powerSolar/1367)/solarEff; % 1367 is solar flux at Earth's orbit
ySolar              = 2; % m
zSolar              = 0.5*areaSolar/ySolar; % m
xSolar              = 0.01;
zStrut              = 1;
massSolar           = powerSolar/150; % https://www.orbitalatk.com/space-systems/space-components/solar-arrays/docs/FS007_15_OA_3862%20UltraFlex.pdf
rStrutSolar         = [-6;0;radiusCylTrans];
rPanelSolar         = [-6-xSolar/2;0;radiusCylTrans+zStrut+zSolar/2];
rBackSolar          = [-6+xSolar/2;0;radiusCylTrans+zStrut+zSolar/2];

Mass calculations

engine mass is obtained simply from specific power estimate

massEngine      = qSc.power/(1000*qSc.specPower);

clear s

% Build the CAD model
BuildCADModel( 'initialize' );

BuildCADModel( 'set name' ,	'SGL' );
BuildCADModel( 'set units',	'mks'  );

m = CreateBody( 'make', 'name', 'Core' );
BuildCADModel('add body', m );
BuildCADModel( 'compute paths' );

% D2 tank - includes the fuel mass
m         = CreateComponent(	'make', 'sphere', 'radius', rDTank, 'n', 20, 'faceColor', 'gold foil','inside',0, ...
                               'rA', [xDTank;0;0], 'mass', massDTank, 'name', 'D2 Tank', 'body', 1 );
BuildCADModel( 'add component', m );

b       = [0 0 1;0 1 0;-1 0 0];

m = CreateComponent('make', 'cylinder', 'rUpper', radiusCylTrans, 'rLower', radiusCylTrans,...
                    'h', lengthCylTrans, 'n', 20, 'b', b, 'faceColor', 'aluminum',...
                    'inside',0, 'rA', [xTrans;0;0], 'mass', 0, 'name', 'Engine Enclosure', 'body', 1 );
BuildCADModel( 'add component', m );

% Add the solar panels
[vPanel, fPanel] = Box( xSolar, ySolar, zSolar, '+x' );
[vBack,  fBack]  = Box( xSolar, ySolar, zSolar, '-x' );
[vStrut, fStrut] = SolarWingSupport( ySolar, zStrut, 2*xSolar );
bStrutSolar      = [0 0 1;1 0 0;0 1 0];

% + Z
m    = CreateComponent( 'make', 'generic', 'vertex', vPanel, 'face', fPanel,'rA',rPanelSolar,...
                              'name', 'Solar Wing +Y Cells', 'body', 1, 'faceColor', [0 0 1],'inside', 0 );
BuildCADModel( 'add component', m );

m    = CreateComponent( 'make', 'generic', 'vertex', vBack, 'face', fBack,'rA',rBackSolar,...
                              'name', 'Solar Wing +Y Back', 'body', 1, 'faceColor', 'black','inside', 0 );
BuildCADModel( 'add component', m );

m    = CreateComponent( 'make', 'generic', 'vertex', vStrut, 'face', fStrut,'rA',rStrutSolar,'b',bStrutSolar,...
                              'name', 'Solar Wing +Y Strut', 'body', 1, 'faceColor', 'black','inside', 0 );
BuildCADModel( 'add component', m );

% - Z

rPanelSolar(3) = -rPanelSolar(3);
rBackSolar(3)  = -rBackSolar(3);
rStrutSolar(3) = - rStrutSolar(3);
bStrutSolar    = [0 0 1;1 0 0;0 -1 0];

m    = CreateComponent( 'make', 'generic', 'vertex', vPanel, 'face', fPanel,'rA',rPanelSolar,...
                              'name', 'Solar Wing +Y Cells', 'body', 1, 'faceColor', [0 0 1],'inside', 0 );
BuildCADModel( 'add component', m );

m    = CreateComponent( 'make', 'generic', 'vertex', vBack, 'face', fBack,'rA',rBackSolar,...
                              'name', 'Solar Wing +Y Back', 'body', 1, 'faceColor', 'black','inside', 0 );
BuildCADModel( 'add component', m );

m    = CreateComponent( 'make', 'generic', 'vertex', vStrut, 'face', fStrut,'rA',rStrutSolar,'b',bStrutSolar,...
                              'name', 'Solar Wing +Y Strut', 'body', 1, 'faceColor', 'black','inside', 0 );
BuildCADModel( 'add component', m );

% Add He3 Tank
m = CreateComponent( 'make', 'sphere', 'radius', rHe3Tank, 'n', 20,  ...
                     'faceColor', 'gold foil','inside',0, 'rA', [xHe3Tank;0;0], 'mass', massHe3Tank, 'name', 'He3 Tank', 'body', 1 );
BuildCADModel( 'add component', m );

% Add shell
m = CreateComponent('make', 'cylinder', 'rUpper', rShell, 'rLower', rShell,...
                     'h', lShell, 'n', 20, 'b', b, 'faceColor', 'mirror',...
                     'inside',0, 'rA', [xShell;0;0], 'mass', massCylTrans,...
                     'name', 'Shell', 'body', 1 );
BuildCADModel( 'add component', m );

% Add lines
[v, f] = TubeBetweenPoints(xD1,xD2,rDT);
 m    = CreateComponent( 'make', 'generic', 'vertex', v, 'face', f,'rA',[0;0;0],...
                              'name', 'D2 Line', 'body', 1, 'faceColor', 'gold foil','inside', 1 );
BuildCADModel( 'add component', m );

[v, f] = TubeBetweenPoints(xHe1,xHe2,rHeT);
 m    = CreateComponent( 'make', 'generic', 'vertex', v, 'face', f,'rA',[0;0;0],...
                              'name', 'He3 Line', 'body', 1, 'faceColor', 'gold foil','inside', 1 );
BuildCADModel( 'add component', m );

% Add Engines
%------------
massNozzle  = 0.05*massEngine;
massEngine  = 0.95*massEngine;
xNozzle     = xEngine - lNozzle;
rA          = [xEngine;0;0];
name        = sprintf('Engine %d',1);
m           = CreateComponent( 'make', 'cylinder', 'rUpper', rEngine, 'rLower', rEngine,...
                               'h', lEngine, 'n', 20, 'b', b, ...
                               'faceColor', 'gold foil','inside',0, 'rA', rA,...
                               'mass', massEngine, 'name', name, 'body', 1 );
BuildCADModel( 'add component', m );

rA      = [xNozzle;0;0];

name      = sprintf('Magnetic Nozzle %d',1);
m       = CreateComponent(	'make', 'cylinder', 'rUpper', 0.5*rEngine, 'rLower', rEngine, 'h', lNozzle, 'n', 20, 'b', b, ...
                              'faceColor', 'black','inside',0, 'rA', rA, 'mass', massNozzle, 'name', name, 'body', 1 );
BuildCADModel( 'add component', m );

% Add Radiators
%--------------
heatRadiatedPerSide = (1-eta)*nEngines*qSc.power/4; % for one radiator side
sigma               = 5.67e-8;
area                = heatRadiatedPerSide/(sigma*tempRadiator^4);
xWidth              = lengthCylTrans;
yWidth              = area/xWidth;
massRadiator        = radiatorArealMass*area;

q = 1;
for k = 1:2
	name	  = sprintf('Radiator %d',k);
	rA      = [xTrans + 0.5*lengthCylTrans;q*(radiusCylTrans+lengthTruss);0];

	m       = CreateComponent(	'make', 'box', 'x', xWidth, 'y', yWidth, 'z', tRadiator, ...
                                'faceColor', 'radiator','inside',0, 'rA', rA, 'mass', massRadiator, 'name', name, 'body', 1 );
	BuildCADModel( 'add component', m );

	q       = -q;

end

% Optical communications system
mGimbal     = 7.5;
massAntenna = 2;
massTruss   = 10;
rhoTruss    = 409.7/4.55^2;
bA          = [0 0 1;0 1 0;-1 0 0];
[v, f, l]   = Truss( [0;0;0], [4;0;0], 0.25, 6, 0.025 );

lBase       = 2.5 + radiusCylTrans;

% DOCS 1
m = CreateComponent( 'make', 'generic', 'vertex', v, 'face', f, 'edgeColor','aluminum', 'rA', [xAntenna;0;lBase],...
                     'name', 'Optical Truss 1', 'body', 1, 'b',bA, 'mass',massTruss,...
                     'faceColor', 'gold foil', 'inside', 0);
BuildCADModel( 'add component', m );

m = CreateComponent( 'make', 'cylinder', 'rUpper', 0.1, 'rLower',0.1, 'h', 0.2, 'n',12, 'rA', [xAntenna;0;lBase],...
                     'name', 'Optical Azimuth Gimbal 1', 'body', 1, 'mass', mGimbal/2, ...
                     'faceColor', 'gold foil', 'inside', 0);
BuildCADModel( 'add component', m );


m = CreateComponent( 'make', 'cylinder', 'rUpper', 0.15, 'rLower',0.15, 'h', 0.8, 'edgeColor','black','b',b,...
                    'name', 'DOCS1', 'body', 1, 'faceColor', 'black','inside', 0,'mass',massAntenna,...
                     'rA',[xAntenna-0.4;0;lBase+0.4] );
BuildCADModel( 'add component', m );


% Add trusses
%------------
for k = 1:length(xTruss)
  xBottom     = [xTruss(k);0;0];
  xTop        = [xTruss(k)+lTruss(k);0;0];
  nTruss      = 2;
  [v, f]      = Truss(  xBottom, xTop, rHe3Tank, nTruss, 0.01*rHe3Tank );
  c           = cos(pi/4);
  v           = ([1 0 0;0 c c;0 -c c]*v')';
  s           = sprintf('Central Truss %d',k);
  m           = CreateComponent( 'make', 'generic', 'vertex', v, 'face', f,'edgeColor', 'truss' ,'rA',[0;0;0],...
                              'name', s, 'body', 1, 'faceColor', [0.8 0.1 0.2],'inside', 1 );
  BuildCADModel( 'add component', m );
end

% Add payload
mPayload = 300;
m       = CreateComponent(	'make', 'box', 'x', wPayload, 'y', wPayload, 'z', wPayload,'faceColor', 'gold foil','inside',0,  ...
                            'rA', [xPayload;0;0], 'mass', mPayload, 'name', 'Payload', 'body', 1 );

BuildCADModel( 'add component', m );

Create mass budget

Add subsystems

BuildCADModel( 'add subsystem', 'ACS',        {'star camera','rwa' 'torquer'} );
BuildCADModel( 'add subsystem', 'Propulsion',	{'engine' 'fuel' 'radiator' 'nozzle'} );
BuildCADModel( 'add subsystem', 'Fuel',     	{'tank','line'} );
BuildCADModel( 'add subsystem', 'Insulation', {'shell'} );
BuildCADModel( 'add subsystem', 'Telemetry and Command',{'optical', 'board','DOCS'} );
BuildCADModel( 'add subsystem', 'Structure',  {'support', 'frame', 'strut', 'panel','central'} );

Update the mass properties to produce the tables

BuildCADModel( 'update body mass properties' );
g = BuildCADModel( 'get model');
BuildCADModel('show vehicle');

bySubsystem = true;
noZero = true;
CreateReport( g, 'tex', FileFullpath('SGLMassSummary'), 'mass',  bySubsystem, noZero, true );
CreateReport( g, 'tex', FileFullpath('SGLMass'), 'mass',  bySubsystem, noZero, false );
CreateReport( g, 'txt', [], 'mass',  bySubsystem, noZero, false );
CreateReport( g, 'txt', [], 'mass',  bySubsystem, noZero, true );
                              Component           Mass          Units 
                          ACS subsystem                             
                   Propulsion subsystem                             
                               Engine 1           1615            kg 
                             Radiator 1          56.74            kg 
                             Radiator 2          56.74            kg 
                      Magnetic Nozzle 1             85            kg 
             Propulsion Subsystem Total           1813            kg 
                         Fuel subsystem                             
                                D2 Tank           3672            kg 
                               He3 Tank         0.2448            kg 
                   Fuel Subsystem Total           3672            kg 
                   Insulation subsystem                             
                                  Shell            200            kg 
             Insulation Subsystem Total            200            kg 
        Telemetry and Command subsystem                             
                        Optical Truss 1             10            kg 
               Optical Azimuth Gimbal 1           3.75            kg 
                                  DOCS1              2            kg 
  Telemetry and Command Subsystem Total          15.75            kg 
                    Structure subsystem                             
                Miscellaneous subsystem                             
                                Payload            300            kg 
          Miscellaneous Subsystem Total            300            kg 
                                  Total           6001            kg 
                              Component           Mass   Units 
             Propulsion Subsystem Total           1813     kg 
                   Fuel Subsystem Total           3672     kg 
             Insulation Subsystem Total            200     kg 
  Telemetry and Command Subsystem Total          15.75     kg 
          Miscellaneous Subsystem Total            300     kg 
                                  Total           6001     kg 

Export

if( exportCAD )
	ExportOBJ( g, FileFullpath('SGL') );
end

% xParam = {'Radiator Area',2*area,...
%           '3He Mass',massHe3,
%           'Total Payload',


%--------------------------------------
% PSS internal file version information
%--------------------------------------

% $Id: 0631d01f56862a84279874893cc9f52bec63b99f $