28.4.4. 인플라이트(In-flight) 장애 발생 시 모드 강하(Mode Fallback) 보호 루틴

28.4.4. 인플라이트(In-flight) 장애 발생 시 모드 강하(Mode Fallback) 보호 루틴

무인항공기(UAV)가 비행 중인 상태(In-flight)에서는 센서의 일시적 또는 영구적 고장, 통신 단절, 혹은 외부 환경 요인(예: GPS 재밍 등)으로 인해 현재의 비행 모드를 유지하기 위한 전제 조건(Pre-conditions)이 상실될 수 있다. PX4-Autopilot은 이러한 치명적인 상황에서 기체의 추락이나 통제 불능 상태를 방지하기 위해, 현재 모드보다 요구되는 센서 데이터가 적은 하위 비행 모드로 자동 전환하는 모드 강하(Mode Fallback) 보호 루틴을 내장하고 있다.

본 절에서는 PX4-Autopilot의 인플라이트 장애 발생 시 모드 강하 메커니즘의 아키텍처적 특징, 동작 원리, 소스 코드 구현, 그리고 ArduPilot과의 차이점을 시스템 수준에서 상세히 분석한다.


1. 모드 강하(Mode Fallback)의 개념 및 필요성

모드 강하 루틴은 시스템의 다중화(Redundancy) 및 결함 허용(Fault Tolerance) 설계의 핵심 요소이다. 기체가 고도화된 자율 비행(예: Mission, Position 모드)을 수행 중일 때, 시스템은 상태 추정기(Estimator, 주로 EKF2)로부터 신뢰할 수 있는 3차원 위치(Position) 및 속도(Velocity) 데이터를 요구한다. 그러나 GPS 수신 불량, 비전 센서(Visual Odometry)의 추적 실패, 혹은 치명적인 지자기 센서(Magnetometer)의 간섭이 발생하면 위치 추정의 불확실성(Variance)이 임계치를 초과하게 된다.

이때 PX4의 커맨더(Commander) 모듈과 비행 모드 관리자(Flight Mode Manager)는 기체 상태의 유효성 검사를 통해 현재 모드를 유지할 수 없다고 판단하고, 즉시 위치 데이터가 필요 없는 고도 유지(Altitude) 모드나, 고도 데이터마저 신뢰할 수 없을 경우 수동 자세 제어(Stabilize) 모드 등으로 안전하게 등급을 낮추어(Fallback) 제어권을 유지한다. 이는 추락이라는 최악의 시나리오를 방지하고 조종사에게 수동 조작을 통한 복구 기회를 제공하는 중요한 안전 장치(Failsafe)이다.

1.1 하향식 모드 전이 트리 (Fallback Tree)

모드 강하는 일반적으로 센서 의존도가 높은 모드에서 낮은 모드로 순차적 또는 도약하여 트리거된다.

  • 완전 자율 모드(Mission/Offboard) \rightarrow 위치 제어(Position) \rightarrow 고도 제어(Altitude) \rightarrow 자세 제어(Stabilize/Acro)

2. 모드 강하의 아키텍처 및 동작 원리

PX4-Autopilot에서 모드 강하 루틴은 단일 컴포넌트가 아닌 다수 모듈의 유기적인 상호작용으로 이루어진다. 핵심 컴포넌트는 다음과 같다.

  1. Estimator (EKF2): 센서 데이터를 융합하여 기체의 위치, 속도, 자세를 추정하고, 각 추정값의 혁신(Innovation) 및 신뢰도 플래그(예: estimator_status 내의 pos_horiz_test_ratio 등)를 uORB를 통해 발행한다.
  2. Commander 모듈: 시스템의 전반적인 상태 머신(State Machine)을 관장한다. 센서 및 EKF2의 상태 메시지를 감시하며, 특정 플래그가 유효하지 않게 되면(Invalidation), 페일세이프(Failsafe) 상태 기계를 작동시킨다.
  3. Flight Mode Manager (flight_mode_manager): Commander로부터 전달받은 상위 레벨의 모드 변경 명령(vehicle_control_mode)을 수신하여 실제 컨트롤러(Position/Attitude Controller)의 라우팅을 재구성한다.
sequenceDiagram
    participant Sensor as Sensors (GPS, Baro)
    participant EKF as Estimator (EKF2)
    participant Cmd as Commander
    participant FMM as Flight Mode Manager
    participant GCS as QGroundControl

    Sensor-->>EKF: 원시 데이터 제공 (장애 발생)
    EKF-->>EKF: 혁신치(Innovation) 초과 감지
    EKF->>Cmd: 유효성 플래그 해제 (uORB: estimator_status)
    Cmd-->>Cmd: 현재 모드 검증 및 강하(Fallback) 결정
    Cmd->>FMM: 새로운 비행 모드 지시 (uORB: vehicle_control_mode)
    Cmd->>GCS: 모드 강하 경고 및 상태 변경 알림 (MAVLink: STATUSTEXT)
    FMM-->>FMM: Task 전환 (Position -> Altitude 등)

3. 소스 코드 레벨 분석 (Commander 및 Failsafe 로직)

PX4 펌웨어(v1.14 기준)에서 모드 강하와 관련된 핵심 로직은 src/modules/commander 디렉토리 내의 상태 머신 코드에 내장되어 있다. 특히 장애 발생에 대응하는 로직은 파라메트릭 페일세이프 시스템(Failsafe.cpp 및 관련된 헤더)에서 처리된다.

3.1 센서 유효성 검사 루틴

커맨더 모듈은 주기적인 루프(Main loop) 내에서 상태 검증 함수들을 호출한다. 예를 들어, Commander::run() 함수 내에서 EKF 상태 플래그를 확인하여 현재 모드의 요구사항(Requirements)과 대조한다.

만약 현재 모드가 Position 모드라면, 3D 위치 추정이 필수적이므로 estimator_status_s 토픽의 플래그 중 로컬 위치 유효성 플래그(flags.local_position_valid)가 교차 검증된다. 만약 GPS 글리치(Glitch) 등으로 인해 이 플래그가 false로 떨어지면, 시스템은 즉시 페일세이프 라우터를 호출한다.

3.2 페일세이프 상태 머신(Failsafe State Machine)

페일세이프 발생 시 모드 강하를 결정하는 과정은 고정된 하드코딩 방식이 아닌, 상태 전이 트리를 따른다. 다음은 모드 강하 처리를 추상화한 의사 코드(Pseudo code)이다.

// Commander의 Failsafe 평가 의사 코드 (PX4 v1.14 구조 참조)
void Commander::evaluate_failsafe()
{
    // 1. 현재 제어 모드의 유효성 검사
    bool navigation_valid = internal_state.local_position_valid;
    
    // 2. 현재 Position 계열 모드인데 네비게이션이 불가능한 경우
    if (current_mode == vehicle_status_s::NAVIGATION_STATE_POSCTL && !navigation_valid) {
        
        // 3. 고도 데이터(Barometer 등)는 유효한지 확인
        if (internal_state.altitude_valid) {
            // Altitude 모드로 강하 (Fallback to Altitude)
            switch_to_mode(vehicle_status_s::NAVIGATION_STATE_ALTCTL);
            mavlink_log_critical("Position lost, fallback to Altitude mode");
            
        } else {
            // 최후의 수단: Stabilize 모드로 강하 (Fallback to Stabilize)
            switch_to_mode(vehicle_status_s::NAVIGATION_STATE_STAB);
            mavlink_log_emergency("Position and altitude lost, fallback to Stabilize");
        }
    }
}

이 코드는 추상화된 로직이지만, 실제 PX4의 ModeFailsafe 구현 클래스는 이를 매우 세밀하고 객체지향적인 방식으로 분기 처리한다. (특히 COM_POS_FS_EPHCOM_POS_FS_EPV 등의 파라미터와 연계하여 오차 임계치 도달 여부를 평가한다.)


4. PX4-Autopilot vs ArduPilot의 모드 강하 차이점

두 오픈소스 시스템 모두 강력한 페일세이프와 모드 강하 아키텍처를 가지고 있지만, 철학과 구현 방식에서 유의미한 차이를 보인다.

비교 항목PX4-AutopilotArduPilot (Copter 기준)
상태 관리 아키텍처범용 Failsafe State Machine을 통해 전역적(Global)으로 모드 변경을 일괄 결정함 (commander 중앙 처리).각 비행 모드 도메인 객체 내에서 자율적으로 검증하고 상위 모드로 Fallback을 요청하거나 강제 변경함 분산 처리 방식을 띔.
자동 복구(Auto-Recovery)센서가 복구되어도 파라미터(예: COM_POS_FS_DELAY) 설정에 따라, 혹은 조종사의 명시적인 스틱 조작 전까지 하위 모드를 유지하려는 보수성을 가짐.일부 상황에서 GPS 록(Lock)이 복구되면 다시 이전 모드로 복귀하려는 옵션을 지원하나, 최근 EKF3에서는 보수적 접근으로 변경 중.
모드 강하의 투명성uORB의 vehicle_control_mode 플래그 조작을 통해 모드가 분리되며, 명확히 플래그 ON/OFF 형태로 구별됨.C++ 클래스의 상속 구조 상 하위 컨트롤러 함수를 호출하는 방식으로 결합되어 동작.

PX4는 모드 전이에 대해 대단히 엄격한 전제 조건(Pre-conditions)을 검사하는 철학을 가지며, 센서 불량이 감지되면 매우 빠르게 보수적인 하위 모드로 전환하여 안전을 확보하는 데 집중한다.


5. 지상 관제 시스템(QGroundControl)과의 연동 및 식별

기체가 인플라이트 장애로 인해 모드 강하를 겪을 때, 지상 관제소의 운영자는 이를 즉각적으로 알아채고 대처해야 한다.

  1. MAVLink 심박수(HEARTBEAT) 변화: 기체의 HEARTBEAT 메시지 내 custom_mode 필드가 변경된다. QGroundControl(QGC)은 이 패킷을 디코딩하여 상단의 비행 모드 뱃지(Badge)를 예를 들어 “Position“에서 “Altitude“로 업데이트한다.
  2. STATUSTEXT 메시징: PX4 커맨더는 단순한 모드 변경뿐만 아니라 경고(Warning) 및 치명적(Critical) 레벨의 STATUSTEXT 메시지를 MAVLink를 통해 브로드캐스트한다.
  • 메시지 예: “Failsafe activated: No position lock” 혹은 “Fallback to Altitude mode”.
  • QGC는 이 메시지를 수신하여 사용자 인터페이스에 오디오 경고문(Text-to-Speech 포함)과 함께 팝업 메시지를 출력한다.
  1. UI 상의 센서 아이콘: 모드 강하의 원인이 된 GPS나 나침반의 상태 아이콘이 붉은색이나 노란색으로 변하여 근본 원인(Root Cause)을 오퍼레이터 포착할 수 있게 돕는다.

6. 보호 루틴 최적화를 위한 파라미터 (Configuration)

모드 강하의 민감도를 시스템 환경이나 미션 요구사항에 맞게 조율하기 위해 PX4는 여러 파라미터를 제공한다. 사용자는 QGroundControl의 파라미터 에디터를 통해 다음을 세팅할 수 있다.

  • COM_POS_FS_EPH / COM_POS_FS_EPV: GPS 위치 추정의 이노베이션 오차 한계를 설정한다. 이 임계치를 낮추면 모드 강하가 자잘한 간섭에도 쉽게 빈발하며, 반대로 높이면 궤적 이상이 생길 때까지 모드 강하를 지연시킨다.
  • COM_POS_FS_DELAY: 위치 상실 감지 후 모드 강하를 실행하기 전까지의 딜레이 타임(초). 짧은 글리치로 인해 모드가 수시로 바뀌는 것을 방지할 수 있다.
  • EKF2_GPS_CHECK: EKF가 GPS 데이터를 수용하기 위해 통과해야 하는 기본 검사들을 비트마스크(Bitmask) 형태로 지정한다. 위성 수(SVs), HDOP 등의 제약을 해제하거나 조이면 강하 빈도에 직결된다.

이 파라미터들의 조합을 적절히 구성함으로써 인플라이트 장애 환경 하에서도 UAV의 동작 일관성을 확보하고 치명적인 손실을 막아낼 수 있다.