이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
궤도 전파기 블록을 이용한 임무 분석
이 예제에서는 위성과 지상국 간의 가시선 액세스 구간을 계산하고 시각화하는 방법을 보여줍니다. 다음을 사용합니다.
Aerospace Blockset™
Orbit Propagator블록Aerospace Toolbox
satelliteScenario객체Mapping Toolbox™
worldmap및geoshow함수

Aerospace Toolbox satelliteScenario 객체를 사용하면 두 가지 방법으로 시나리오에 위성과 위성군을 추가할 수 있습니다. 먼저, 위성의 초기 조건은 TLE 파일이나 케플러 궤도 요소로부터 정의할 수 있으며, 이후 케플러 문제, 단순화된 일반 섭동 알고리즘(SGP-4) 또는 단순화된 심우주 섭동 알고리즘(SDP-4)을 사용하여 위성의 궤도를 추적할 수 있습니다. 또한, 이전에 생성된 타임스탬프가 포함된 ephemeris 데이터는 시계열 또는 타임테이블 객체를 통해 시나리오에 추가할 수 있습니다. 시나리오 객체 내에서 데이터는 시나리오의 시간 스텝에 맞춰 보간됩니다. 이 두 번째 옵션을 사용하면 Simulink® 모델에서 생성된 데이터를 새로운 satelliteScenario나 기존 satelliteScenario에 통합할 수 있습니다. 이 예제는 Aerospace Blockset Orbit Propagator 블록을 사용하여 수치 적분을 통해 위성 궤적을 계산하는 방법과, 기록된 ephemeris 데이터를 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 블록이 포함되어 있습니다. Orbit Propagator 블록은 벡터화를 지원합니다. 이를 통해 Block Parameters 창에서 초기 조건 배열을 지정하거나 set_param을 사용하여 단일 블록 내에서 여러 위성을 모델링할 수 있습니다. 이 모델에는 대시보드 Callback button을 포함하는 "Mission Analysis and Visualization" 섹션도 포함됩니다. 이 버튼을 클릭하면 모델이 실행되고, Orbit Propagator 블록에서 정의된 위성 또는 위성군을 포함하는 새 satelliteScenario 객체가 전역적 기반 작업 공간에 생성되며, 새 시나리오에 대한 위성 시나리오 뷰어 창이 열립니다. 이 작업의 소스 코드를 보려면 콜백 버튼을 더블 클릭하십시오. "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");
전파기를 구성합니다. 이 예제에서는 위치 정확도를 높이기 위해 수치 전파기를 사용합니다. 수치 전파기를 사용하여 만유인력 방정식("Pt-mass"), 2차 구역 고조파 모델("Oblate Ellipsoid (J2)") 또는 구면 고조파 모델("Spherical Harmonics")을 바탕으로 지구의 중력 포텐셜을 모델링하십시오. 구면 조화 함수는 가장 정확하지만, 정확도를 희생하고 속도를 얻는 방식입니다. 정확도를 높이기 위해, 관성 좌표계(ICRF)와 고정 좌표계(ITRF) 간의 내부 변환에서 지구 방향 파라미터(EOP)를 사용할지 여부를 지정할 수도 있습니다.
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;시계열 객체에 임무의 시작 데이터를 설정합니다.
mission.Satellite.TimeseriesPosECEF.TimeInfo.StartDate = mission.StartDate; mission.Satellite.TimeseriesVelECEF.TimeInfo.StartDate = mission.StartDate;
위성 Ephemerides를 satelliteScenario 객체에 불러오기
이 예제의 분석 단계에서 사용할 satellite scenario 객체를 생성합니다.
scenario = satelliteScenario;
satellite 메서드를 사용하여 위성들을 ECEF 좌표계의 위치 및 속도 시계열로 위성 시나리오에 추가합니다.
sat = satellite(scenario, mission.Satellite.TimeseriesPosECEF, mission.Satellite.TimeseriesVelECEF, ... "CoordinateFrame", "ecef")
sat =
Satellite with properties:
Name: Satellite
ID: 1
ConicalSensors: [1x0 matlabshared.satellitescenario.ConicalSensor]
Gimbals: [1x0 matlabshared.satellitescenario.Gimbal]
Transmitters: [1x0 satcom.satellitescenario.Transmitter]
Receivers: [1x0 satcom.satellitescenario.Receiver]
Accesses: [1x0 matlabshared.satellitescenario.Access]
Eclipse: [1x0 Aero.satellitescenario.Eclipse]
GroundTrack: [1x1 matlabshared.satellitescenario.GroundTrack]
Orbit: [1x1 matlabshared.satellitescenario.Orbit]
CoordinateAxes: [1x1 matlabshared.satellitescenario.CoordinateAxes]
OrbitPropagator: ephemeris
MarkerColor: [0.059 1 1]
MarkerSize: 6
ShowLabel: true
LabelFontColor: [1 1 1]
LabelFontSize: 15
Visual3DModel:
Visual3DModelScale: 1
disp(scenario)
satelliteScenario with properties:
StartTime: 04-Jan-2019 12:00:00
StopTime: 04-Jan-2019 18:00:00
SampleTime: 60
AutoSimulate: 1
CentralBodyOptions: [1×1 Aero.satellitescenario.CentralBodyOptions]
Satellites: [1×1 matlabshared.satellitescenario.Satellite]
GroundStations: [1×0 matlabshared.satellitescenario.GroundStation]
Platforms: [1×0 matlabshared.satellitescenario.Platform]
Viewers: [0×0 matlabshared.satellitescenario.Viewer]
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 separate 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
04-Jan-2019 12:00:00 -44.8045 120.3547 4.2526e+05
04-Jan-2019 12:01:00 -42.8089 124.7019 4.2232e+05
04-Jan-2019 12:02:00 -40.6384 128.7520 4.2393e+05
04-Jan-2019 12:03:00 -38.3369 132.5036 4.2008e+05
04-Jan-2019 12:04:00 -35.8667 136.0450 4.2003e+05
04-Jan-2019 12:05:00 -33.3107 139.3251 4.2031e+05
04-Jan-2019 12:06:00 -30.6822 142.3825 4.1871e+05
04-Jan-2019 12:07:00 -27.9167 145.3106 4.1981e+05
04-Jan-2019 12:08:00 -25.1043 148.0602 4.1836e+05
04-Jan-2019 12:09:00 -22.2666 150.6505 4.1404e+05
04-Jan-2019 12:10:00 -19.3213 153.1682 4.1823e+05
04-Jan-2019 12:11:00 -16.3584 155.5724 4.1717e+05
04-Jan-2019 12:12:00 -13.3975 157.8782 4.0700e+05
04-Jan-2019 12:13:00 -10.3595 160.1508 4.1036e+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);
전 세계 및 지역별 2차원 지상 추적선 표시
헬퍼 함수 plot2DTrajectories를 사용하여 전역 지면 추적을 2차원 투영도로 표시합니다:
plot2DTrajectories(mission.Satellite, mission.GroundStation, mission.ColorMap);

지역별 지상 경로를 확인하십시오. 드롭다운 메뉴에서 관심 영역을 선택하십시오:
plot2DTrajectories(mission.Satellite, mission.GroundStation, mission.ColorMap,
"usa");
위성과 지상국 간 액세스(가시선 가시성) 계산
groundStation 메서드를 사용하여 지상국을 SatelliteScenario 객체에 추가합니다.
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 degrees
Longitude: -71 degrees
Altitude: 0 meters
MinElevationAngle: 10 degrees
ConicalSensors: [1x0 matlabshared.satellitescenario.ConicalSensor]
Gimbals: [1x0 matlabshared.satellitescenario.Gimbal]
Transmitters: [1x0 satcom.satellitescenario.Transmitter]
Receivers: [1x0 satcom.satellitescenario.Receiver]
Accesses: [1x0 matlabshared.satellitescenario.Access]
Eclipse: [1x0 Aero.satellitescenario.Eclipse]
CoordinateAxes: [1x1 matlabshared.satellitescenario.CoordinateAxes]
MarkerColor: [1 0.4118 0.1608]
MarkerSize: 6
ShowLabel: true
LabelFontColor: [1 1 1]
LabelFontSize: 15
access 방법을 사용하여 모든 개별 위성과 지상국 간의 가시선 액세스 분석 결과를 첨부하십시오.
ac = access(sat, gs);
ac.LineColor = "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;
헬퍼 함수 plotAccessIntervals를 사용하여 위성 궤도의 2차원 지상 궤적을 표시하고, 그 위에 액세스 구간을 중첩하여 표시합니다.
plotAccessIntervals(mission.Satellite, mission.GroundStation, mission.ColorMap);

mission.Satellite.AccessTable{:}ans=2×8 table
"Satellite" "Ground Station" 1 04-Jan-2019 12:44:00 04-Jan-2019 12:50:00 360 6×3 double 4.9996e+05
"Satellite" "Ground Station" 2 04-Jan-2019 14:21:00 04-Jan-2019 14:25:00 240 4×3 double 1.1021e+06
추가 분석
satelliteScenario 객체를 재생하면 satelliteScenarioViewer 창에서 시나리오가 열리고 애니메이션이 재생됩니다.
play(scenario); disp(scenario.Viewers(1))
Viewer with properties:
Name: 'Satellite Scenario Viewer'
Position: [440 225 800 600]
Basemap: 'satellite'
PlaybackSpeedMultiplier: 50
CameraReferenceFrame: 'ECEF'
CurrentTime: 04-Jan-2019 12:00:08
ShowDetails: 1
Dimension: '3D'
뷰어에 위성 지상 궤적을 표시하십시오.
groundTrack(sat);

참고 문헌
[1] Wertz, James R, David F. Everett 및 Jeffery J. Puschell. Space Mission Engineering: The New Smad. Hawthorne, CA: Microcosm Press, 2011. Print.

