Ошибка в распространении экваториальной орбиты с использованием GMAT

Наклон не такой большой, как показано на изображении, не забудьте проверить масштаб Z.Я распространил орбиту с большой полуосью 7000 км и остальными элементами кеплеровской орбиты 0 на GMAT. Поскольку орбита круговая и находится в экваториальной плоскости, она не должна меняться со временем. Первоначально у меня Z = 0, но со временем значение Z значительно меняется (примерно 2 км в день 1). Когда я построил эту орбиту в MATLAB, ее угол наклона и большая полуось менялись с течением времени. Каким может быть возможное объяснение этому?

Ниже приведен сценарий GMAT:

%General Mission Analysis Tool(GMAT) Script
%Created: 2020-08-08 13:43:20


%----------------------------------------
%---------- Spacecraft
%----------------------------------------

Create Spacecraft DefaultSC;
GMAT DefaultSC.DateFormat = UTCGregorian;
GMAT DefaultSC.Epoch = '21 Mar 2019 00:00:00.000';
GMAT DefaultSC.CoordinateSystem = EarthMJ2000Eq;
GMAT DefaultSC.DisplayStateType = Keplerian;
GMAT DefaultSC.SMA = 7000;
GMAT DefaultSC.ECC = 0;
GMAT DefaultSC.INC = 0;
GMAT DefaultSC.RAAN = 0;
GMAT DefaultSC.AOP = 0;
GMAT DefaultSC.TA = 0;
GMAT DefaultSC.DryMass = 850;
GMAT DefaultSC.Cd = 2.2;
GMAT DefaultSC.Cr = 1.8;
GMAT DefaultSC.DragArea = 15;
GMAT DefaultSC.SRPArea = 1;
GMAT DefaultSC.SPADDragScaleFactor = 1;
GMAT DefaultSC.SPADSRPScaleFactor = 1;
GMAT DefaultSC.NAIFId = -10008001;
GMAT DefaultSC.NAIFIdReferenceFrame = -9008001;
GMAT DefaultSC.OrbitColor = Red;
GMAT DefaultSC.TargetColor = Teal;
GMAT DefaultSC.OrbitErrorCovariance = [ 1e+70 0 0 0 0 0 ; 0 1e+70 0 0 0 0 ; 0 0 1e+70 0 0 0 ; 0 0 0 1e+70 0 0 ; 0 0 0 0 1e+70 0 ; 0 0 0 0 0 1e+70 ];
GMAT DefaultSC.CdSigma = 1e+70;
GMAT DefaultSC.CrSigma = 1e+70;
GMAT DefaultSC.Id = 'SatId';
GMAT DefaultSC.Attitude = CoordinateSystemFixed;
GMAT DefaultSC.SPADSRPInterpolationMethod = Bilinear;
GMAT DefaultSC.SPADSRPScaleFactorSigma = 1e+70;
GMAT DefaultSC.SPADDragInterpolationMethod = Bilinear;
GMAT DefaultSC.SPADDragScaleFactorSigma = 1e+70;
GMAT DefaultSC.ModelFile = 'aura.3ds';
GMAT DefaultSC.ModelOffsetX = 0;
GMAT DefaultSC.ModelOffsetY = 0;
GMAT DefaultSC.ModelOffsetZ = 0;
GMAT DefaultSC.ModelRotationX = 0;
GMAT DefaultSC.ModelRotationY = 0;
GMAT DefaultSC.ModelRotationZ = 0;
GMAT DefaultSC.ModelScale = 1;
GMAT DefaultSC.AttitudeDisplayStateType = 'Quaternion';
GMAT DefaultSC.AttitudeRateDisplayStateType = 'AngularVelocity';
GMAT DefaultSC.AttitudeCoordinateSystem = EarthMJ2000Eq;
GMAT DefaultSC.EulerAngleSequence = '321';





%----------------------------------------
%---------- ForceModels
%----------------------------------------

Create ForceModel DefaultProp_ForceModel;
GMAT DefaultProp_ForceModel.CentralBody = Earth;
GMAT DefaultProp_ForceModel.PrimaryBodies = {Earth};
GMAT DefaultProp_ForceModel.Drag = None;
GMAT DefaultProp_ForceModel.SRP = Off;
GMAT DefaultProp_ForceModel.RelativisticCorrection = Off;
GMAT DefaultProp_ForceModel.ErrorControl = RSSStep;
GMAT DefaultProp_ForceModel.GravityField.Earth.Degree = 2;
GMAT DefaultProp_ForceModel.GravityField.Earth.Order = 0;
GMAT DefaultProp_ForceModel.GravityField.Earth.StmLimit = 100;
GMAT DefaultProp_ForceModel.GravityField.Earth.PotentialFile = 'JGM3.cof';
GMAT DefaultProp_ForceModel.GravityField.Earth.TideModel = 'None';

Create ForceModel InternalODEModel;
GMAT InternalODEModel.CentralBody = Earth;
GMAT InternalODEModel.PrimaryBodies = {Earth};
GMAT InternalODEModel.Drag = None;
GMAT InternalODEModel.SRP = Off;
GMAT InternalODEModel.RelativisticCorrection = Off;
GMAT InternalODEModel.ErrorControl = None;
GMAT InternalODEModel.GravityField.Earth.Degree = 2;
GMAT InternalODEModel.GravityField.Earth.Order = 0;
GMAT InternalODEModel.GravityField.Earth.StmLimit = 100;
GMAT InternalODEModel.GravityField.Earth.PotentialFile = 'JGM2.cof';
GMAT InternalODEModel.GravityField.Earth.TideModel = 'None';

%----------------------------------------
%---------- Propagators
%----------------------------------------

Create Propagator DefaultProp;
GMAT DefaultProp.FM = InternalODEModel;
GMAT DefaultProp.Type = AdamsBashforthMoulton;
GMAT DefaultProp.InitialStepSize = 1;
GMAT DefaultProp.Accuracy = 1e-10;
GMAT DefaultProp.MinStep = 1;
GMAT DefaultProp.MaxStep = 1;
GMAT DefaultProp.MaxStepAttempts = 50;
GMAT DefaultProp.StopIfAccuracyIsViolated = false;
GMAT DefaultProp.LowerError = 1e-13;
GMAT DefaultProp.TargetError = 9.999999999999999e-12;

%----------------------------------------
%---------- Subscribers
%----------------------------------------

Create ReportFile ReportFile1;
GMAT ReportFile1.SolverIterations = Current;
GMAT ReportFile1.UpperLeft = [ 0 0 ];
GMAT ReportFile1.Size = [ 0 0 ];
GMAT ReportFile1.RelativeZOrder = 0;
GMAT ReportFile1.Maximized = false;
GMAT ReportFile1.Filename = <Enter file name and location>;
GMAT ReportFile1.Precision = 20;
GMAT ReportFile1.Add = {DefaultSC.UTCGregorian, DefaultSC.EarthMJ2000Eq.X, DefaultSC.EarthMJ2000Eq.Y, DefaultSC.EarthMJ2000Eq.Z, DefaultSC.EarthMJ2000Eq.VX, DefaultSC.EarthMJ2000Eq.VY, DefaultSC.EarthMJ2000Eq.VZ, DefaultSC.DefaultProp_ForceModel.AccelerationX, DefaultSC.DefaultProp_ForceModel.AccelerationY, DefaultSC.DefaultProp_ForceModel.AccelerationZ};
GMAT ReportFile1.WriteHeaders = true;
GMAT ReportFile1.LeftJustify = On;
GMAT ReportFile1.ZeroFill = Off;
GMAT ReportFile1.FixedWidth = false;
GMAT ReportFile1.Delimiter = ',';
GMAT ReportFile1.ColumnWidth = 30;
GMAT ReportFile1.WriteReport = true;


%----------------------------------------
%---------- Mission Sequence
%----------------------------------------

BeginMissionSequence;
Propagate DefaultProp(DefaultSC) {DefaultSC.ElapsedSecs = 86400};
GMAT DefaultProp.Type = AdamsBashforthMoultonВот твоя проблема. У GMAT паршивые пропагандисты.
@DavidHammen Алгоритм Адамса-Башфорта не должен быть таким уж плохим! Я подозреваю, что где-то в этом коде есть ошибка. Что, я думаю, делает его паршивым пропагандистом! ;-)
Если никакие возмущения не действуют вдоль Z, то не должно быть накопления численной ошибки в этом направлении. Я бы посмотрел на какое-то неожиданное возмущение, и в вашем скрипте похоже, что J2 включен (GMAT InternalODEModel.GravityField.Earth.Degree = 2, хотя я не уверен в GMAT). Вы пробовали смотреть на это?
Это потому, что вы используете «JGM3.cof» или «JGM2.cof» (я не знаю точного значения параметров GMAT). Если вы используете сферическую Землю, вы должны видеть не более 40 м.

Ответы (1)

В InternalODEModelвашем сценарии у вас включен J2. Установите степень на ноль, и проблема должна быть устранена.

Create ForceModel InternalODEModel;
GMAT InternalODEModel.CentralBody = Earth;
GMAT InternalODEModel.PrimaryBodies = {Earth};
GMAT InternalODEModel.Drag = None;
GMAT InternalODEModel.SRP = Off;
GMAT InternalODEModel.RelativisticCorrection = Off;
GMAT InternalODEModel.ErrorControl = None;
GMAT InternalODEModel.GravityField.Earth.Degree = 2;  <--------- PROBLEM
GMAT InternalODEModel.GravityField.Earth.Order = 0;
GMAT InternalODEModel.GravityField.Earth.StmLimit = 100;
GMAT InternalODEModel.GravityField.Earth.PotentialFile = 'JGM2.cof';
GMAT InternalODEModel.GravityField.Earth.TideModel = 'None';
Я не понимаю! В ОП говорится: «Поскольку орбита круговая и находится в экваториальной плоскости ...», как можно было Дж 2 вообще есть эффект? Если бы Дж 3 или tesserals это была бы другая история. Я никогда не могу вспомнить разницу между «степенью» и «порядком», но действительно ли означает степень = 2 Дж 2 ? Если да, то я не понимаю, насколько это правильное объяснение.
Чтобы перепроверить, сделать GMAT DefaultSC.CoordinateSystem = EarthMJ2000Eq;и GMAT DefaultSC.INC = 0;подтвердить, что это экваториальный? Кроме того, могут ли присутствовать эффекты Солнца или Луны, или сценарий OP гарантирует, что они отключены? Спасибо!
@uhoh: да, J2 - это гармоника второго порядка и нулевой степени. Судя по скрипту GMAT, орбита ОП является экваториальной в системе среднего экватора и равноденствия J2000 . Поскольку земной экватор движется из-за прецессии и нутации, в кадре EMEJ2000 может присутствовать компонент возмущения J2 вне (экваториальной) плоскости. Я не знаю, может ли это оправдать ошибку 2 км / день, упомянутую в OP, но простой способ проверить - установить начальную эпоху на J2000 и посмотреть, уменьшается ли конечная компонента Z. Или просто выключить J2 :)
@LeWavite Отличная детективная работа! Однако, если я правильно понимаю сюжет в вопросе, изменение ~ 2 км за ~ 1 день демонстрирует дрейф наклонения , а не прецессию, в то время как упомянутая вами проблема с рамой J2000.0 приведет к наклону 0,3 градуса в 2020 г., что результат прецессии, и, как вы предполагаете, может быть даже не виден за один день на этом графике. Но 3D сложно, может быть, то, что показано на изображении, является прецессией вокруг оси, наклоненной на 0,3 градуса, и я просто этого не вижу?