우주공학/Python

[Python 위성] 지상 궤적(Ground Track) 시각화: 위성 궤도는 왜 물결 모양일까?

univ 2026. 1. 6. 14:48
반응형

1. 들어가는 글: 3차원 궤도를 2차원 지도로 옮길 때

지난 시간에는 파이썬 Skyfield 라이브러리를 이용해 국제우주정거장(ISS)의 실시간 좌표(위도, 경도)를 찍어보는 실습을 했습니다.

https://univ.tistory.com/3

 

[Python 위성] 파이썬으로 인공위성 실시간 위치 계산하기 (Skyfield 라이브러리 기초)

1. 들어가는 글: TLE를 좌표로 바꾸는 마법지난 포스팅에서 우리는 인공위성의 궤도 정보를 담고 있는 암호문, TLE(Two-Line Elements)를 해석하는 방법을 배웠습니다.https://univ.tistory.com/2하지만 눈으로

univ.tistory.com

 

그런데 이 좌표들을 연속해서 지도 위에 찍어보면 아주 독특한 모양이 나타납니다. 위성은 우주 공간에서 둥근 궤도를 그리며 '직진'하고 있을 뿐인데, 우리가 보는 2차원 평면 지도에서는 'S자 형태의 물결무늬(Sine Wave)'를 그리며 이동합니다.

오늘은 위성 관제실(Mission Control Center)의 대형 스크린에서 흔히 보던 지상 궤적(Ground Track)이 그려지는 원리를 이해하고, 파이썬으로 직접 궤적을 그려보겠습니다.

2. 왜 물결 모양(Sine Wave)일까?

위성 궤적이 물결치는 이유는 위성이 춤을 추기 때문이 아닙니다. '둥근 지구를 네모난 종이에 폈기 때문(지도 투영법)'입니다.

① 궤도 경사각(Inclination)의 시각화

위성은 적도면을 기준으로 일정한 각도(i)만큼 기울어져서 돕니다. 이를 평면 지도로 펼치면, 위성은 적도(0˚)를 지나 북반구 최고점(+i˚)까지 올라갔다가, 다시 내려와 남반구 최저점(-i˚)까지 내려가는 운동을 반복하는 것처럼 보입니다.

  • 즉, 지상 궤적의 가장 높은 위도(Latitude)를 확인하면 그 위성의 경사각(Inclination)을 알 수 있습니다.

② 지구가 자전한다 (서쪽으로 밀리는 현상)

위성이 한 바퀴 도는 동안 지구는 가만히 있을까요? 아닙니다. 지구는 서쪽에서 동쪽으로 부지런히 자전합니다.

위성이 지구를 한 바퀴 돌고 제자리로 돌아오면, 지구는 이미 동쪽으로 휙 돌아가 있습니다. 그래서 위성의 궤적은 전 회차보다 서쪽으로 이동(Shift)해서 그려지게 됩니다.

3. 파이썬으로 지상 궤적 그리기 (Matplotlib)

백문이 불여일견, 직접 코드로 그려봅시다. 지난번 코드에 '시간 반복문(Loop)'을 추가하여 미래의 위치를 연속으로 계산하고 그래프로 뿌려주는 방식입니다.

데이터 시각화의 기본 라이브러리인 Matplotlib을 사용합니다.

 

from skyfield.api import load, EarthSatellite
import matplotlib.pyplot as plt
import numpy as np

# 1. TLE 데이터 로드 (ISS)
line1 = '1 25544U 98067A   26005.53262344  .00012388  00000-0  23158-3 0  9996'
line2 = '2 25544  51.6326  24.6699 0007562 343.7680  16.3066 15.49114570546545'
satellite = EarthSatellite(line1, line2, 'ISS (ZARYA)', load.timescale())

# 2. 시간 구간 설정 (현재부터 180분간, 즉 약 2바퀴)
ts = load.timescale()
t0 = ts.now()
minutes = np.arange(0, 180) # 0분부터 179분까지
times = ts.utc(t0.utc.year, t0.utc.month, t0.utc.day, t0.utc.hour, t0.utc.minute + minutes)

# 3. 위치 계산 (지상 좌표계 변환)
geocentric = satellite.at(times)
subpoint = geocentric.subpoint()

lats = subpoint.latitude.degrees
lons = subpoint.longitude.degrees

# 4. 그래프 그리기 (Scatter Plot)
plt.figure(figsize=(12, 6))
plt.title(f"Ground Track of ISS (Duration: {len(minutes)} mins)")
plt.xlabel("Longitude (deg)")
plt.ylabel("Latitude (deg)")

# 배경 그리드 설정
plt.grid(True, linestyle='--', alpha=0.5)
plt.xlim(-180, 180) # 경도 범위
plt.ylim(-90, 90)   # 위도 범위

# 궤적 점 찍기
plt.scatter(lons, lats, s=10, c=minutes, cmap='viridis', label='Path')
plt.colorbar(label='Time (minutes from start)')

# 시작점 표시
plt.plot(lons[0], lats[0], 'ro', markersize=10, label='Start')

plt.legend()
plt.show()

4. 결과 분석 및 그래프 해석

위 코드를 실행하면 알록달록한 점들이 S자 곡선을 그리며 찍히는 것을 볼 수 있습니다. (실제 지도 이미지를 배경에 넣으려면 Cartopy 같은 심화 라이브러리가 필요하지만, 기본 원리는 동일합니다.)

Python으로 실행해본 그래프

그래프에서 확인해야 할 포인트:

  1. Y축의 한계: 그래프의 위아래 끝이 약 51.6도 근처에서 멈추나요? 앞서 배운 ISS의 경사각(i=51.6˚)과 일치합니다. ISS는 절대 위도 51.6도 위로 올라가거나 아래로 내려가지 않습니다.
  2. X축의 이동: 첫 번째 S자 곡선과 두 번째 S자 곡선 사이의 간격을 보세요. 지구가 자전한 만큼 옆으로(서쪽으로) 밀려난 것입니다.

5. 마무리: 나만의 관제 시스템 만들기

이제 우리는 TLE 데이터만 있으면 전 세계 어떤 위성이든 그 궤적을 예측해서 그려볼 수 있게 되었습니다.

https://univ.tistory.com/2

 

[SMAD 위성 데이터] 인공위성 TLE(Two-Line Elements) 완벽 해독 가이드

1. 들어가는 글: 위성의 주민등록증, TLE지난 포스팅에서 인공위성의 궤도를 결정하는 '케플러 6요소(Keplerian Elements)'에 대해 알아봤습니다.https://univ.tistory.com/1 [SMAD 위성 개론] 인공위성 궤도를 결

univ.tistory.com

 

이 점들을 세계 지도 이미지 위에 겹쳐서 그리면 그게 바로 영화에서 보던 '실시간 위성 추적 상황판'이 됩니다.

다음 포스팅에서는 시각을 조금 달리해서, "위성에서 지구를 바라볼 때(Sensor View)" 과연 내 집은 보일지, 위성이 관측 가능한 범위(Footprint)를 계산하는 법에 대해 알아보겠습니다.

반응형