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