exponenta event banner

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

Этот пример сравнивает орбиты, предсказанные Two-Body-Keplerian, Simplified General Perturbations 4 (SGP4) и Упрощенными Волнениями Глубокого космоса 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 функция на спутниковом сценарии. 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 минут, тем самым уводя спутник дальше от Земли.