27.6.3.1. 주(Primary) EKF 인스턴스 교체 조건 판별 로직
본 소절에서는 EKF2Selector 모듈이 기존에 제어 피드백을 독점적으로 공급하던 주(Primary) EKF 인스턴스를 강등시키고, 가용한 백업 인스턴스에 제어 권한을 이양하는 시점을 판단하는 정확한 의사결정 조건, 이른바 ’교체 조건 판별 로직(Switching Condition Logic)’을 소스 코드 아키텍처에 기반하여 분석한다.
1. 페일오버(Failover) 트리거의 일반 조건: 히스테리시스 락(Hysteresis Lock) 관통
비행 중 주 인스턴스가 산출해 내는 수학적 오류 비율(Test Ratio)이 일시적으로 상승했다고 해서, 셀렉터 모듈이 즉각적인 인스턴스 교체를 단행하지는 않는다. 센서 화이트 노이즈(White Noise)에 일일이 반응하는 빈번한 교체는 필연적으로 제어 신호 내 채터링(Chattering)과 비행 제어 기동 불안정을 야기하기 때문이다. 따라서 교체 판별 알고리즘은 다음의 두 가지 필수 조건을 동시에 만족할 때에만 비로소 트리거링(Triggering)되도록 보수적인 히스테리시스 락(Hysteresis Lock) 구조로 설계되어 있다.
- 절대 마진(Absolute Margin) 초과: 백그라운드에서 백업 구동 중인 새로운 후보(Candidate) 인스턴스의 누적 건강 점수(Health Score)가 현재 주 인스턴스의 점수 대비 일정 수준(제어 파라미터로 설정된
EKF2_SEL_ERR_MARGIN) 이상 압도적으로 우수해야 한다. - 시간 보증 임계값(Time Threshold) 초과: 후보 인스턴스가 주 인스턴스보다 높은 수학적 정합성을 유지하는 연속 상태가 필터 지연에 대비한 최소 지속 한계 시간 \Delta t를 완전히 초과하여야 한다.
// 페일오버 교체 판별 논리 구조 (src/modules/ekf2/EKF2Selector.cpp 개념화)
bool EKF2Selector::check_switching_conditions(int candidate_idx, int primary_idx) {
float candidate_score = _instances[candidate_idx].accumulated_score;
float primary_score = _instances[primary_idx].accumulated_score;
// 점수 역전이 설정된 에러 마진 폭을 완전히 물리적으로 관통했는지 검증 (낮은 점수가 우수)
if (primary_score - candidate_score > _error_margin) {
// 해당 우위 상태가 충분한 보증 시간(MIN_SWITCH_TIME)을 충족했는지 검증
if ((current_time - _better_score_timestamp) > MIN_SWITCH_TIME_US) {
return true; // 페일오버 스위칭 최종 승인
}
}
return false; // 기존 Primary 인스턴스의 권한을 유지
}
2. 치명적 단절(Fatal Break)에 편승한 긴급 오버라이드(Emergency Override) 체계
상기 기술된 누적 방식의 지연 평가 기반 교체 로직은 통상적인 일시적 전자기 교란이나 진동 등에는 훌륭히 대처하지만, 센서 케이블의 물리적 단선이나 칩셋 내부 회로 소손 단위의 치명적 결함 상황에는 너무 느리게 반응하여 오차 발산 및 추락을 초래할 여지가 존재한다. PX4-Autopilot 코어 시스템은 이러한 특이 상황을 하드웨어적으로 방어하기 위해, 시간 지연 연산을 배제하고 즉각적인 스위칭을 강제하는 하드 오버라이드(Hard Override) 트리거 조건을 예외 사양으로 두고 있다.
긴급 스위칭을 성립시키는 핵심적 조건은 다음과 같이 구성된다.
- 혁신 체계 기각 타임아웃(Innovation Rejected Timeout):
주 인스턴스가 가용한 센서 관측치(예: GPS 토픽이나 VIO 스트림 등)를 지속적으로 수학적 기각(Reject) 처리하고 의존 센서 없이 예측 항법(Dead Reckoning) 추론에만 매달리는 시간이, 허용되는 치명적 한계 한계(수 초 이내)를 돌파한 경우 셀렉터가 권한을 강제 이양한다. - 행렬 수학적 발산(NaN / Inf 검출):
메인 센서 데이터의 비정상 값 주입으로 인하여 내부 공분산 행렬 요소에 Not-A-Number(NaN) 또는 무한대(Inf)가 파급 처리됨에 따라, 필터의 수학 매트릭스 전체 붕괴가 시스템에 감지된 경우이다. 이때 해당 인스턴스는 즉각 죽음(Dead) 상태로 플래깅(Flagging)되며 안전망 상차(Fallback) 교체가 즉시 수행된다.
3. 항법 제어적 차별성: ROS 2 상호운용성 기반 자율 시스템 이점
오픈소스 기반 Ardupilot을 활용하는 고정익 및 로터리 시스템 환경에서도 다중 EKF 기반 페일오버는 부분적으로 지원되나, PX4의 판별 로직 및 이벤트 시스템은 산업 표준 MAVLink 통신망 및 ROS 2(Robot Operating System 2) 기반의 원격 마이크로에이전트(uXRCE-DDS)와의 이벤트 투명성 측면에서 강력한 이점을 점유한다. PX4는 내부 인스턴스 스위칭이 실행될 경우 단순히 블랙박스 내부에 ULog를 점 데이터로 남기는 행위에 그치지 않고, 시스템 통합 이벤트 모듈(events interface)을 매개로 스위칭 야기 오류 코드(예: Nav switch due to GPS velocity timeout)를 즉각 지상 관제 시스템(GCS) 알람 모듈로 브로드캐스팅(Broadcast)한다.
이는 QGroundControl 운영자나 개별 다중 스웜(Swarm) 제어 알고리즘 설계자로 하여금, 해당 에이전트(Agent)가 치명적인 공역 제어 불능 단계에 돌입하기 전 어떤 하드웨어 센서 노드에 충격 및 감쇠 현상을 겪었는지 논리적으로 실시간에 가깝게 추적 및 진단(Troubleshooting)할 수 있도록 고도화된 소프트웨어 텔레메트리(Telemetry) 아키텍처 환경을 자산으로 부여한 것이다.