### 0.0.1 ECEF(Earth-Centered, Earth-Fixed)에서 LLA(Latitude, Longitude, Altitude) 좌표 변환 수식 (x, y, z \rightarrow \phi, \lambda, h)
위성 항법 수신기(GNSS Receiver)는 위성 파라미터와 의사거리 측정치를 바탕으로 일차적으로 지구 중심 직교 좌표계인 ECEF(Earth-Centered, Earth-Fixed) 상의 3차원 좌표 (x, y, z)를 산출한다. ECEF는 지구의 질량 중심을 원점으로 하고, X축을 본초 자오선(Prime Meridian)과 적도의 교점, Z축을 지구 자전축(북극), Y축을 X축과 Z축에 수직인 방향(동경 90도)으로 정의하는 데카르트 좌표계이다.
그러나 비행 제어 시스템의 항법 알고리즘과 사용자 인터페이스(GCS)는 직관적이고 지형적인 참조가 용이한 LLA(Latitude, Longitude, Altitude; 위도, 경도, 고도) 좌표계를 주로 사용한다. 따라서 ECEF에서 LLA로의 변환은 모든 측위 모듈이 거쳐야 하는 필수적인 기하학적 매핑 과정이며, PX4 시스템의 src/lib/geo 라이브러리 내부에도 이 변환이 엄격하게 구현되어 있다.
0.1 ECEF에서 LLA로의 수학적 변환 수식 연산
ECEF 좌표 (x, y, z)가 주어졌을 때, LLA 좌표 (\phi, \lambda, h)를 구하는 과정은 WGS84 타원체 모델을 기반으로 한 복잡한 비선형 방정식의 행을 요구한다.
-
경도(Longitude, \lambda)의 산출:
경도는 모델의 이심률에 영향을 받지 않으므로, XY 평면 투영점의 아크탄젠트(Arctangent)로 단순하게 계산된다.
\lambda = \arctan\left(\frac{y}{x}\right)
(소프트웨어 구현 시에는 사분면 판별을 위해 C++의atan2(y, x)함수를 사용한다.) -
위도(Latitude, \phi)와 타원체고(Altitude, h) 과정:
위도는 적도면에 대한 수직선의 각도이며, 타원체의 특징 상 중심각이 아니다. 위도와 고도는 상호 종속적인 비선형 관계를 가지므로 닫힌 형태의 해(Closed-form Solution)를 구하기 까다롭다.
먼저 Z축 중심의 수평 거리 p를 구한다.
p = \sqrt{x^2 + y^2}
이를 바탕으로 위도 \phi에 대한 반복(Iterative) 연산식이나 직접적인 해석 기법(예: Bowring의 해법)을 사용한다. PX4는 연산 속도 최적화를 위해 다음과 같은 해석적 접근법을 주로 차용한다.
\phi = \arctan\left(\frac{z + {e'}^2 b \sin^3 \theta}{p - e^2 a \cos^3 \theta}\right)
여기서 보조각 \theta는 \tan \theta = \frac{z \cdot a}{p \cdot b} 이고, a, b는 각각 적도 반경과 극 반경, e, e'는 이심률 상수이다.
위도 \phi가 도출되면, 해당 위도에서의 수직 곡률 반경(Radius of curvature in the prime vertical) N을 계산한다.
N = \frac{a}{\sqrt{1 - e^2 \sin^2 \phi}}
마지막으로 타원체고 h를 산출한다.
h = \frac{p}{\cos \phi} - N
2. PX4-Autopilot 아키텍처 내 적용 메커니즘
위 변환은 복잡한 부동소수점 삼각함수 연산(Trigonometry Functions)을 다수 포함하므로 제어기의 스케줄러(Scheduler)에 상당한 오버헤드(Overhead)를 유발할 수 있다.
PX4의 센서 드라이버(src/drivers/gps/devices/src/ubx.cpp 등)는 u-blox 와 같은 최신 수신기가 바이너리 프로토콜(UBX-NAV-PVT)을 통해 **이미 ECEF에서 LLA로 변환된 데이터(lat, lon, height 필드)**를 직접 송출한다는 점을 십분 활용한다. 즉, MCU 상에서의 이 비싼 연산을 GPS 칩셋 내부의 전용 ASIC(Application-Specific Integrated Circuit)으로 떠넘겨버리는 기법(Offloading)을 사용한다.
반면 SITL(Software In The Loop) 환경 내지 사용자 맞춤형 위치 추정기 모듈(Custom Estimators)을 개발할 때는 map_projection_project 등의 지오 함수들을 통해 역연산을 하거나 기준점(Reference Point)으로부터의 델타 편위(Delta Shift)를 추종하는 방식을 이용해 연산을 간소화시킨다. 이는 시스템이 위치 데이터를 다루는 융통성과 효율성을 극대화하는 PX4만의 견고한 코드 설계 철학이다.