28.1.2.1.3. 비상 및 특수 상태 군: `OFFBOARD`, `DESCEND`, `TERMINATION`

28.1.2.1.3. 비상 및 특수 상태 군: OFFBOARD, DESCEND, TERMINATION

PX4 시스템의 vehicle_status 열거형 데이터베이스 디렉터리에서 가장 이질적이면서도 커널 레벨의 절대적인 최상위 인터럽트 권력을 보장받는 세 번째 카테고리가 바로 **비상 및 특수 상태 군(Emergency & Special State Domain)**이다.

이 상태 패킷 상수들은 평화로운 일반 비행 궤적 통제나 조종 보조를 위함이 아니다. 하드웨어가 아닌 외부의 이기종 컴퓨터(예: ROS2 네트워크)에 제어권을 논리적으로 통째로 넘기는 API 개방 인터페이스 환경이거나, 기체의 추락이나 센서망 결함으로 인해 인명 피해를 막고자 기체를 강압적으로 회수/파괴 방향으로 몰고 가는 극한의 하드코어 인터럽트 생존 로직들을 관장한다.

1. NAVIGATION_STATE_OFFBOARD (동반 컴퓨터 원격 제어 개방 모드)

  • 동역학적 성격: 인간 조종기의 타각, 내부 GCS 웨이포인트 자율 알고리즘 계산망을 모두 논리적으로 우회(Logical Bypass)한다. 오로지 이더넷(Ethernet)이나 고속 시리얼(UART) 포트로 결선된 외부의 동반 컴퓨터(Companion Computer, 예: Raspberry Pi, NVIDIA Jetson) 데몬에서 억지로 쏟아내는 실시간 궤적 목표치 벡터(Trajectory Setpoints)만을 맹목적으로 추종 수용하는 모드다.
  • 아키텍처 특징: 자율주행 연구자들이 쓰는 ROS 2의 uXRCE-DDS 미들웨어 노드 브릿지나, 지상관제단의 MAVSDK 파이썬 코드가 기체의 모터 믹서를 100% 지배 통제하게 된다.
  • 안전망 록인 로직 (Offboard Timeout Safe): 외부에 비행기 핸들을 함부로 넘겨버린 극도로 위험한 개방 상태이므로, 시스템은 가혹한 워치독(Watchdog/Timeout) 핑 테스트를 수반한다. 동반 컴퓨터가 최소 2Hz(0.5초) 주기로 꼬박꼬박 trajectory_setpoint 제어 명령 심장 박동을 PX4 uORB 망에 주입하지 않으면, Commander는 즉시 오프보드 Linux 시스템이 다운되거나 네트워크가 끊겼다고 간주(Timeout Fail)하여 즉각 스티어링 제어권을 폭력적으로 회수하고 AUTO_LOITER 홀드 비행이나 AUTO_RTL 복귀 모드로 상태를 강제 강등 추방(Fallback System) 시켜 기체를 자가 보호해 버린다.

2. NAVIGATION_STATE_DESCEND (비상 블라인드 하강 모드)

  • 동역학적 성격: 기체가 공중에서 비행하던 중 GPS 안테나가 단절되거나 기압계 센서 칩셋이 물리적으로 죽어버려서, EKF2 데이터망이 자신의 절대 3D 좌표나 고도 이노베이션을 모조리 잃어버렸을 때 발동한다. 더 이상 기존의 위치 제어 피드백 루프(POSCTL 등)를 돌릴 수 없는 최악의 ‘눈 먼(Blind)’ 상태에 빠졌을 때 PX4가 스스로 숨통을 끊어버리는 비상 생존 모드다.
  • 아키텍처 특징: 시스템은 EKF2의 X, Y 축 면 공간 수평 이동 제어 계산식을 깔끔하게 메모리에서 포기(Abandon)해 버린다. 돌풍에 기체가 어디로 떠밀려가든 신경 쓰지 않고 저항하지 않는다. 오직 마지막 숨통인 IMU 가속도계(Accelerometer) 데이터 센서 단 하나만을 쥐어짜 내어 기체의 Z축 하강 속도(예: 1.0 m/s 타겟)만을 결사적으로 부여잡고 착륙 충돌을 감지할 때까지 블라인드 강하(Blind Descend)를 맹목적으로 감행한다. 터치다운 시 모터는 즉각 락다운(Disarm) 된다.

3. NAVIGATION_STATE_TERMINATION (비행 시스템 강제 종료 / 최후의 킬 스위치 록다운 모드)

  • 동역학적 성격: 기체가 공중에서 폭발적으로 180도 전복(Flipped)되어 수평 회복이 불가능한 한계각을 넘었거나, 미리 쳐놓은 가상의 전자 울타리(Geofence) 반경을 이탈(Breach)하여 고도 제한을 무시하고 민간인 구역으로 통제 불능 상태로 날아갈 때 발단된다. 도저히 정상적인 비행 역학으로 기체 시스템을 수습/회수할 수 없다고 Failsafe 모듈이 판결을 내릴 때 도달하는 PX4 최후의 사형 선고(Death Sentence) 상수다.
  • 아키텍처 특징: 이름 그대로 ESC와 직결된 최하단 모듈까지 파고들어 모든 모터의 PWM 구동 펄스 신호를 그 즉시 0% 셧다운 레벨로 영구적으로 끊어버려(Kill) 추돌 동력을 즉시 상실하게 만들며, 쇳덩어리 기체를 무자비하게 자유 낙하(Free Fall Crash) 시켜버린다. 만약 고급 기체에 비상 낙하산 릴리스 서보(Parachute Servo System)가 사전 장착되어 있다면 이 TERMINATION 상태 진입 판별 함수 호출 찰나에 록 핀이 액추에이터로 개방되어 낙하산이 사출된다.

4. 시스템 추월적 선점 우선순위(Preemptive Priority Hierarchy)의 절대성

이들 특수 계열 열거형 데몬 상수들은 앞선 일반 수동 모드(POSCTL)나 자동 미션 모드(MISSION) 군과 코딩 스택 스케줄러 상에서 절대 동등한 무게 중심을 지니지 않는다. Commander 유한 상태 기계(FSM) 아키텍처 내부 if-else 트리 구조에서 이 특수 비상 상태들은 **가장 압도적으로 높은 선점 권한(Highest Preemptive Interruption Priority)**을 최우선으로 부여받아 하드코딩(Hardcoded) 베이킹되어 있다.

예를 들어, 조종사가 하늘에서 Mission 비행 관람 중에 실수로 조종기 스위치를 수동으로 건드리거나, 지상 GCS 노트북에서 안도하며 홈(RTL) 명령을 클릭한다 한들, 만약 기체 내부 백그라운드 스레드의 배터리 뱅크 모니터 데몬이 이미 셀 전압 완전 붕괴(Critical Empty)를 선 감지하여 Commander 전역 변수를 NAVIGATION_STATE_DESCEND로 인터럽트 전이(Transition Lock)시켜 버린 후라면 상황은 종료된다.

그 어떤 외부 C++ 로직 통신 패킷이나 텔레메트리 함수 호출도 이 시스템의 추락 결정을 논리적으로 소프트웨어 번복(Reverse or Override)할 수 없도록 강철 같은 뮤텍스 락(Lock) 체계가 커널단에 걸리게 된다. 오직 기체가 완전히 바닥에 부딪혀 충격량 센서가 Landed 참을 반환하거나, 전원선 잭(Hardware Power)을 리셋해 뽑기 전까지는 이 시스템의 독재적 권한(Authoritative Hardware Control)에서 절대 벗어날 수 없도록 설계된 극단적인 다이하드(Die-hard) 비상 생존 우선주의 프레임워크의 자태다.