Generate Direct Fusion Drive (DFD) Pluto Orbiter CAD model

You can change parameters to resize the vehicle.

Contents

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

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

Script controls

exportCAD           = 1;
addLander           = 0;

Data from PlutoDFDMission

qSC                 = load('PlutoSpacecraftData');

Spacecraft parameters

lengthCylTrans      = 2;
radiusCylTrans      = 1.5;
massCylTrans        = 200;
xAntenna            = -10;
power               = 1e6;

% Fusion engine
%--------------
rEngine             = 0.55;
lEngine             = 12*(power/1e7)*rEngine;
lNozzle             = 0.8;
nEngines            = 2;

% http://www.nasaspaceflight.com/2012/04/delving-deeper-dsh-configurations-support-craft/
massHab             = 1000; % DSH Configuraton (kg)
eta                 = 0.58;
fS                  = 0.02; % kg/kg fuel tank/fuel

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

% Fuel tanks
nTank               = 4;
lTank               = 3.5;
fInsulation         = 1.2; % Insulation thickness is 20% of tank
densityD            = 162.4; % kg/m^3
nTankPerRow         = 1;
tankSpacing         = lTank/100;
densityHe3          = 0.1785;%kg/m^3
volHe3              = qSC.massHe3/densityHe3;%m^3

Mass calculations

massEngine      = qSC.power/(1000*qSC.specPower);
massTotalSeg(5) = massEngine + massHab;
volFuel         = qSC.massFuel/densityD;

clear s

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

BuildCADModel( 'set name' ,	'Pluto Orbiter' );
BuildCADModel( 'set units',	'mks'  );

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

if( addLander )
  BuildCADModel( 'add subassembly', 'PlutoLander', 1, [-2.25;0;0], [0 0 1;0 1 0; -1 0 0] );
end


% Add the fuel tanks
rTank = sqrt(sum(volFuel)/nTank/lTank/pi);

% Add insulation
rTank = fInsulation*rTank;
lTank = fInsulation*lTank;

massTank = (1+fS)*qSC.massFuel/(nTank*nTankPerRow);

ang = pi/4;
b   = [0 0 1;0 1 0;-1 0 0];
lT  = lTank/nTankPerRow;

xTank = -4.2 - lTank;
for j = 1:nTankPerRow
    for k = 1:nTank
        y       = 1.5*rTank*cos(ang);
        z       = 1.5*rTank*sin(ang);
        ang     = ang + pi/2;
        rA      = [xTank;y;z];
        name	= sprintf('Fuel Tank %d',k);
        m       = CreateComponent(	'make', 'cylinder', 'rUpper', rTank, 'rLower', rTank, 'h', lT, 'n', 20, 'b', b, ...
                                    'faceColor', 'gold foil','inside',0, 'rA', rA, 'mass', massTank, 'name', name, 'body', 1 );
        BuildCADModel( 'add component', m );
    end
	xTank = xTank + lT + tankSpacing;

end

xTank = -4.2 - lTank;

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


% Add He3 Tank
rHTank = rTank*((1/cos(pi/4))-1)-0.1;
lHTank = volHe3/(pi*((rHTank/fInsulation)^2));
lHTank = lHTank*fInsulation;
bH   = [0 0 1;0 1 0;-1 0 0];
xHTank = -4.2 - lHTank;
rAH = [xHTank;0;0];
massTankH=1;
nameH = sprintf('He3 Fuel Tank %d',k);

m = CreateComponent( 'make', 'cylinder', 'rUpper', rHTank, 'rLower', rHTank, 'h', lHTank, 'n', 20, 'b', bH, ...
                                    'faceColor', 'gold foil','inside',0, 'rA', rAH, 'mass', massTankH, 'name', nameH, 'body', 1 );
BuildCADModel( 'add component', m );


% Add Engines
%------------
massNozzle  = 0.05*massEngine;
massEngine  = 0.95*massEngine;
xEngine     = xTrans - lEngine;
xNozzle     = xEngine - lNozzle;
yEngine     = 1.5*rEngine*[1 -1];
for k = 1:nEngines
  rA          = [xEngine;yEngine(k);0];
  name        = sprintf('Engine %d',k);
  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;yEngine(k);0];

  name	= sprintf('Magnetic Nozzle %d',k);
  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 );
end

% Add Radiators
%--------------
heatRadiatedPerSide = (1-eta)*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
rhoTruss    = 409.7/4.55^2;
mGimbal     = 7.5;
massAntenna = 2;
bA          = [0 0 1;0 1 0;-1 0 0];
[v, f, l]   = Truss( [0;0;0], [4;0;0], 0.25, 10, 0.025 );
massTruss   = 10;

lTruss = 5;
lBase       = lTruss/2 + radiusCylTrans;

% DOCS 1
m = CreateComponent( 'make', 'generic', 'vertex', v, 'face', f, 'edgeColor','truss', 'rA', [xAntenna;0;lBase],...
                     'name', 'Antenna Truss', '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', 'Antenna Azimuth Gimbal', '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 );

% DOCS 2
bA          = [0 0 -1;0 1 0;1 0 0];

m = CreateComponent( 'make', 'generic', 'vertex', v, 'face', f, 'edgeColor','truss', 'rA', [xAntenna;0;-lBase],...
                     'name', 'Antenna Truss', '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-0.2],...
                     'name', 'Antenna Azimuth Gimbal', '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', 'DOCS2', 'body', 1, 'faceColor', 'black','inside', 0,'mass',massAntenna,...
                     'rA',[xAntenna-0.4;0;-lBase-0.4] );
BuildCADModel( 'add component', m );


% Add truss
%----------
xBottom     = [xTank;0;0];
xTop        = [xTank+1.2*lTank;0;0];
[v, f]      = Truss(  xBottom,xTop, rTank, 8, 0.01*rTank );
c           = cos(pi/4);
v           = ([1 0 0;0 c c;0 -c c]*v')';
m           = CreateComponent( 'make', 'generic', 'vertex', v, 'face', f,'edgeColor', 'truss' ,'rA',[0;0;0],...
                              'name', 'Truss', 'body', 1, 'faceColor', [0.8 0.1 0.2],'inside', 1 );
BuildCADModel( 'add component', m );

% Add payload

m       = CreateComponent(	'make', 'box', 'x', 1, 'y', 1, 'z', 1,'faceColor', 'gold foil','inside',0,  ...
                            'rA', [xTop(1)+0.5;0;0], 'mass', 500, 'name', 'Payload', 'body', 1 );

BuildCADModel( 'add component', m );

Create mass budget

Add subsystems

BuildCADModel( 'add subsystem', 'ACS',        {'star camera','rwa' 'torquer'} );
BuildCADModel( 'add subsystem', 'ECLS',       {'habitat'} );
BuildCADModel( 'add subsystem', 'Propulsion',	{'engine' 'fuel' 'radiator' 'nozzle'} );
BuildCADModel( 'add subsystem', 'Telemetry and Command',       {'antenna', 'board'} );
BuildCADModel( 'add subsystem', 'mechanism',  {'drive'} );
BuildCADModel( 'add subsystem', 'power',      {'solar array', 'battery'} );
BuildCADModel( 'add subsystem', 'structure',  {'support', 'frame', 'strut', 'panel'} );

Update the mass properties to produce the tables

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

CreateReport( g, 'tex', FileFullpath('DFDPlutoMass'), 'mass',  1, 1, 1 );

Export

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


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