13.4.3. 정밀 요(Yaw) 각도 추정: GPS Heading (Dual Antenna System) 융합

13.4.3. 정밀 요(Yaw) 각도 추정: GPS Heading (Dual Antenna System) 융합

무인 비행 시스템(UAS) 제어에 있어 ’X, Y 좌표(위치)’를 아는 것만큼이나 중요한 것이 기체의 앞코가 어디를 향하고 있는지 나타내는 ’요(Yaw) 각도(Heading)’를 아는 것이다. 수십 년간 멀티로터의 요 각도는 지자기 센서(나침반, Magnetometer)의 전유물이었지만, 모터 배선의 전자기 간섭, 교량 하부의 철근 구조물, 실내 환경 등에서 지자기 센서는 지독한 노이즈와 왜곡(Magnetic Interference)에 시달려 왔다.

이러한 지자기 센서의 한계를 혁명적으로 타파한 기술이 바로 Dual Antenna GPS (Moving Baseline) 시스템을 이용한 GPS Heading 기법이다. 본 절에서는 두 개의 GPS 안테나를 드론에 배치했을 때 PX4-Autopilot이 이 두 지점 간의 미세한 위상 차이를 어떻게 분석하여 마법처럼 진북(True North) 기반의 요(Yaw) 각도를 도출해 내는지, 그리고 EKF2 코어 내부에서 이를 어떻게 절대적인 융합 기준으로 채택하는지 심층 탐구한다.

1. Dual Antenna System의 기하학적 원리와 Moving Baseline

일반적인 RTK 시스템이 ’고정 기지국(Base)’과 ‘움직이는 기체(Rover)’ 사이의 상대 벡터를 구한다면, Dual Antenna GPS는 ‘움직이는 기체 위에 올라탄 두 개의 안테나’ 사이의 상대 벡터를 구하는 Moving Baseline 알고리즘이다.

1.1 하드웨어 안테나 토폴로지(Topology)

드론의 프레임 위에 두 개의 안테나(예: 안테나 A, 안테나 B)를 물리적으로 이격하여 설치한다. (통상 30\text{cm} \sim 1\text{m} 이상의 거리 확보 권장)

  • 안테나 A (Moving Base): 위성 신호를 받아 자기 위치를 계산한 뒤, RTCM 보정 데이터를 기체 네트워크(UART 등)를 통해 안테나 B로 전송한다.
  • 안테나 B (Rover 관측): 안테나 A로부터 받은 보정 데이터를 바탕으로, A와 B 사이의 정밀한 3차원 상대 벡터(\Delta X, \Delta Y, \Delta Z)를 밀리미터(\text{mm}) 단위로 도출해 낸다.

1.2 요(Yaw) 각도의 수학적 도출

두 안테나 간의 상대 벡터를 알면 기하학을 통해 드론의 방위를 산출할 수 있다. 만약 두 안테나가 드론의 종축(앞뒤) 방향을 따라 정확히 일직선으로(앞쪽에 B, 뒤쪽에 A) 배치되었다면, 이 상대 벡터가 가리키는 방향이 곧 기체의 Heading이 된다.

수학적으로 요 각도(\psi)는 수평면(Local NED Frame) 상의 북쪽 성분(North, \Delta X)과 동쪽 성분(East, \Delta Y)의 아크탄젠트(Arctangent) 함수로 명료하게 유도된다.
\psi = \arctan \left( \frac{\Delta Y}{\Delta X} \right)

이 산출물은 주변의 철 구조물이나 자기장 폭풍에 전혀 영향을 받지 않는, 오로지 인공위성의 궤도 기하학(Geometry)에만 의존하는 완벽한 추정치이다.

2. PX4 파라미터 활성화 및 비트 제어

멋진 하드웨어를 구성했더라도 PX4 펌웨어 파라미터를 올바르게 튜닝하지 않으면 무용지물이 된다. EKF2 모듈에게 “이제부터 나침반을 버리고 GPS로 헤딩을 잡겠다“고 선언하는 과정이다.

2.1 EKF2_GPS_CTRL 비트마스크 설정 (가장 중요)

통상 수평 위치(Bit 0), 3D 속도(Bit 1)와 함께 **Bit 3 (Dual antenna heading, 값 $8$)**을 켜야 한다.
따라서 EKF2_GPS_CTRL 의 권장 설정값은 11 (1+2+8) 혹은 고도 융합까지 허용할 경우 15 (1+2+4+8) 가 된다.

2.2 지자기 센서(Magnetometer) 비활성화

Dual GPS Heading을 사용할 때 지자기 센서는 더 이상 훌륭한 백업 센서가 아니라 오히려 방해꾼이 된다. 자기장 왜곡이 발생하면 EKF 필터는 GPS가 알려주는 헤딩과 나침반이 알려주는 헤딩 사이의 불일치(Innovation) 때문에 내부 공분산 행렬을 엉망으로 꼬아버릴 수 있다.

  • 따라서 EKF2_MAG_TYPE 변수를 None (제외) 로 설정하거나, 기체의 SYS_HAS_MAG (나침반 하드웨어 존재 여부) 옵션 자체를 꺼버리는(0) 것이 가장 대칭적이고 깔끔한 설계 방식이다.

3. GPS_YAW_OFFSET: 회전 행렬(DCM) 오차 보상 로직

하드웨어 엔지니어가 비행체에 두 안테나를 설치할 때 기체의 완벽한 축선(X축)에 맞추어 정확히 0도 일직선 상에 구멍을 뚫는 것은 물리적으로 불가능에 가깝다. 안테나가 프로펠러 붐(Boom)을 따라 45\text{도} 혹은 90\text{도} 틀어져서 비대칭으로 장착될 수도 있다.

이러한 ’안테나 배치축’과 ‘드론 전진축(Forward Body Axis)’ 사이의 기구학적 각도 오차를 소프트웨어적으로 교정해 주는 파라미터가 GPS_YAW_OFFSET 이다.

이 오프셋은 단순한 덧셈 뺄셈이 아니라 EKF2 내부에서 **방향 코사인 행렬(Direction Cosine Matrix, DCM)**과 쿼터니언(Quaternion) 회전 연산을 통해 처리된다.

// src/lib/ecl/EKF/gps_yaw_fusion.cpp 유사 코드
// 1. GPS 칩셋이 보고한 안테나 간의 날것(Raw) 센서 헤딩 각도
float raw_heading = _gps_sample_delayed.yaw;

// 2. 파라미터로 입력받은 부착 오프셋(Offset) 반영
float offset_rad = math::radians(EKF2_GPS_YAW_OFFSET); 

// 3. 기체 프레임(Body Frame) 정대 대역으로의 단일각 회전
float corrected_yaw = wrap_pi(raw_heading - offset_rad);

// 4. 상태 벡터 측정 업데이트 (Measurement Update)
fuseYaw(corrected_yaw);
  • 만약 동축 베이스라인(안테나 A) 대비 로버(안테나 B)가 드론의 우측(오른쪽 날개) 방향으로 90^\circ 장착되었다면, GPS_YAW_OFFSET90을 기입함으로써 GPS가 연산한 Heading 값이 드론의 정면 코(Nose) 방향으로 올바르게 역회전(Inverse Rotation)하여 EKF 상태 변수에 투입되는 것이다.

4. 단일 RTK 시스템과의 성능 비교 및 결론

일반적인 Single RTK 위성항법도 비행 중(이동 중)에는 기체가 날아가는 벡터의 궤적(Course Over Ground)을 바탕으로 동적 요(Dynamic Yaw) 각도를 추정할 수 있다. 그러나 이 방식은 제자리 비행(Hovering) 시 기체가 어느 방향을 보고 있는지 전혀 판단할 수 없다는 태생적 한계점을 띤다.

반면, Dual Antenna GPS Heading 시스템은 기체가 제자리에 가만히 서 있는 상태(Static) 에서도 두 안테나 간의 베이스라인 벡터가 허공에 고정되어 있으므로 완벽하게 Heading을 파악한다.

결론적으로 PX4-Autopilot의 Dual Antenna Heading 융합 아키텍처는 EKF Bit 3 이라는 우아한 플래그와 GPS_YAW_OFFSET 이라는 강건한 기구학적 보상 장력을 통해, 외부 자기장 교란을 두려워했던 드론에게 **진북(True North)을 향한 무결성의 나침반(Integrity Compass)**을 선사하는 고도화된 항법 제어의 정점이라 평가할 수 있다.