### 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_status 및 gps_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_flags의 Bit 1 (Num Sats) 과 Bit 4 (Pos Error) 가 1로 점프한다. \rightarrow 하늘이 가려진 명백한 물리적 수신 불량이다. - 패턴 B (강한 전파 재밍): 상단 차트에서
satellites_used는 20개로 빵빵하지만,jamming_indicator가 갑자기 무자비하게 솟구친다. 이 직후 하단 차트에서vel_test_ratio가 1.0을 돌파하고gps_check_fail_flags의 Bit 5 (Velocity Drift) 가 1로 바뀐다. \rightarrow 지상의 누군가가 드론을 향해 지향성 전파 방해 총(Jammer)을 쏘았거나 강력한 통신 기지국을 스쳐 지나친 것이다.
이와 같이 ULog의 교차 분석(Cross-Analysis) 차트 작성은 단순한 숫자의 나열을 넘어서, 하늘 위에서 벌어진 기계(Hardware)와 필터(Software) 간의 급박한 치고받기를 사건의 재구성 수준으로 시각화해 내는 강력한 포렌식(Forensic) 도구다.