30.3.1. 초기화 상태(on_activation)에서의 위치 추정기(Estimator) 공분산(Covariance) 수렴 및 글로벌 데이터 유효성 확인 로직
PX4-Autopilot의 내비게이터(Navigator) 시스템 내에서 Mission 모드가 최초로 트리거될 때 가장 먼저 진입하는 생명주기(Lifecycle) 함수는 on_activation()이다. 이 함수는 임무 모드의 상태 머신(State Machine)을 구동하기 앞서, 기체가 진정한 자율 비행을 수행할 수 있는 “항법적 준비 상태“에 이르렀는지를 확증하는 문지기(Gatekeeper) 역할을 수행한다. 특히 위치 추정기(Estimator, 주력으로 EKF2 채택)의 오차 공분산(Error Covariance) 수렴도와 글로벌/로컬 좌표계 데이터의 유효성을 실시간으로 점검하는 로직은 기체의 항법 오차로 인한 충돌(Crash)을 방지하는 핵심 기제이다.
1. on_activation() 메커니즘의 구조적 목적
비행 제어 컴퓨터(Flight Controller, FC)가 조종사의 스위치 조작이나 지상 관제 GCS (예: QGroundControl)의 명령(MAV_CMD_DO_SET_MODE)을 통해 Mission 모드로 전환되면, navigator 데몬은 기존 실행 중이던 비행 태스크(예: Manual 또는 Hold)를 비활성화(on_inactivation)하고 새로운 태스크인 Mission 클래스의 인스턴스를 활성화한다.
on_activation() 함수의 주된 임무는 다음과 같다.
- 임무 데이터 동기화: SD 카드 저장소(
dataman)에 등록된 웨이포인트(Waypoint) 인덱스와 현재 시스템 메모리의 인덱스 포인터를 일치시킨다. - 동적 파라미터 로딩: 고도 제한(Altitude Limit), 이탈 허용 반경(Acceptance Radius) 등 비행 인스턴스에 필요한 MAVLink 파라미터 캐시를 갱신한다.
- 추정기 유효성(Estimator Validity) 최종 인가: EKF(Extended Kalman Filter)가 산출하는 기체의 상태량(State)이 신뢰 구간 내에 위치하는지를 엄격하게 평가하여 임무 궤적 추종의 정합성을 검장한다.
2. EKF2 오차 공분산(Covariance) 수렴성 평가 로직
자동 비행을 위한 가장 중요한 선제 조건은 현재 기체가 알고 있는 자신의 “위치“가 실제로 정확한가이다. EKF 알고리즘 측면에서, 상태 추정의 불확실성은 공분산 행렬(Covariance Matrix)의 대각 성분(Diagonal Elements)으로 표현된다.
PX4의 센서 융합 모듈(ekf2)은 vehicle_local_position_s 및 vehicle_global_position_s uORB 메시지를 발행할 때, 단지 좌표값(x, y, z)뿐만 아니라 해당 추정값의 분산(Variance), 즉 eph (수평 포지션 오차 통계치, Expected Position Error Horizontal)와 epv (수직 포지션 오차 통계치, Vertical)를 함께 전달한다.
// src/modules/navigator/mission.cpp 내부 (유효성 검증 추상화)
bool Mission::check_estimator_validity()
{
// 위치 추정기의 오차 범위 획득
const float eph = _navigator->get_local_position()->eph;
const float epv = _navigator->get_local_position()->epv;
const float param_nav_acc_rad = _navigator->get_acceptance_radius();
// 공분산(eph, epv)이 임계치를 초과하는지 여부를 검증
if (eph > param_nav_acc_rad || epv > param_nav_acc_rad) {
// 추정기가 발산(Divergence)하고 있거나 수렴하지 않은 상태이므로
// Mission 활성화를 거부(Reject)하거나 Failsafe를 발동
return false;
}
return true;
}
위 로직이 내포하는 학술적 의미는, 칼만 필터의 측정 및 시간 업데이트(Measurement & Time Update) 루프를 거치며 형성된 상태 벡터의 신뢰 구간이, 사용자가 정의한 항로 이탈 허용치(NAV_ACC_RAD) 내에 들어와야만 자동 제어기(Position Controller)가 제어 오차를 무한정 증폭시키는 현상(Wind-up 또는 Instability)을 방지할 수 있다는 뜻이다.
3. 글로벌 데이터(Global Origin) 유효성 플래그 검사
Mission 모드는 로컬 좌표계(NED, North-East-Down 기반)뿐만 아니라 기준점이 되는 글로벌 좌표계(WGS84 래티튜드, 롱기튜드)의 원점(Global Origin) 데이터 유효성을 철저히 검사해야 한다. 웨이포인트(Mission Item)가 대체로 위/경도로 주어지기 때문이다.
PX4 ekf2 모듈은 GPS Fix를 획득하고 EKF가 지구 고정 좌표계상의 기준점을 수립하면 vehicle_global_position_s 구조체 내의 origin_valid 플래그를 true로 세팅한다. navigator는 이를 1차적으로 구독하여 데이터의 정합성을 보증한다.
- 로컬 및 글로벌 동기화 검증:
수학적으로 로컬 좌표[X_L, Y_L, Z_L]^T와 글로벌 좌표[Lat, Lon, Alt]^T간의 투영(Projection)은 유도 로직에서 끊임없이 변환 연산(Transformation)을 겪는다.on_activation()에서는 두 맵핑 간의 타임스탬프 스큐(Timestamp Skew)를 방지하기 위해 가장 최신의 동기화된 메시지를 사용하는 메커니즘이 강제된다.
3.1 유효성 검증 FSM 흐름도
다음은 on_activation 단계에서 수행되는 추정기 신뢰도 판별 절차를 시각화한 Mermaid 다이어그램이다.
flowchart TD
A[Trigger Mission Mode] --> B{Call on_activation()}
B --> C[Fetch `vehicle_local_position` & `vehicle_global_position`]
C --> D{Check `origin_valid` flag}
D -- Invalid --> E[Reject Activation, Fallback to Hold/Manual]
D -- Valid --> F{Check eph/epv Covariance < Threshold}
F -- Exceeds Threshold --> E
F -- Converged --> G[Load Mission Dataset from Dataman]
G --> H[Set `_mission_state = MISSION_STATE_ACTIVE`]
4. Ardupilot의 Pre-arm Checks 와의 차별점
Ardupilot은 전통적으로 지상에서 시동을 걸기 전(Pre-arm Checks 단계)에 GPS HDOP, 3D Fix 레벨, 그리고 EKF 혁신(Innovation) 치를 일괄 조회하는 패러다임이 상대적으로 더 강하게 구현되어 있다.
반면 PX4-Autopilot의 아키텍처는 매 비행 모드가 활성화되는 당해 시점(on_activation) 마다 동적으로 유효성을 선행 평가하는 계층화된 지속 검사(Continuous Validation) 패러다임을 갖는다. 즉, 기체가 이륙하여 정상 비행 중이라 하더라도, 고층 빌딩 숲 등 GPS 음영지대에 진입하여 EKF 성능이 일시적으로 급락하면, Mission 모드 객체 스스로 비행 인가 조건을 거둬들이고 커맨더 모듈에 페일오버(Failover: 가용한 센서를 토대로 한 위치 유지 또는 착륙 등)를 요청하는 탄력적인 상태 머신으로 작동한다. 이는 복잡한 도심 항공 모빌리티(UAM)나 자율 에이전트 비행 시 안정성을 극도로 상향시키는 PX4 고유의 설계 사상이다.