Orbit separation demo
Calculate a delta-V for an in-plane separation and size a thruster to perform the maneuver. This is a bang/bang maneuver.
This demonstrates that a small satellite deployed in LEO can move 1 km away from the "mother ship" in less than one orbit with a range of thrusters. The Lambert delta-V approaches the ideal delta-V as the time approaches one orbit.
Contents
%-------------------------------------------------------------------------- % Copyright 2017 Princeton Satellite Systems, Inc. All rights reserved. %-------------------------------------------------------------------------- % Since version 2017.1 %--------------------------------------------------------------------------
Parameters and ideal solution
% Mission Parameters sma = 6740; % km dSep = 20; % km mass = 12; % kg % Ideal delta-V for 1 revolution. This function can also calculate DVs for % multiple revolutions. nRev = 1; dVPhase = OrbMnvrPhaseChange( sma, dSep/sma, nRev )*1e3; fprintf(1,'1 Rev Delta-V: %f m/s\n',dVPhase);
1 Rev Delta-V: 2.420097 m/s
Lambert delta-V study
Study a single-revolution Lambert maneuver to achieve the phase change. Then, determine how long the thruster(s) would need to fire to achieve the delta-V.
thrusts = [0.1;0.5;1]; % N % Initial orbit el = [6740 0 0 0 0 0]; [r1,v1] = El2RV(el); % Target - 1 km trailing separation delTheta = dSep/sma; elT = [6740 0 0 0 0 delTheta]; [r2,v2] = El2RV(elT); % Transfer times and plotting parameters % Do NOT go more than one revolution. tTrans = [30:90]*60; dVa = zeros(3,size(tTrans,2)); dVb = zeros(3,size(tTrans,2)); tMPlot = zeros(size(tTrans)); % Perform targeting for k = 1:length(tTrans) [dV,tM,ok] = DVTarget(r1,v1,r2,v2,tTrans(k)); dVa(:,k) = dV.a*1e3; dVb(:,k) = dV.b*1e3; tMPlot(k) = tM; end aMag = Mag(dVa); bMag = aMag + Mag(dVb); Plot2D(tTrans/60,dVa) % Generate plot kShort = find(tMPlot>0); kLong = find(tMPlot<0); kEarth = find(tMPlot==0); NewFig('Delta V'); plot(tTrans/60,[aMag;bMag],'k'); hold on hS = plot(tTrans(kShort)/60,[aMag(kShort);bMag(kShort)],'b*'); if ~isempty(kLong) hL = plot(tTrans(kLong)/60,[aMag(kLong);bMag(kLong)],'go'); legend([hS(1) hL(1)],'Short','Long'); end XLabelS('Transfer TOF (min)'); YLabelS('First and Total Delta V (m/s)'); TitleS('Lambert Targeting Demo'); grid on; fprintf(1,'Minimum Lambert Delta-V: %f m/s\n',min(bMag)); % Estimate manuever time vs. thrust; assume constant mass deltaT = mass*(1./thrusts)*bMag; Plot2D(tTrans/60,deltaT,'Transfer TOF (min)','Total Burn Time (s)','Thruster Performance') legend(num2str(thrusts))
Minimum Lambert Delta-V: 2.424115 m/s
Plot ideal transfer
The long and short way computed by the Lambert algorithm are both shown for clarify, but DVTarget automatically chooses the one with the lowest delta-V.
tTrans = 60*60; % long way (greater than pi mean anomaly change) [dV,tM,ok] = DVTarget(r1,v1,r2,v2,tTrans); % Initial orbits [r1p,v1p] = RVFromKepler(RV2El(r1,v1),linspace(0,tTrans)); [r2p,v2p] = RVFromKepler(RV2El(r2,v2),linspace(0,tTrans)); % first transfer [vTrans,a,p] = LambertTOF( r1, r2p(:,end), tTrans, 1 ); [rT1,v] = RVFromKepler(RV2El(r1,vTrans(:,1)),linspace(0,tTrans)); % second transfer [vTrans,a,p] = LambertTOF( r1, r2p(:,end), tTrans, -1 ); [rT2,v] = RVFromKepler(RV2El(r1,vTrans(:,1)),linspace(0,tTrans)); [h,h1] = Plot3D( r1p, 'x (km)','y (km)','z (km)', 'Lambert Maneuver, Long and Short Path', 6378 ); hold on; h2 = plot3( r2p(1,:), r2p(2,:), r2p(3,:), 'g'); plot3( rT1(1,:), rT1(2,:), rT1(3,:), 'r--'); plot3( rT2(1,:), rT2(2,:), rT2(3,:), 'm--'); text( r1(1,1), r1(2,1), r1(3,1), 'x Start of Maneuver') text( rT2(1,end), rT2(2,end), rT2(3,end), 'x Rendezvous') axis square; axis equal; view(0,90); legend( [h1 h2], 'Current', 'Target' ) %--------------------------------------