### 0.0.1 ULog 파일의 `estimator_status` 토픽 플래그(`gps_check_fail_flags`) 해독 및 `vehicle_gps_position` 비교 차트 작성 실무

### 0.0.1 ULog 파일의 estimator_status 토픽 플래그(gps_check_fail_flags) 해독 및 vehicle_gps_position 비교 차트 작성 실무

PX4 기체가 비행 중 GPS 관련 치명적 에러를 겪었다면, 엔지니어는 가장 먼저 ULog 파일의 내장을 파헤쳐 EKF2 필터가 당시 어떤 판단을 내렸는지 수학적으로 증명해야 한다. ULog 파일 내에는 단순한 위도/경도 좌표뿐만 아니라, 위치 추정 알고리즘의 뇌파라 할 수 있는 estimator_status 토픽이 빼곡히 기록되어 있다.

본 절에서는 PlotJuggler 등의 분석 툴을 이용하여 estimator_status 토픽 내부의 난해한 비트마스크(Bitmask) 플래그를 해독하고, 이를 원시 GPS 데이터인 vehicle_gps_position과 병치(Juxtaposition)하여 원인을 규명하는 실무적인 차트 작성 기법을 다룬다.

0.1 estimator_statusgps_check_fail_flags 비트마스크 해독

ULog 데이터를 PlotJuggler로 불러오면 수백 개의 토픽이 쏟아지는데, 최우선으로 열어보아야 할 항복은 estimator_status_0 (메인 EKF 인스턴스) 하위의 gps_check_fail_flags 다.

이 변수는 단순한 정수형(Integer) 값이 아니라 16비트(bit) 비트마스크 필드다. 각 비트(Bit) 자리가 숫자 1로 튀어 오를 때마다 특정한 GPS 혁신/에러 테스트를 통과하지 못했음을 의미한다. 주요 비트의 의미는 다음과 같다.

  • Bit 0 (Fix Type): GPS가 3D Lock(통상 Fix 3 이상)을 확보하지 못함. (터널 진입 등)
  • Bit 1 (Num Sats): 수신된 위성 개수가 파라미터(기본 6개) 미만으로 떨어짐.
  • Bit 2 (GDOP/HDOP): 위성의 기하학적 배치(DOP) 품질이 파라미터 허용치를 초과하여 나쁨.
  • Bit 3 (Speed Error): GPS 수신기가 자체적으로 보고한 속도 오차(v_epc)가 너무 큼.
  • Bit 4 (Pos Error): GPS 수신기가 자체적으로 보고한 수평 위치 오차(h_epc)가 너무 큼.
  • Bit 5 (Velocity Drift): EKF 예측치 대비 속도 드리프트 폭주 (Innovation Gate 실패).
  • Bit 6 (Speed Divergence): EKF 속도와 GPS 속도의 방향성이 완전히 역전되거나 발산함.
  • Bit 7 (Vertical Drift): 고도(Z축) 튀어 오름이나 수렴 실패.

PlotJuggler에서는 이 gps_check_fail_flags 값을 그대로 그래프로 그리면 의미를 알 수 없는 계단형 숫자가 나오므로, 반드시 Bitwise AND 연산 마크다운(Custom Math) 기능을 통해 각 비트를 개별적인 Boolean(0 또는 1) 그래프 선으로 쪼개서(Unpack) 타임라인 위에 올려두어야 한다.

0.2 vehicle_gps_position 원시 데이터와의 비교 차트(Overlay) 뷰티

비트마스크 플래그가 언제 1로 튀었는지(Fail) 확인했다면, 그 정확한 시간대(Timestamp)에 진짜 원시 GPS 센서(vehicle_gps_position)가 EKF2에게 어떤 쓰레기 데이터를 던졌는지 교차 검증해야 한다.

PlotJuggler 화면을 상하 2분할(Split)하여 차트를 구성하는 것이 실무 표준이다.

[상단 차트: 원인 분석부 (Raw Sensor)]

  • vehicle_gps_position_0/eph: 수평 위치 오차 반경 (m)
  • vehicle_gps_position_0/epv: 수직 위치 오차 반경 (m)
  • vehicle_gps_position_0/satellites_used: 사용 중인 위성 개수
  • vehicle_gps_position_0/jamming_indicator: 재밍/스푸핑 지수 (0~255)

[하단 차트: 결과 및 필터 반응부 (EKF Reactioin)]

  • 단일화된 gps_check_fail_flags 비트 0~7번 라인들.
  • estimator_status_0/vel_test_ratio: 속도 혁신 테스트 비율 (1.0 이상이면 기각)
  • estimator_status_0/pos_test_ratio: 위치 혁신 테스트 비율 (1.0 이상이면 기각)

0.3 실무 진단 사례 (Case Study)

위 아키텍처대로 차트를 구성했을 때 나타나는 전형적인 고장 패턴이다.

  • 패턴 A (다중경로/터널): 상단 차트에서 satellites_used가 15개에서 4개로 뚝 떨어지고 eph가 2m에서 50m로 치솟는다. 동시에 하단 차트에서 gps_check_fail_flagsBit 1 (Num Sats)Bit 4 (Pos Error) 가 1로 점프한다. \rightarrow 하늘이 가려진 명백한 물리적 수신 불량이다.
  • 패턴 B (강한 전파 재밍): 상단 차트에서 satellites_used는 20개로 빵빵하지만, jamming_indicator가 갑자기 무자비하게 솟구친다. 이 직후 하단 차트에서 vel_test_ratio가 1.0을 돌파하고 gps_check_fail_flagsBit 5 (Velocity Drift) 가 1로 바뀐다. \rightarrow 지상의 누군가가 드론을 향해 지향성 전파 방해 총(Jammer)을 쏘았거나 강력한 통신 기지국을 스쳐 지나친 것이다.

이와 같이 ULog의 교차 분석(Cross-Analysis) 차트 작성은 단순한 숫자의 나열을 넘어서, 하늘 위에서 벌어진 기계(Hardware)와 필터(Software) 간의 급박한 치고받기를 사건의 재구성 수준으로 시각화해 내는 강력한 포렌식(Forensic) 도구다.