В этом примере показано, как вычислить и визуализировать интервалы доступа угла обзора между спутником (спутниками) и наземной станцией. Это использует:
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");
Симулируйте модель. В этом примере, 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 и скоростной 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;
Чтобы отобразить спутниковые траектории по Земле (эллипсоид 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");
Добавьте наземную станцию в объект 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. Печать.