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

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

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

Создайте спутниковый сценарий при помощи satelliteScenario функция. Установите время запуска 11-May-2020 12:35:38 UTC, а время остановки - 13-May-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

Добавление спутников к спутниковому сценарию

Добавьте три спутника к спутниковому сценарию из файла с двумя линейными элементами (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);

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

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

Визуализируйте движение спутников с помощью play функция на спутниковом сценарии. The 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 минут, тем самым уводя спутник дальше от Земли.