Сравнение распространителей орбиты

Этот пример сравнивает орбиты, предсказанные "Двумя Телами, Кеплеровскими", Упрощенные общие возмущения 4 (SGP4) и Упрощенные Возмущения Глубокого космоса 4 распространителя орбиты (SDP4). Распространитель орбиты является решателем, который вычисляет положение и скорость объекта, движение которого преимущественно под влиянием силы тяжести от небесных тел. Два Тела Кеплеровский распространитель орбиты основан на относительной модели 2D тела, которая принимает сферическое поле силы тяжести для Земли и пропускает третьи влияния корпуса и другие экологические возмущения, и следовательно, наименее точны. Распространитель орбиты SGP4 объясняет светские и периодические орбитальные возмущения, вызванные геометрией Земли и атмосферным перетаскиванием, и применим к околоземным спутникам, орбитальный период которых меньше 225 минут. Распространитель орбиты SDP4 полагается на SGP4 путем объяснения солнечной и лунной силы тяжести и применим к спутникам, орбитальный период которых больше или равен 225 минутам. Распространитель орбиты по умолчанию для satelliteScenario SGP4 для спутников, орбитальный период которых меньше 225 минут и SDP4 в противном случае.

Создайте спутниковый сценарий

Создайте спутниковый сценарий при помощи satelliteScenario функция. Установите время начала до 11 мая 2020 12:35:38 UTC и время остановки до 13 мая 2020 12:35:38 UTC, при помощи datetime функция. Установите шаг расчета на 60 секунд.

startTime = datetime(2020,5,11,12,35,38);
stopTime = startTime + days(2);
sampleTime = 60;
sc = satelliteScenario(startTime,stopTime,sampleTime)
sc = 
  satelliteScenario with properties:

         StartTime: 11-May-2020 12:35:38
          StopTime: 13-May-2020 12:35:38
        SampleTime: 60
           Viewers: [0×0 matlabshared.satellitescenario.Viewer]
        Satellites: []
    GroundStations: []
          AutoShow: 1

Добавьте спутники в спутниковый сценарий

Добавьте три спутника в спутниковый сценарий из файла 2D линейного элемента (TLE) eccentricOrbitSatellite.tle при помощи satellite функция. TLE является форматом данных, используемым для кодирования орбитальных элементов Вращающегося вокруг земли объекта, заданного в определенное время. Присвойте Два Тела Кеплеровский распространитель орбиты первому спутнику, SGP4 к второму спутнику и SDP4 к третьему спутнику.

tleFile = "eccentricOrbitSatellite.tle";
satTwoBodyKeplerian = satellite(sc,tleFile, ...
    "Name","satTwoBodyKeplerian", ...
    "OrbitPropagator","two-body-keplerian")
satTwoBodyKeplerian = 
  Satellite with properties:

               Name: "satTwoBodyKeplerian"
                 ID: 1
     ConicalSensors: []
            Gimbals: []
       Transmitters: []
          Receivers: []
           Accesses: []
        GroundTrack: [1×1 matlabshared.satellitescenario.GroundTrack]
              Orbit: [1×1 matlabshared.satellitescenario.Orbit]
    OrbitPropagator: "two-body-keplerian"
        MarkerColor: [1 0 0]
         MarkerSize: 10
          ShowLabel: 1
     LabelFontColor: [1 0 0]
      LabelFontSize: 15

satSGP4 = satellite(sc,tleFile, ...
    "Name","satSGP4", ...
    "OrbitPropagator","sgp4")
satSGP4 = 
  Satellite with properties:

               Name: "satSGP4"
                 ID: 2
     ConicalSensors: []
            Gimbals: []
       Transmitters: []
          Receivers: []
           Accesses: []
        GroundTrack: [1×1 matlabshared.satellitescenario.GroundTrack]
              Orbit: [1×1 matlabshared.satellitescenario.Orbit]
    OrbitPropagator: "sgp4"
        MarkerColor: [1 0 0]
         MarkerSize: 10
          ShowLabel: 1
     LabelFontColor: [1 0 0]
      LabelFontSize: 15

satSDP4 = satellite(sc,tleFile, ...
    "Name","satSDP4", ...
    "OrbitPropagator","sdp4")
satSDP4 = 
  Satellite with properties:

               Name: "satSDP4"
                 ID: 3
     ConicalSensors: []
            Gimbals: []
       Transmitters: []
          Receivers: []
           Accesses: []
        GroundTrack: [1×1 matlabshared.satellitescenario.GroundTrack]
              Orbit: [1×1 matlabshared.satellitescenario.Orbit]
    OrbitPropagator: "sdp4"
        MarkerColor: [1 0 0]
         MarkerSize: 10
          ShowLabel: 1
     LabelFontColor: [1 0 0]
      LabelFontSize: 15

Визуализируйте Спутники и их Орбиты

Запустите спутниковое средство просмотра сценария и визуализируйте спутниковый сценарий при помощи satelliteScenarioViewer функция. Установите визуализацию satTwoBodyKeplerian к красному, satSGP4 к зеленому и satSDP4 к пурпурному.

v = satelliteScenarioViewer(sc);
satSGP4.MarkerColor = [0 1 0];
satSGP4.Orbit.LineColor = [0 1 0];
satSGP4.LabelFontColor = [0 1 0];
satSDP4.MarkerColor = [1 0 1];
satSDP4.Orbit.LineColor = [1 0 1];
satSDP4.LabelFontColor = [1 0 1];

Фокусируйте камеру на satTwoBodyKeplerian при помощи camtarget функция.

camtarget(v,satTwoBodyKeplerian);

Щелкните левой кнопкой где угодно в спутниковом окне средства просмотра сценария и переместите мышь при содержании нажатия кнопки, чтобы панорамировать камеру. Настройте уровень изменения масштаба с помощью колесика прокрутки, чтобы принести все три спутника в представление.

Визуализируйте динамическую анимацию спутникового перемещения

Визуализируйте перемещение satelliles при помощи play функция на спутниковом сценарии. play функция симулирует спутниковый сценарий от заданного StartTime к StopTime использование размера шага задано SampleTime, и проигрывает результаты на спутниковом средстве просмотра сценария.

play(sc)

Используйте управление воспроизведением, расположенное в нижней части спутникового окна средства просмотра сценария, чтобы управлять скоростью воспроизведения и направлением. Фокусируйте камеру снова на satTwoBodyKeplerian при помощи camtarget функция, и приносит все три спутника в представление путем корректировки уровня изменения масштаба.

camtarget(v,satTwoBodyKeplerian);

Положения этих трех спутников отличаются в зависимости от времени.

Получите историю положения и скорости спутников

Возвратите историю положения и скорости спутников в Геоцентрической астрономической системе координат (GCRF) при помощи states функция.

[positionTwoBodyKeplerian,velocityTwoBodyKeplerian,time] = states(satTwoBodyKeplerian);
[positionSGP4,velocitySGP4] = states(satSGP4);
[positionSDP4,velocitySDP4] = states(satSDP4);

Постройте величину относительного положения относительно двух тел кеплеровское предсказание

Вычислите величину относительного положения satSGP4 и satSDP4 относительно satTwoBodyKeplerian при помощи vecnorm функция.

sgp4RelativePosition = vecnorm(positionSGP4 - positionTwoBodyKeplerian,2,1);
sdp4RelativePosition = vecnorm(positionSDP4 - positionTwoBodyKeplerian,2,1);

Постройте величину относительных положений в километрах satSGP4 и satSDP4 относительно того из satTwoBodyKeplerian при помощи plot функция.

sgp4RelativePositionKm = sgp4RelativePosition/1000;
sdp4RelativePositionKm = sdp4RelativePosition/1000;
plot(time,sgp4RelativePositionKm,time,sdp4RelativePositionKm)
xlabel("Time")
ylabel("Relative position (km)")
legend("SGP4","SDP4")

Начальное относительное положение satSGP4 является ненулевым и тот из satSDP4 нуль потому что исходные положения satTwoBodyKeplerian и satSDP4 вычисляются из файла TLE с помощью распространителя орбиты SDP4, в то время как исходное положение satSGP4 вычисляется с помощью распространителя орбиты SGP4. В зависимости от времени, положение satSDP4 отклоняется от того из satTwoBodyKeplerian потому что последующие положения первого вычисляются с помощью распространителя орбиты SDP4, в то время как те из последнего вычисляются с помощью Двух Тел Кеплеровский распространитель орбиты. Распространитель орбиты SDP4 обеспечивает более высокую точность, потому что различающийся Два Тела Кеплеровский распространитель орбиты, она составляет сплющенность Земли, атмосферного перетаскивания и силы тяжести от солнца и луны.

Постройте величину относительной скорости относительно двух тел кеплеровское предсказание

Вычислите величину относительной скорости satSGP4 и satSDP4 относительно satTwoBodyKeplerian при помощи vecnorm функция.

sgp4RelativeVelocity = vecnorm(velocitySGP4 - velocityTwoBodyKeplerian,2,1);
sdp4RelativeVelocity = vecnorm(velocitySDP4 - velocityTwoBodyKeplerian,2,1);

Постройте величину относительных скоростей в метрах в секунду satSGP4 и satSDP4 относительно satTwoBodyKeplerian при помощи plot функция.

plot(time,sgp4RelativeVelocity,time,sdp4RelativeVelocity)
xlabel("Time")
ylabel("Velocity deviation (m/s)")
legend("SGP4","SDP4")

Начальная относительная скорость satSDP4 нуль потому что точно так же, как исходное положение, начальная скорость satTwoBodyKeplerian и satSDP4 также вычисляются из файла TLE с помощью распространителя орбиты SDP4. В зависимости от времени, скорость satSDP4 отклоняется от того из satTwoBodyKeplerian потому что во все другие времена, скорость satTwoBodyKeplerian вычисляется с помощью Двух Тел Кеплеровский распространитель орбиты, который имеет более низкую точность, когда по сравнению с тем из распространителя орбиты SDP4, который используется для вычисления скорости satSDP4. Скачки соответствуют периапсиде (самая близкая точка в орбите от центра массы Земли), где величины ошибок скорости объявлены.

Заключение

Отклонения в графиках являются результатом различных уровней точности трех распространителей орбиты. Кеплеровский распространитель орбиты Двух Тел наименее точен, когда это принимает, что поле силы тяжести Земли является сферическим, и также пропускает все другие источники орбитальных возмущений. Распространитель орбиты SGP4 более точен, когда это составляет сплющенность Земли и атмосферного перетаскивания. Распространитель орбиты SDP4 является самым точным среди трех, потому что это также составляет солнечную и лунную силу тяжести, которая является более явной в этом примере, потому что орбитальный период больше 225 минут, таким образом, беря спутник дальше от Земли.