В этом примере показано, как вычислять и визуализировать интервалы доступа по линии визирования между спутником (ами) и наземной станцией. В нем используются:
Аэрокосмический блоксет 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;
Чтобы показать спутниковые траектории по Земле (эллипсоид WGS84), используйте функцию помощника plot3DTrajectory.
mission.ColorMap = lines(256); % Define colormap for satellite trajectories
mission.ColorMap(1:3,:) = [];
plot3DTrajectories(mission.Satellite, mission.ColorMap);
Просмотр глобальной наземной трассы в виде 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. Печать.