Этот пример сравнивает орбиты, предсказанные распространителями орбиты Двух Тел-Кеплериан, Упрощенного Общего 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 минут, тем самым уводя спутник дальше от Земли.