Implements and simulates a spacecraft with 3 orthogonal reaction wheels.

The spacecraft is given an external disturbance in the x axis. The
function 'RHSRWASC' is used for the right-hand-side of the numerical
integration.
This also shows how to use the time display.

------------------------------------------------------------------------- See also RHSRWASC and ReactionWheel., Plot2D, TimeGUI, TimeLabl, RK4 -------------------------------------------------------------------------

Contents

%--------------------------------------------------------------------------
%   Copyright (c) 2003 Princeton Satellite Systems, Inc.
%   All rights reserved.
%--------------------------------------------------------------------------

Global for the time interface

%-------------------------------
global simulationAction
simulationAction = ' ';

Sim data

%----------
nSim  = 1000;
dTSim = 0.25;

Initialize the reaction wheel model with the data stored in the model

%-----------------------------------------------------------------------
ReactionWheel('initialize');

Spacecraft data

%-----------------
d          	= ReactionWheel('get default datastructure');
sim.inertia	= diag([100 80 150]);
sim.inrRWA  = d.inertia;
sim.mu    	= 3.98600436e5;
sim.tDist 	= [0.1;0;0]; % External disturbance

Initial state

%---------------
rECI        = [6578;0;0];
vECI        = [0;sqrt(sim.mu/rECI(1));0];
qECIToBody  = [1;0;0;0];
w           = [0;0;0];
wRWA        = [0;0;0];
angleRWA    = [0;0;0];
frictionRWA = [0;0;0];

Put the state together

%------------------------
x           = [rECI;vECI;qECIToBody;w;angleRWA;wRWA;frictionRWA];
t           = 0;

Initialize the time display

%-----------------------------
[ratioRealTime, tToGoMem] =  TimeGUI( nSim, 0, [], 0, dTSim, 'Spacecraft with Reaction Wheels' );

Allocate memory for arrays

%----------------------------
tPlot = zeros( 1,nSim);
xPlot = zeros(22,nSim);

Run the simulation

-------------------

for k = 1:nSim

  % Display the status message
  %---------------------------
  [ ratioRealTime, tToGoMem ] = TimeGUI( nSim, k, tToGoMem, ratioRealTime, dTSim );

  % Integrate one step
  %-------------------
  x          = RK4('RHSRWASC', x, dTSim, t, sim );
  t          = t + dTSim;

  % Store for plotting
  %-------------------
  tPlot(k)   = t;
  xPlot(:,k) = x;

  % Time control
  %-------------
  switch simulationAction
    case 'pause'
      pause
      simulationAction = ' ';
    case 'stop'
      return;
    case 'plot'
      break;
  end

end

Adjust the arrays if you quit early

%-------------------------------------
j           = 1:k;
xPlot       = xPlot(:,j);
[tPlot, c ] = TimeLabl( tPlot(j) );

Plot

%------
Plot2D( tPlot, xPlot( 1: 3,:), c, ['Rx';'Ry';'Rz'],      'Position'             )
Plot2D( tPlot, xPlot( 4: 6,:), c, ['Vx';'Vy';'Vz'],      'Velocity'             )
Plot2D( tPlot, xPlot( 7:10,:), c, ['Qs';'Qx';'Qy';'Qz'], 'Quaternion'           )
Plot2D( tPlot, xPlot(11:13,:), c, ['Wx';'Wy';'Wz'],      'Body Rates'           )
Plot2D( tPlot, xPlot(17:19,:), c, ['W1';'W2';'W3'],      'Reaction Wheel Rates' )


%--------------------------------------