# 1. WGS84 타원체(Ellipsoid) 모델 기반 글로벌 좌표계(LLA)와 국소 평면 좌표계(NED) 간의 직교 투영(Orthographic Projection) 변환 알고리즘 적용
PX4-Autopilot이 전 지구적 임무 비행을 수행함에 있어 직면하는 가장 근본적인 수학적 딜레마는 ’지구는 둥글지만(곡면), 비행체의 물리 엔진은 평평하다(평면)’는 사실이다. 지상 관제 시스템(GCS)이 하달하는 GPS 좌표 데이터는 범지구적 타원체(Ellipsoid)를 기준으로 한 WGS84 LLA(위도, 경도, 고도) 포맷을 띤다. 반면 기체의 위치 제어기(mc_pos_control)와 EKF2 상태 추정기는 행렬 연산의 선형성(Linearity)과 속도 적분(Integration)의 편의를 위해 반드시 평면 데카르트 좌표계인 NED(North-East-Down) 포맷을 필수적으로 요구한다.
본 절에서는 navigator 모듈 내비게이션 파이프라인의 핵심 관문인 ‘좌표계 투영(Coordinate Projection)’ 알고리즘을 분석하며, PX4가 부동소수점 오차를 억제하고 어떻게 정밀한 국소 평면(Local Plane)을 도출하는지 수리적 관점에서 서술한다.
1.1 WGS84 타원체 곡률과 map_projection 투영 초기화(Initialization)
GCS에서 전송된 WGS84 좌표(\phi, \lambda) 쌍을 미터 단위의 2D 평면 분간(NED x, y)으로 1:1 선형 매핑하기 위해, PX4는 src/lib/geo/geo.cpp 라이브러리의 방위도법 투영 엔진을 가동한다.
가장 선행되어야 할 작업은 이 평면 축이 지구의 어느 위도/경도 지점에 ’접해 있는가(Tangent)’를 정의하는 기준점(Reference Point), 즉 맵 투영 원점(Map Projection Origin)의 초기화이다.
- 기체의 EKF(Estimator)가 초기 활성화되어 GPS 3D 픽스(Fix)를 최초로 획득한 시점의 홈(Home) 좌표, 혹은 이륙(Takeoff) 지점의 좌표가 글로벌 원점(\phi_{ref}, \lambda_{ref})으로 락킹된다.
- 이 원점이 선언되면
map_projection_init()함수가 트리거되어, 해당 위도 \phi_{ref}에서의 WGS84 타원체 곡률 반경(Radius of Curvature) 매개변수를 도출한다. 적도 부근과 극지방의 지구 곡률이 다르기 때문에 이 국지적 반경 세팅은 장거리 비행의 위치 정밀도를 담보하는 절대적 토대가 된다.
1.2 전면 투영 (Forward Projection: LLA \rightarrow NED) 연산 구조
GCS가 navigator 측에 새로운 타겟 웨이포인트(WGS84 LLA)를 전송했을 때, 기체의 물리적 제어기(FlightTaskAuto)가 이를 추종하기 이전에 mission_item_to_position_setpoint() 함수 계층에서 평면 좌표로의 포워드 투영(Forward Projection)이 발생한다.
수학적으로, 구면(Sphere)이 아닌 정확한 WGS84 편평도(Flattening)를 고려한 타원체 방정식을 런타임 제어 루프 안에서 실시간으로 푸는 것은 MCU의 부동소수점 연산 장치(FPU)에 가파른 오버헤드를 야기할 수 있다. PX4는 연산 오버헤드와 정밀성의 균형을 위해 **정거 방위 투영법(Azimuthal Equidistant Projection)**의 근사화된 공식을 주로 차용한다.
- 위도/경도 \Delta 추출:
\Delta \phi = \phi_{target} - \phi_{ref}
\Delta \lambda = \lambda_{target} - \lambda_{ref}
라디안(Radian) 단위로 두 좌표 간의 미세 각도 편차를 구한다. - 단위 도(Degree) 당 미터 환산 (Meter-per-degree):
원점에서의 자오선 곡률 반경(Meridian Radius, M)과 묘유선 곡률 반경(Prime Vertical Radius, N) 매개변수 상수를 대입하여, 다음과 같은 고속 선형 근사(Linear Approximation)를 실시한다.
x_{NED} \approx \Delta \phi \cdot R_{E}
y_{NED} \approx \Delta \lambda \cdot R_{E} \cdot \cos(\phi_{ref})
(여기서 R_E는 근사화된 지구 평균 반경 혹은 재귀 적용된 지역 반경 상수)
이 투영 매핑을 통해 MAVLink 상의 난해한 위경도 숫자놀음은 하위 위치 피드백 제어기가 즐겨 사용하는 직관적인 “북쪽으로 15m, 동쪽으로 -5m 이동하라“는 명확한 위치 설정점(Position Setpoint)으로 탈바꿈한다.
1.3 역 투영 (Inverse Projection: NED \rightarrow LLA) 연산 구조
글로벌 좌표를 국소 평면으로 투영하는 반대급부로써, 기체의 현재 상태를 모니터링하기 위한 GCS 텔레메트리 전송 영역이나 특정 안전 복귀 모드에서는 역 투영(Inverse / Reprojection) 알고리즘이 빈번히 요구된다.
기체의 고유 추정 엔진인 EKF2가 쏟아내는 정보는 99%가 NED 데카르트 포맷(x, y)이다. 지상 관제 센터의 QGC 지도 위에 드론의 로고를 띄워주기 위해선 이 미터 스케일을 다시 위도/경도로 역산해야만 한다. 시스템은 map_projection_reproject() 함수를 이용해 동일한 역방향 스케일링 계수를 나눔으로써 \Delta \phi와 \Delta \lambda를 회수하고, 이를 최초의 참조점(\phi_{ref}, \lambda_{ref})에 합산하여 완벽한 글로벌 피드백 좌표 체계를 역생성한다.
graph LR
subgraph 글로벌 도메인 (WGS84 LLA)
A[GCS 웨이포인트 명령]
D[텔레메트리 기체 지도 위치]
end
subgraph 프로젝션 코어 (lib/geo)
B((Forward Projection <br/> map_projection_project))
C((Inverse Projection <br/> map_projection_reproject))
end
subgraph 로컬 도메인 (NED 데카르트)
E(navigator 위치 설정점 <br/> 타겟 벡터)
F[EKF2 현재 위치 <br/> 상태 추정기]
end
A -->|1. 명령 하달| B
B -->|2. 미터 단위 매핑| E
F -->|3. 현재 NED 상태| C
C -->|4. LLA 환산| D
1.4 수학적 단절(Singularity) 보호 및 극지방(Poles) 예외 처리 로직
이러한 직교 투영 알고리즘에는 한 가지 태생적 아킬레스건이 존재한다. 바로 극지방(북극/남극 평행선 부근)에 근접할수록 경도 1도당 미터 비율이 기하급수적으로 줄어들어, \cos(\phi_{ref}) 항이 0에 수렴하는 특이점(Singularity) 에러에 직면한다는 점이다. 자칫 나눗셈에서의 0 분모 결함(Divide-by-zero)으로 인해 기체의 나비에-스토크스 연산부가 완전히 크래시할 여지가 있다.
PX4 방위 투영 라이브러리(geo.cpp)는 이 수학적 발산(Divergence)을 소프트웨어 레벨에서 철저히 격리해 두었다.
초기화 함수 동작 시 위도의 절댓값이 90도(극점)에 임계 수준으로 다가가면, cos(lat) 분모 지표의 최소 하한선 파라미터 캡핑(Capping)을 즉각 발동시켜, 수치 해석적 안정성(Numerical Stability)을 구출해 낸다.
또한 투영 거리가 기준점에서 수십 평방 킬로미터를 초과하여 선형 근사의 수학적 허용 오차 한계를 뚫을 징조가 보이면(대륙간 이동급 특수 고정익 VTOL의 경우), EKF2가 간헐적으로 Projection Origin 리셋 페이즈를 강제 발동시켜 타원체 오차 누적분(Accumulated Curvature Error)을 영점화(Zeroing)하는 강력한 안전 포락선(Safety Envelope) 기능을 내장하고 있다.
종합하자면, 이 WGS84 \leftrightarrow NED 직교 투영 알고리즘과 그 백엔드 C++ 인프라는 PX4-Autopilot이 GCS라는 인간 중심의 지리 구형(Spherical) 정보와, 로터 기구학이라는 로봇 중심의 평면(Planar) 물리 세계를 통역해 내는 가장 중추적인 뇌량(Corpus Callosum)이라 평가할 수 있다.