28.4.1. 전환 트리거(Trigger) 및 이벤트 처리 파이프라인

28.4.1. 전환 트리거(Trigger) 및 이벤트 처리 파이프라인

조용한 호수 위를 비행하던 드론의 비행 모드가 갑자기 바뀌기 위해서는, 외부든 내부든 누군가가 의도적인 “트리거(Trigger)” 스위치를 당겨야만 한다.

놀라운 점은, 이 트리거가 발생하는 출처가 상상 이상으로 다양하며, 각 출처마다 통신 속도와 데이터 규격이 천차만별이라는 사실이다. PX4는 이처럼 파편화된 다중 입력 소스들을 어떻게 하나의 깔끔한 이벤트 파이프라인으로 정렬해 낼까?

1. 4대 모드 전환 트리거 소스(Source)

PX4 비행 제어 스택에서 모드 전환을 요청할 수 있는 진입점은 크게 4가지 루트로 분류된다.

  1. 조종기 스위치 (RC Input): 조종사가 양손에 든 송신기의 플라이트 모드 토글 스위치를 물리적으로 딸깍거리는 가장 원초적이고 즉각적인 트리거다. rc_update 모듈이 수신기의 PWM/SBUS 신호를 파싱하여 잡아낸다.
  2. MAVLink GCS 명령: QGroundControl 같은 지상 관제망에서 사용자가 태블릿 화면의 “Hold” 버튼을 터치하거나 임무(Mission) 업로드를 지시할 때 날아오는 원격 명령이다. 통상 MAV_CMD_DO_SET_MODE 형태의 패킷으로 유입된다.
  3. 오프보드 API (Offboard Target): 젯슨 나노(Jetson Nano) 같은 보조 컴퓨터(Companion Computer)가 ROS 2 퍼블리셔나 MAVSDK 스크립트를 통해 인공지능(AI) 기반 자율 비행의 개시를 요청하는 머신 투 머신(M2M) 트리거다.
  4. 내부 Failsafe 자율 트리거: 배터리가 10% 미만으로 곤두박질치거나, 기체가 허가된 울타리(Geofence)를 이탈했을 때 커맨더(Commander) 내부의 센티넬 시스템 스스로가 살기 위해 발동시키는 강제 RTL(복귀) 또는 Land(착륙) 트리거다.

2. 모래시계 파이프라인: Commander의 중앙 통제

이 4가지 루트 파이프들은 병렬적으로 제어기(Controller)를 직접 찌르지 않는다. 대신 조기 모래시계(Hourglass) 구조처럼 모여들어, 중앙 심장부인 Commander 모듈의 단일 게이트를 강제로 통과해야만 한다.

graph TD
    A[RC Switch Toggle] -->|RC State| E(Commander Module)
    B[GCS MAVLink Command] -->|vehicle_command| E
    C[ROS 2 Offboard API] -->|vehicle_command| E
    D[Internal Failsafe] -->|System Error| E
    
    E -->|Validation & Assessment| F{Approve?}
    
    F -- Yes --> G[Publish: vehicle_control_mode.msg]
    F -- No --> H[Reject & Emit Status Text]
    
    G --> I[Flight Mode Manager FMM]
    I -->|switchTask| J[Physical Control Overwrite]

MAVLink 수신기나 RC 파서 등 각 주변부 데몬들은 수신한 이질적인 언어의 요청을 vehicle_command.msg (COMMAND_LONG 포맷 기반)라는 단일화된 공용어로 번역하여 Commander에게 던진다.

이 순간부터 Commander는 비행 관리의 최종 판사로 돌변한다. 요청이 아무리 다급하더라도, 기체의 현재 센서 상태(EKF Alignment, GPS Lock 여부 등)를 종합적으로 검토하여 “지금 수락(Accept)할지, 위험하니 거부(Reject)할지“를 냉정하게 판별하는 이벤트 처리 파이프라인의 핵심 노드로 작동하는 것이다.