Анализ миссии с блоком распространителя орбиты

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

  • Aerospace Blockset Orbit Propagator блок

  • Aerospace Toolbox satelliteScenario объект

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

Aerospace Toolbox satelliteScenario объект позволяет пользователям добавлять спутники и созвездия к сценариям двумя способами. Во-первых, спутниковые начальные условия могут быть заданы из двух файлов линейного элемента (.tle) или из Кеплеровских орбитальных элементов, и спутники могут затем быть распространены с помощью проблемы Кеплера, упростили общее возмущение alogirithm SGP-4 или упростили алгоритм возмущения глубокого космоса SDP-4. Кроме того, ранее сгенерированные эфемеридные данные с меткой времени могут быть добавлены к сценарию от объект расписания или timeseries. Данные интерполированы в объекте сценария выровняться с временными шагами сценария. Эта вторая опция может использоваться, чтобы включить данные, сгенерированные в модель 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
mission.GroundStation.Longitude =-71; % deg

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

Откройте включенную модель Simulink. Эта модель содержит Orbit Propagator блок соединяется с выходными портами. The Orbit Propagator блокируйте векторизацию поддержек. Это позволяет вам моделировать несколько спутников в одном блоке путем определения массивов начальных условий в Block Parameters окно или использование set_param. Модель также включает раздел "Mission Analysis and Visualization", который содержит инструментальную панель Callback button. Когда кликнувшийся, эта кнопка запускает модель, создает новый объект satelliteScenario в глобальном базовом рабочем пространстве, содержащем спутник или созвездие, заданное в Orbit Propagator блокируйтесь, и открывает окно Satellite Scenario Viewer для нового сценария. Чтобы просмотреть исходный код для этого действия, дважды щелкают по кнопке коллбэка. Раздел "Mission Analysis and Visualization" является автономным рабочим процессом, чтобы создать новый объект 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");

Сконфигурируйте распространителя. Этот пример использует числового распространителя для более высокой точности положения. Используйте числовых распространителей для модели Earth гравитационный потенциал с помощью уравнения для универсальной гравитации ("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");

Запустите модель и соберите спутниковый Ephemerides

Симулируйте модель. В этом примере, 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;

Загрузите спутниковый Ephemerides в satelliteScenario Объект

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

scenario = satelliteScenario;

Добавьте спутники в спутниковый сценарий как положение ECEF и скоростной timeseries с помощью 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

Широта предварительного просмотра (градус), долгота (градус) и высота (m) для каждого спутника. Используйте 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), используйте функцию помощника plot3DTrajectory.

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

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

Просмотрите глобальную наземную трассировку как 2D проекцию с помощью функции помощника 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, Джеймс Р, Дэвид Ф. Эверетт и Джеффри Дж. Пушелл. Разработка космической миссии: новый Smad. Хоуторн, CA: нажатие микромира, 2011. Печать.