Анализ миссии с блоком Orbit Propagator

Этот пример показывает, как вычислить и визуализировать интервалы доступа к линии видимости между спутником (ами) и наземной станцией. Он использует:

  • Aerospace Blockset Orbit Propagator блок

  • Aerospace Toolbox satelliteScenario объект

  • Mapping Toolbox и geoshow функции

Aerospace Toolbox satelliteScenario объект позволяет пользователям добавлять спутники и созвездия к сценариям двумя способами. Во-первых, начальные условия спутника могут быть определены из файла с двух линий элементами (.tle) или из орбитальных элементов Кеплера, и спутники могут затем распространяться с помощью задачи Кеплера, упрощенной общей SGP-4 возмущения алогиритма или упрощенной SDP-4 алгоритма возмущения глубокого космоса. Кроме того, ранее сгенерированные ephemeris данные с временной меткой могут быть добавлены к сценарию из timeseries или объекта timetable. Данные интерполируются в объект сценария, чтобы соответствовать временным шагам сценария. Эта вторая опция может использоваться, чтобы включить данные, сгенерированные в модели Simulink, в новый или существующий satelliteScenario. В этом примере показано, как распространить спутниковые траектории с помощью численного интегрирования с Aerospace Blockset Orbit Propagator блокируйте и загружайте записанные эфемеридные данные в satelliteScenario объект для анализа доступа.

Определите параметры миссии и начальные условия спутника

Укажите дату и длительность начала миссии. Этот пример использует структуры MATLAB для организации данных миссии. Эти структуры делают доступ к данным позже в примере более интуитивно понятным. Они также помогают объявить глобальное базовое рабочее пространство.

mission.StartDate = datetime(2019, 1, 4, 12, 0, 0);
mission.Duration  = hours(6);

Задайте орбитальные элементы Кеплера для спутника (ов) в mission.StartDate.

mission.Satellite.SemiMajorAxis  = 6786233.13; % meters
mission.Satellite.Eccentricity   = 0.0010537;
mission.Satellite.Inclination    = 51.7519;    % deg
mission.Satellite.RAAN           = 95.2562;    % deg
mission.Satellite.ArgOfPeriapsis = 93.4872;    % deg
mission.Satellite.TrueAnomaly    = 202.9234;   % deg

Укажите широту и долготу наземной станции для использования при анализе доступа ниже.

mission.GroundStation.Latitude  =42;  % deg
миссия. GroundStation. Долгота =-71; % deg

Откройте и сконфигурируйте модель распространения орбиты

Откройте включенную модель Simulink. Эта модель содержит Orbit Propagator блок, соединенный с выходными портами. The Orbit Propagator блок поддерживает векторизацию. Это позволяет вам смоделировать несколько спутников в одном блоке путем определения массивов начальных условий в Block Parameters окно или использование set_param. Модель также включает раздел «Анализ и визуализация миссии», который содержит приборную панель Callback button. При нажатии этой кнопки запускает модель, создает новый объект satelliteScenario в глобальном базовом рабочем пространстве, содержащем спутник или созвездие, заданную в Orbit Propagator Блок и открывает окно Средства просмотра Satellite Scenario для нового сценария. Чтобы просмотреть исходный код для этого действия, дважды нажмите кнопку коллбэка. Раздел «Анализ и визуализация миссии» является автономным рабочим процессом для создания нового объекта satelliteScenario и не используется в этом примере.

mission.mdl = "OrbitPropagatorBlockExampleModel";
open_system(mission.mdl);
snapshotModel(mission.mdl);

Определите путь к Orbit Propagator блок в модели.

mission.Satellite.blk = mission.mdl + "/Orbit Propagator";

Установите начальные условия спутника. Чтобы назначить набор орбитальных элементов Кеплера, заданный в предыдущем разделе, используйте set_param.

set_param(mission.Satellite.blk, ...
    "startDate",      num2str(juliandate(mission.StartDate)), ...
    "stateFormatNum", "Orbital elements", ...
    "orbitType",      "Keplerian", ...
    "semiMajorAxis",  "mission.Satellite.SemiMajorAxis", ...
    "eccentricity",   "mission.Satellite.Eccentricity", ...
    "inclination",    "mission.Satellite.Inclination", ...
    "raan",           "mission.Satellite.RAAN", ...
    "argPeriapsis",   "mission.Satellite.ArgOfPeriapsis", ...
    "trueAnomaly",    "mission.Satellite.TrueAnomaly");

Установите положение и скорость выходных портов блока, чтобы использовать земную фиксированную систему координат, которая является Международной наземной системой отсчета (ITRF).

set_param(mission.Satellite.blk, ...
    "centralBody",  "Earth", ...
    "outportFrame", "Fixed-frame");

Сконфигурируйте распространитель. Этот пример использует численный распространитель для более высокой точности положения. Используйте числовые распространители, чтобы смоделировать гравитационный потенциал Земли, используя уравнение для универсального тяготения ("Pt-mass"), зональная гармоническая модель второго порядка ("Oblate Ellipsoid (J2)"), или сферическая гармоническая модель ("Spherical Harmonics"). Сферические гармоники являются наиболее точными, но торговая точность для скорости. Для повышенной точности можно также задать, использовать ли параметры ориентации Земли (EOP) во внутренних преобразованиях между инерционными (ICRF) и фиксированными (ITRF) системами координат.

set_param(mission.Satellite.blk, ...
    "propagator",   "Numerical (high precision)", ...
    "gravityModel", "Spherical Harmonics", ...
    "earthSH",      "EGM2008", ... % Earth spherical harmonic potential model
    "shDegree",     "120", ... % Spherical harmonic model degree and order
    "useEOPs",      "on", ... % Use EOP's in ECI to ECEF transformations
    "eopFile",      "aeroiersdata.mat"); % EOP data file

Применить настройку решателя уровня модели с помощью set_param. Для лучшей эффективности и точности при использовании численного распространителя используйте решатель с переменным шагом.

set_param(mission.mdl, ...
    "SolverType", "Variable-step", ...
    "SolverName", "VariableStepAuto", ...
    "RelTol",     "1e-6", ...
    "AbsTol",     "1e-7", ...
    "StopTime",   string(seconds(mission.Duration)));

Сохраните выходы порта модели как набор данных объектов временных рядов.

set_param(mission.mdl, ...
    "SaveOutput", "on", ...
    "OutputSaveName", "yout", ...
    "SaveFormat", "Dataset");

Запуск модели и сбор эфемеридов спутника

Симулируйте модель. В этом примере Orbit Propagator блок устанавливается в выходное положение и состояния скорости в координатной системе координат ECEF (ITRF).

mission.SimOutput = sim(mission.mdl);

Извлеките данные о положении и скорости из структуры выходных данных модели.

mission.Satellite.TimeseriesPosECEF = mission.SimOutput.yout{1}.Values;
mission.Satellite.TimeseriesVelECEF = mission.SimOutput.yout{2}.Values;

Установите начальные данные из миссии в объект timeseries.

mission.Satellite.TimeseriesPosECEF.TimeInfo.StartDate = mission.StartDate;
mission.Satellite.TimeseriesVelECEF.TimeInfo.StartDate = mission.StartDate;

Загрузите эфемериды спутника в satelliteScenario Объект

Создайте объект спутникового сценария для использования во время фрагмента анализа этого примера.

scenario = satelliteScenario;

Добавьте спутники к сценарию спутника в качестве временного timeseries положения и скорости ECEF с помощью satellite способ.

sat = satellite(scenario, mission.Satellite.TimeseriesPosECEF, mission.Satellite.TimeseriesVelECEF, ...
    "CoordinateFrame", "ecef")
sat = 
  Satellite with properties:

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

disp(scenario)
  satelliteScenario with properties:

         StartTime: 04-Jan-2019 12:00:00
          StopTime: 04-Jan-2019 18:00:00
        SampleTime: 60
           Viewers: [0×0 matlabshared.satellitescenario.Viewer]
        Satellites: [1×1 matlabshared.satellitescenario.Satellite]
    GroundStations: []
          AutoShow: 1

Предварительный просмотр широты (град), долготы (град) и высоты (м) для каждого спутника. Используйте states метод для запроса состояний спутника на каждом временном шаге сценария.

for idx = numel(sat):-1:1
    % Retrieve states in geographic coordinates
    [llaData, ~, llaTimeStamps] = states(sat(idx), "CoordinateFrame","geographic");
    % Organize state data for each satellite in a seperate timetable
    mission.Satellite.LLATable{idx} = timetable(llaTimeStamps', llaData(1,:)', llaData(2,:)', llaData(3,:)',...
        'VariableNames', {'Lat_deg','Lon_deg', 'Alt_m'});
    mission.Satellite.LLATable{idx}
end
ans=361×3 timetable
            Time            Lat_deg    Lon_deg      Alt_m   
    ____________________    _______    _______    __________

    04-Jan-2019 12:00:00    -44.804    120.35     4.2526e+05
    04-Jan-2019 12:01:00    -42.797    124.73     4.2229e+05
    04-Jan-2019 12:02:00    -40.626    128.77     4.2393e+05
    04-Jan-2019 12:03:00    -38.322    132.53     4.2005e+05
    04-Jan-2019 12:04:00    -35.848    136.07     4.2004e+05
    04-Jan-2019 12:05:00    -33.289    139.35      4.203e+05
    04-Jan-2019 12:06:00    -30.655    142.41      4.187e+05
    04-Jan-2019 12:07:00    -27.884    145.34     4.1982e+05
    04-Jan-2019 12:08:00    -25.069    148.09     4.1831e+05
    04-Jan-2019 12:09:00    -22.234    150.68     4.1404e+05
    04-Jan-2019 12:10:00    -19.297    153.19     4.1829e+05
    04-Jan-2019 12:11:00    -16.343    155.58     4.1713e+05
    04-Jan-2019 12:12:00    -13.388    157.89       4.07e+05
    04-Jan-2019 12:13:00    -10.354    160.15      4.104e+05
    04-Jan-2019 12:14:00    -7.3077    162.37     4.1291e+05
    04-Jan-2019 12:15:00    -4.2622    164.55     4.0487e+05
      ⋮

clear llaData llaTimeStamps;

Отобразите спутниковые траектории над 3D глобусом

Чтобы отобразить спутниковые траектории над Землей (WGS84 эллипсоид), используйте функцию helper plot3DTrajectory.

mission.ColorMap = lines(256); % Define colormap for satellite trajectories 
mission.ColorMap(1:3,:) = [];
plot3DTrajectories(mission.Satellite, mission.ColorMap);

Отображение глобальных и региональных 2D трассировок земли

Рассмотрим глобальную трассировку Земли как 2D проекцию с помощью функции helper plot2DTrajectories:

plot2DTrajectories(mission.Satellite, mission.GroundStation, mission.ColorMap);

Просмотр региональной трассировки заземления. Выберите необходимую область из раскрывающегося меню:

plot2DTrajectories(mission.Satellite, mission.GroundStation, mission.ColorMap, "usa");

Вычисление доступа спутника к наземной станции (видимость линии видимости)

Добавьте наземную станцию к объекту satelliteScenario с помощью groundStation способ.

gs = groundStation(scenario, mission.GroundStation.Latitude, mission.GroundStation.Longitude, ...
    "MinElevationAngle", 10, "Name", "Ground Station")
gs = 
  GroundStation with properties:

                 Name: "Ground Station"
                   ID: 2
             Latitude: 42
            Longitude: -71
             Altitude: 0
    MinElevationAngle: 10
       ConicalSensors: []
              Gimbals: []
         Transmitters: []
            Receivers: []
             Accesses: []
          MarkerColor: [0 1 1]
           MarkerSize: 10
            ShowLabel: 1
        LabelFontSize: 15
       LabelFontColor: [0 1 1]

Прикрепите анализ доступа к линии видимости между всеми отдельными спутниками и наземной станцией с помощью access способ.

for idx = 1:numel(sat)
    access(sat(idx), gs);
end
ac = [sat(:).Accesses];
[ac(:).LineColor] = deal("green");

Отображать интервалы доступа

Отображать интервалы доступа для каждого спутника как timetable. Использование accessStatus и accessIntervals спутниковые методы для взаимодействия с результатами анализа доступа.

for idx = numel(ac):-1:1
    mission.Satellite.AccessStatus{idx} = accessStatus(ac(idx));
    mission.Satellite.AccessTable{idx} = accessIntervals(ac(idx));
    % Use local function addLLAToTimetable to add geographic positions and
    % closest approach range to the Access Intervals timetable
    mission.Satellite.AccessTable{idx} = addLLAToTimetable(...
        mission.Satellite.AccessTable{idx}, mission.Satellite.LLATable{idx}, mission.GroundStation);
end
clear idx;

Отобразите интервалы доступа 2D наложением наземных траекторий траекторий спутников с помощью вспомогательной функции plotAccessIntervals.

plotAccessIntervals(mission.Satellite, mission.GroundStation, mission.ColorMap);

mission.Satellite.AccessTable{:}
ans=2×8 table
      Source            Target         IntervalNumber         StartTime                EndTime           Duration    LLA (deg, deg, m)    ClosestApproach (m)
    ___________    ________________    ______________    ____________________    ____________________    ________    _________________    ___________________

    "Satellite"    "Ground Station"          1           04-Jan-2019 12:44:00    04-Jan-2019 12:50:00      360         {6×3 double}           5.0087e+05     
    "Satellite"    "Ground Station"          2           04-Jan-2019 14:21:00    04-Jan-2019 14:25:00      240         {4×3 double}            1.102e+06     

Последующий анализ

Воспроизведение satelliteScenario объект для открытия и анимации сценария в satelliteScenarioViewer окно.

play(scenario)
disp(scenario.Viewers(1))
  Viewer with properties:

                       Name: 'Satellite Scenario Viewer'
                   Position: [560 240 800 600]
                    Basemap: 'satellite'
    PlaybackSpeedMultiplier: 50
       CameraReferenceFrame: 'ECEF'
                CurrentTime: 04-Jan-2019 12:00:25
                  Dimension: '3D'

Ссылки

[1] Wertz, James R, David F. Everett, and Jeffery J. Puschell. Space Mission Engineering: The New Smad. Хоторн, Калифорния: Microcosm Press, 2011. Печать.