exponenta event banner

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

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

  • Аэрокосмический блоксет Orbit Propagator блок

  • Панель инструментов для аэрокосмической промышленности satelliteScenario объект

  • Панель инструментов сопоставления worldmap и geoshow функции

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

Определение параметров полета и исходных условий спутника

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

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

Укажите орбитальные элементы Keplerian для спутника (ов) на 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 блок, соединенный с выходными портами. Orbit Propagator блок поддерживает векторизацию. Это позволяет моделировать несколько спутников в одном блоке путем задания массивов начальных условий в Block Parameters окно или использование set_param. Модель также включает раздел «Анализ и визуализация миссий», содержащий инструментальную панель Callback button. Когда по ней щелкают, эта кнопка управляет моделью, создает новый объект satelliteScenario в глобальном основном рабочем пространстве, содержащем спутник или созвездие, определенное в Orbit Propagator и открывает окно «Просмотр спутниковых сценариев» для нового сценария. Чтобы просмотреть исходный код для этого действия, дважды нажмите кнопку обратного вызова. Раздел «Mission Analysis and Visualization» - автономный технологический процесс, чтобы создать новый объект satelliteScenario и не используется в качестве части этого примера.

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

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

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

Задайте исходные условия спутника. Чтобы назначить набор орбитальных элементов Keplerian, определенный в предыдущем разделе, используйте 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;

Добавьте спутники в сценарий спутника в качестве временных интервалов положения и скорости 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), используйте функцию помощника 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");

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

Добавьте наземную станцию к объекту сценария с помощью 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] Верц, Джеймс Р., Дэвид Ф. Эверетт и Джеффери Дж. Пушелл. Проектирование космических полетов: Новый Smad. Хоторн, Калифорния: Microcosm Press, 2011. Печать.