27.7.1.1. 필터 결함 플래그(filter_fault_flags): 수치 연산 실패 및 공분산 비대칭 원인 역추적

27.7.1.1. 필터 결함 플래그(filter_fault_flags): 수치 연산 실패 및 공분산 비대칭 원인 역추적

본 소절에서는 PX4 estimator_status 토픽에서 파생되는 핵심 비트마스크 중 하나인 filter_fault_flags의 세부적인 수학적 원인과 이를 바탕으로 한 시스템 치명 오류의 역추적(Backtracking) 기법을 소스 코드 수준에서 심층적으로 분석한다.

1. 필터 결함 플래그(filter_fault_flags)의 정의 및 치명성

자율 비행 로봇 시스템에서 센서 데이터의 일시적 노이즈나 차단(GPS Loss 등)은 비행 스택 설계 단계에서 이미 고려된 예외 상황이며, 대체 항법(Fallback)을 통해 즉각적인 복구가 가능하다. 하지만 확장 칼만 필터(EKF) 내부의 계산기 자체가 붕괴하는 수치 연산 실패(Numerical Failure) 는 기체의 제어기(Controller)로 파급될 경우 모터의 완전한 정지나 예측 불가능한 최대 RPM 발산(Flyaway)을 초래하는 가장 치명적인 시스템 결함(Fatal Fault)이다.

PX4의 EKF2 모듈은 수학적 무결성을 담보하기 위해 행렬 연산 매 틱(Tick)마다 산출된 상태 벡터와 공분산 행렬을 스캔하며, 오류가 적발될 시 filter_fault_flags의 특정 비트를 1(True)로 트리거(Trigger)한다. 이 16비트 정수형 플래그는 단순히 “필터링 실패“를 알리는 데 그치지 않고, 16가지 고유 비트를 통해 어떠한 종류의 수학적 붕괴가 발생했는지를 정밀하게 지시한다.

2. 주요 수치 연산 실패 및 발산의 카테고리화

PX4 소스 코드(예: src/modules/ekf2/EKF/ekf.h 내의 fault_status_u 공용체 참조)에 정의된 대표적인 수치 연산 실패 모드는 다음과 같다.

2.1 불능 값(NaN / Inf) 전파 방어 회로

필터의 공분산 시간 지연(Time Delay) 보상 단계나 센서 융합의 칼만 이득(Kalman Gain, K) 산출 공식의 분모에 0에 극단적으로 가까운 값이나 완전한 0이 주입될 경우, 행렬 요소에 Not-A-Number(NaN) 또는 무한대(Infinity)가 생성된다.

  • 관련 플래그: bad_mag_x, bad_mag_y, bad_mag_z 플래그는 자력계 측정치 융합 시 분산 행렬 연산에서 NaN이 검출되었음을 의미한다.
    해당 플래그가 켜지면 시스템은 즉각 해당 센서의 피드백을 절단(Cut-off)하고, 관련된 퓨전 행렬의 상태를 발산 이전의 직전 프레임으로 강제 롤백(Rollback)하는 보호 기제를 가동한다.

2.2 공분산 행렬의 비대칭성 및 음-정부호(Negative-Definiteness) 발산

상태 추정기의 신뢰도를 나타내는 공분산 행렬(Covariance Matrix, P)은 수학적으로 항상 대칭 행렬(Symmetric Matrix)이어야 하며, 모든 고유값(Eigenvalue)이 양수인 양의 정부호(Positive Definite) 특성을 엄격히 유지해야 한다.
하지만 임베디드 코어(NuttX RTOS 상의 ARM Cortex-M 시리즈 등)의 단정밀도(Single-Precision, 32-bit float) 부동 소수점 자릿수 절삭 오차(Truncation Error)가 누적되거나, 센서 노이즈 공분산 파라미터(예: EKF2_GYR_NOISE)가 물리 법칙을 위배하는 극단적 값으로 잘못 튜닝될 경우, 대각 행렬 원소(Diagonal Elements) 중 하나가 0 이하의 음수로 역전되는 현상이 발생한다.

  • 트러블슈팅 접근법: 비행 로그(ULog) 상에서 filter_fault_flagsbad_vel_down (수직 속도 추정치 상태 공분산 붕괴) 비트가 켜졌다면, 이는 기압계(Barometer)의 관측 노이즈 매트릭스 설정값과 기체의 물리적 수직 진동 모델 간의 심각한 불일치에서 기인한 공분산 비대칭 역전 현상일 확률이 매우 높다.

3. 결함 역추적(Backtracking) 및 복구 아키텍처

위와 같은 치명적인 필터 결함이 감지되었을 때, 다중 인스턴스 환경을 채택한 PX4(버전 1.13 이상 기준)는 소프트웨어 레벨의 이중화 방어 체계를 가동한다.

결함이 단일 EKF 코어에 국한된 문제라면 앞서 설명된 EKF2Selector 모듈이 해당 인스턴스의 건강 점수(Health Score)에 막대한 페널티(+\infty에 가까운 가중치)를 부여하여 주(Primary) 제어권에서 즉각 축출한다. 그리고 문제가 해결되지 않는 한 이 인스턴스는 영구적으로 격리된다. 만약 시스템에 가용한 백업 EKF 스레드가 없는 단일 코어 환경이거나 복구 불가능한 통합 오류일 경우, 비행 제어기(Commander)는 의무적으로 자동 비행 모드를 모두 강제 이탈시켜 수동 비행 모드(Altitude/Stabilized)로 강등(Fallback)하거나 즉각적인 비상 착륙(Failsafe Land) 시퀀스로 전환하게 된다.

이토록 고도화된 수치 분석 모니터링 체계 덕분에, 학계 및 상용 시스템 개발자는 드론의 비행 중 원인 불명 산술 리셋 현상에 직면할 때, ULog에 남겨진 filter_fault_flags의 트레이니션(Transition) 비트를 역추적하여 펌웨어 내부 알고리즘의 결함인지 사용자 파라미터 튜닝의 과오인지를 명확하게 입증해 낼 수 있다.