이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
궤도 전파기 비교
이 예에서는 Two-Body-Keplerian과 SGP4(Simplified General Perturbations-4) 궤도 전파기가 예측한 궤도를 비교합니다. 궤도 전파기는 천체의 중력장의 영향을 주로 받아 우주에서 물체의 위치와 속도를 계산하는 솔버입니다.
2체 케플러 궤도 전파기는 지구의 중력장만을 고려하고 다른 천체와 환경적 요인의 영향을 무시하는 단순화된 모델에 의존합니다. 이 모델은 지구가 구형이고 밀도가 균일하다고 가정합니다. 이러한 접근 방식으로 인해 이 전파기는 논의된 모델 중에서 가장 정확도가 낮습니다.
이와 대조적으로 SGP4 궤도 전파기는 지구의 모양과 대기 저항으로 인한 세속적 및 주기적 궤도 교란을 모두 통합하므로 궤도 주기가 225분 미만인 근지구 궤도의 위성에 적합합니다. 위성의 궤도 주기가 225분보다 길면 SGP4 궤도 전파기는 태양과 달의 중력을 추가로 고려합니다.
위성 시나리오 만들기
satelliteScenario 함수를 사용하여 위성 시나리오를 만듭니다. datetime 함수를 사용하여 시작 시간을 2020년 5월 11일 오후 12시 35분 38초 UTC로, 종료 시간을 2020년 5월 13일 오후 12시 35분 38초 UTC로 설정합니다. 샘플 시간을 60초로 설정합니다.
startTime = datetime(2020,5,11,12,35,38); stopTime = startTime + days(2); sampleTime = 60; sc = satelliteScenario(startTime,stopTime,sampleTime)
sc =
satelliteScenario with properties:
StartTime: 11-May-2020 12:35:38
StopTime: 13-May-2020 12:35:38
SampleTime: 60
AutoSimulate: 1
CentralBodyOptions: [1×1 Aero.satellitescenario.CentralBodyOptions]
Satellites: [1×0 matlabshared.satellitescenario.Satellite]
GroundStations: [1×0 matlabshared.satellitescenario.GroundStation]
Platforms: [1×0 matlabshared.satellitescenario.Platform]
Viewers: [0×0 matlabshared.satellitescenario.Viewer]
AutoShow: 1
위성 시나리오에 위성 추가하기
satellite 함수를 사용하여 TLE(two-line element) 파일 eccentricOrbitSatellite.tle에서 위성 시나리오에 두 개의 위성을 추가합니다. TLE는 특정 시간에 정의된 지구 궤도 물체의 궤도 요소를 인코딩하는 데 사용되는 데이터 형식입니다. 첫 번째 위성에는 2체 케플러 궤도 전파기를 할당하고 두 번째 위성에는 SGP4를 할당합니다.
tleFile = "eccentricOrbitSatellite.tle"; satTwoBodyKeplerian = satellite(sc,tleFile, ... "Name","satTwoBodyKeplerian", ... "OrbitPropagator","two-body-keplerian")
satTwoBodyKeplerian =
Satellite with properties:
Name: satTwoBodyKeplerian
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: two-body-keplerian
MarkerColor: [0.059 1 1]
MarkerSize: 6
ShowLabel: true
LabelFontColor: [1 1 1]
LabelFontSize: 15
Visual3DModel:
Visual3DModelScale: 1
satSGP4 = satellite(sc,tleFile, ... "Name","satSGP4", ... "OrbitPropagator","sgp4")
satSGP4 =
Satellite with properties:
Name: satSGP4
ID: 2
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: sgp4
MarkerColor: [0.059 1 1]
MarkerSize: 6
ShowLabel: true
LabelFontColor: [1 1 1]
LabelFontSize: 15
Visual3DModel:
Visual3DModelScale: 1
위성과 궤도를 시각화하세요
위성 시나리오 뷰어를 실행하고 satelliteScenarioViewer 함수를 사용하여 위성 시나리오를 시각화합니다. satSGP4의 시각화를 녹색으로 설정합니다.
v = satelliteScenarioViewer(sc); satSGP4.MarkerColor = "green"; satSGP4.Orbit.LineColor = "green"; satSGP4.LabelFontColor = "green";

camtarget 함수를 사용하여 카메라를 satTwoBodyKeplerian에 초점을 맞춥니다.
camtarget(v,satTwoBodyKeplerian);
위성 시나리오 뷰어 창의 아무 곳이나 왼쪽 클릭하고 클릭한 채로 마우스를 움직이면 카메라가 이동합니다. 스크롤 휠을 사용하여 확대/축소 레벨을 조정하면 세 개의 위성이 모두 보이게 됩니다.

위성 이동의 동적 애니메이션을 시각화하세요
위성 시나리오에서 play 함수를 사용하여 위성의 움직임을 시각화합니다. play 함수는 SampleTime로 지정된 단계 크기를 사용하여 지정된 StartTime에서 StopTime까지의 위성 시나리오를 시뮬레이션하고 위성 시나리오 뷰어에서 결과를 재생합니다.
play(sc)
위성 시나리오 뷰어 창 하단에 있는 재생 컨트롤을 사용하여 재생 속도와 방향을 제어하세요. camtarget 함수를 사용하여 카메라를 다시 satTwoBodyKeplerian에 초점을 맞추고 확대/축소 레벨을 조정하여 세 개의 위성을 모두 시야에 들어오게 합니다.
camtarget(v,satTwoBodyKeplerian);
세 위성의 위치는 시간이 지남에 따라 달라진다.

위성의 위치 및 속도 이력 얻기
states 함수를 사용하여 지구 중심 천체 기준 프레임(GCRF)에서 위성의 위치와 속도 기록을 반환합니다.
[positionTwoBodyKeplerian,velocityTwoBodyKeplerian,time] = states(satTwoBodyKeplerian); [positionSGP4,velocitySGP4] = states(satSGP4);
2체 케플러 예측에 따른 상대 위치의 크기 플롯
vecnorm 함수를 사용하여 satTwoBodyKeplerian에 대한 satSGP4의 상대적 위치의 크기를 계산합니다.
sgp4RelativePosition = vecnorm(positionSGP4 - positionTwoBodyKeplerian,2,1);
plot 함수를 사용하여 satTwoBodyKeplerian에 대한 satSGP4의 상대적 위치의 크기를 킬로미터 단위로 표시합니다.
sgp4RelativePositionKm = sgp4RelativePosition/1000; plot(time,sgp4RelativePositionKm) xlabel("Time") ylabel("Relative position (km)") grid on

시간이 지남에 따라 satSGP4의 위치는 satTwoBodyKeplerian의 위치와 달라집니다. satSGP4는 지구의 기하학과 대기 저항에 의해 발생하는 세속적이고 주기적인 궤도 교란을 설명하기 때문입니다. TLE 파일에서 계산된 궤도 주기가 225분보다 길기 때문에 satSGP4의 위치에는 태양과 달의 중력도 고려됩니다. orbitalElements 함수를 사용하여 궤도 주기를 구할 수 있습니다.
elSatSGP4 = orbitalElements(satSGP4);
elSatSGP4.Period/60 % minutesans = 720
satTwoBodyKeplerian의 위치는 지구 주변의 구형 중력 퍼텐셜을 가정하고 모든 섭동 효과를 무시합니다.
2체 케플러 예측에 따른 상대 속도의 크기 플롯
vecnorm 함수를 사용하여 satTwoBodyKeplerian에 대한 satSGP4의 상대 속도의 크기를 계산합니다.
sgp4RelativeVelocity = vecnorm(velocitySGP4 - velocityTwoBodyKeplerian,2,1);
plot 함수를 사용하여 satTwoBodyKeplerian에 대한 satSGP4의 상대 속도(초당 미터)의 크기를 표시합니다.
plot(time,sgp4RelativeVelocity) xlabel("Time") ylabel("Velocity deviation (m/s)") grid on

시간이 지남에 따라 satSDP4의 속도는 위치에 영향을 미치는 동일한 요소로 인해 satTwoBodyKeplerian의 속도와 달라집니다. 그래프의 스파이크는 근점(지구 질량 중심에서 궤도상 가장 가까운 지점)에 해당하며, 이 지점에서 속도 오차가 더 두드러집니다.
그래프에서 관찰된 변화는 두 궤도 전파기가 제공하는 정밀도 수준이 다르다는 것을 보여줍니다. 2체 케플러 궤도 전파기는 지구의 중력장을 구형으로 단순화하고 궤도 섭동의 다른 모든 원인을 무시하기 때문에 정확도가 낮습니다. SGP4 궤도 전파기는 지구의 편평도와 대기 저항의 효과를 고려하여 정확도를 높입니다. 이 예에서 위성의 궤도 주기가 225분을 초과한다는 점을 감안하면, SGP4 궤도 전파기는 태양과 달의 중력도 고려합니다.