13.3.1.3. Fixed Mode의 정밀 절대 좌표(EGM96 Geoid vs WGS84 Ellipsoid) 변환 C++ 라이브러리(GeographicLib) 활용
로컬 베이스 스테이션(Base Station)이 Survey-in 과정을 성공적으로 통과하여 고정 모드(Fixed Mode)에 도달했을 때, 얻어지는 절대 좌표(X, Y, Z) 데이터는 단순히 숫자의 배열이 아니다. 지구라는 거대하고 울퉁불퉁한 구형 물체 위에서 “높이(고도)“를 어떻게 정의할 것인가에 대한 깊은 측지학적(Geodetic) 맹점이 이 수치 안에 숨어 있다.
PX4-Autopilot 생태계는 글로벌 차원의 항법 정밀도를 위해 특정 지오이드(Geoid) 모델과 타원체(Ellipsoid) 모델 간의 좌표계를 끊임없이 변환해야 한다. 본 절에서는 베이스 스테이션이 포착한 원시 고도(Altitude)의 물리학적 차이를 분석하고, QGroundControl(QGC)과 PX4 펌웨어 C++ 계층에 널리 포진되어 있는 형상 변환 라이브러리인 GeographicLib의 동작 원리와 활용 기법을 서술한다.
1. WGS84 타원체 고도 vs. 평균 해수면(AMSL / Geoid) 고도의 측지학적 딜레마
위성(GPS)은 지구를 완벽히 매끈한 타원체로 가정한 수학적 모델인 **WGS84 타원체(Ellipsoid)**를 기준으로 고도를 측정한다. 반면, 드론 파일럿이나 기압계 센서(Barometer)가 체감하는 현실 속의 물리적 높이는 평균 해수면(AMSL, Above Mean Sea Level), 즉 중력의 등퍼텐셜면을 의미하는 EGM96 지오이드(Geoid) 고도이다.
- 측정의 괴리: 지구 표면 어딘가에서 WGS84 타원체 표면과 EGM96 지오이드 표면 사이에는 최대 약 \pm 100\text{ m} 의 물리적 간극(Geoid Undulation, 지오이드 기복)이 존재한다.
- 만약 베이스 스테이션이 자신의 고도를 WGS84 타원체 기준으로 50\text{ m} 라고 판단했는데, 드론은 이를 EGM96 해수면 고도로 오인하여 수백 킬로미터 밖의 웨이포인트(Waypoint)로 비행하게 되면 30 \sim 40\text{ m} 의 Z축 오차가 누적되어 산맥에 정면충돌할 수 있다.
- 따라서 무인항공기 관제 시스템(GCS)은 반드시 베이스 스테이션이 쏴주는 좌표를 통일된 고도 스탠다드로 환산(Conversion)해 주어야 한다.
2. GeographicLib C++ 라이브러리 기반의 해수면 고도(AMSL) 파생
C++ 로 작성된 PX4 비행 제어기 펌웨어(특히 EKF2 모듈)와 관제 소프트웨어인 QGC 내부에는 측지학 연산의 표준이라 할 수 있는 GeographicLib 라이브러리가 포함되어 있다.
GeographicLib은 방대한 EGM96 지오이드 그리드 데이터(Grid data)를 캐싱하고 있으며, 다음과 같은 C++ 클래스를 통해 위경도 좌표점에서의 정확한 단면 기복을 산출해낸다.
2.1 Geoid::Height 연산 로직
QGC 백엔드나 PX4 navigator 태스크에서 베이스 스테이션 혹은 타깃 좌표의 WGS84에서 AMSL로의 변환을 수행할 때 주로 GeographicLib::Geoid 클래스가 소환된다.
#include <GeographicLib/Geoid.hpp>
// EGM96 지오이드 모델 객체 초기화
GeographicLib::Geoid egm96("egm96-5");
// 특정 베이스 스테이션 위도(lat), 경도(lon) 위치에서의 지오이드 기복(Undulation) 획득
double geoid_height = egm96.Height(lat, lon);
// WGS84 고도를 진정한 해수면 고도(AMSL)로 변환
double amsl_altitude = wgs84_altitude - geoid_height;
- 동작 원리: 지구의 위도와 경도 격자망 위에서 네 귀퉁이의 지오이드 데이터 포인트를 2차원 공간 보간(Bilinear Interpolation) 혹은 중력 포텐셜 구면 조화 함수(Spherical Harmonics) 추론을 통해 정확한 픽셀 단위의 오프셋(N)을 리턴한다.
- 베이스 스테이션이 Survey-In을 마치고 MAVLink로
GPS_RTCM_DATA와 별도로 전송하는 위치 앵커(Anchor) 정보는 위의 연산을 직격으로 통과하여 QGC 지도의 3D 높이 맵 표면에 투영된다.
3. PX4 EKF2(Estimator)의 고도 통합 기준점 확립
드론 펌웨어 단에서 GeographicLib 류의 연산이 수행되는 핵심 계층은 EKF2 인스턴스이다. EKF2는 단순히 들어오는 숫자를 맹신하지 않고, 로컬 좌표 시스템(NED) 의 원점(Origin)이 되는 고도 기준을 어떻게 세팅하느냐에 목숨을 건다.
EKF2_REQ_GPS_H: EKF2 필터가 고도계(Barometer, 기압계)를 주요 Z축 추정치로 삼을지, GPS 기반 고도를 절대적 1순위로 삼을지 결정하는 파라미터이다.- 드론이 베이스 스테이션에서 RTK 보정을 수신하기 시작하고 3D Fixed를 획득하면, EKF2 필터는 기압 고도(대기 밀도와 온도에 따라 하루살이처럼 변화하는 상대 고도)의 바이어스(Bias)를 지속적으로 보정하기 위해 GNSS의 타원체/지오이드 고도를 참값(Ground Truth)으로 끌어다 쓴다.
만약 Survey-in 을 수행했던 지상 관제국 측면의 QGC 백엔드 파싱 단계나, 드론 펌웨어 측면의 데이터 리시버에서 저 GeographicLib의 지오이드 언듈레이션(+N 인지 -N 인지) 부호 하나라도 잘못 믹싱(Mixing)할 경우, 드론은 오토 이륙 버튼을 누름과 동시에 지표면 아래로 파고들려는 자폭적 피치(Pitch) 다이브 명령을 수행하게 된다.
절대 위치 픽스(Fixed Mode)란 단지 위성 신호를 오랫동안 받아 숫자를 평균 낸 상태를 의미하는 것이 아니다. 인류가 구축한 순수 수학적 지구 모델(WGS84)을 실제 바닷물 높이가 넘실대는 물리적 모델(EGM96)로 매핑(Mapping) 시키는 행위이며, C++ GeographicLib과 같은 고도의 공간 기하학 연산 도구가 이를 뒷받침할 때 비로소 우리는 드론을 \pm 1\text{ cm} 공차 내에서 자유자재로 통제할 권리를 얻게 된다.