28.4.1.1. MAVLink 명령어(`MAV_CMD_DO_SET_MODE`), RC 스위치, Offboard API 입력의 다중화기(Multiplexer)

28.4.1.1. MAVLink 명령어(MAV_CMD_DO_SET_MODE), RC 스위치, Offboard API 입력의 다중화기(Multiplexer)

커맨더(Commander) 내부에는 각기 다른 통신 매체에서 쏟아지는 모드 변경 요청들을 하나로 규합하고 우선순위를 정하는 다중화기(Multiplexer, MUX) 로직이 존재한다. 이 MUX는 시스템의 안전을 위해 각각의 입력이 지니는 권위(Authority)를 다르게 평가한다.

1. MAVLink 명령어 (MAV_CMD_DO_SET_MODE)

지상 관제소(GCS)에서 태블릿이나 마우스 클릭을 통해 모드를 변경할 때 사용하는 표준 프로토콜이다.

  • 흐름: QGroundControl \rightarrow (무선 텔레메트리) \rightarrow mavlink_receiver 데몬 \rightarrow vehicle_command uORB 토픽 발행.
  • 특징: MAV_CMD_DO_SET_MODE 커맨드에는 PX4 고유의 Custom Mode 바이트 배열이 포함되어 있다. 커맨더는 이 메시지를 수신하면 즉각적으로 자신이 가진 상태 머신(State Machine)에 “명령된 모드로 갈 수 있는지” 질의한다. 대역폭이 좁고 지연(Latency)이 있을 수 있으므로, 명령에 대한 수락(ACK) 또는 거부(NACK) 응답을 GCS로 피드백하는 핸드셰이크(Handshake) 과정이 필수적이다.

2. RC 스위치 맵핑 (RC Input)

조종사가 물리적인 조종기 스위치를 토글할 때 발생하는 가장 전통적인 입력이다.

  • 흐름: 수신기(SBUS/CRSF 등) \rightarrow rc_input 데몬 파싱 \rightarrow COM_FLTMODE_X 파라미터 매핑 \rightarrow manual_control_setpoint 토픽 발행.
  • 특징: 조종기의 6채널, 7채널 스위치 값은 그 자체로 의미를 갖지 않는다. 커맨더 내부의 MUX 로직은 사전에 사용자가 세팅해 둔 COM_FLTMODE_1 ~ COM_FLTMODE_6 파라미터를 뒤져 “이 스위치 위치가 Position 모드인지, Mission 모드인지“를 실시간으로 해석(Mapping)한다.
  • 절대적 권위 (Override): 하드웨어 스위치는 가장 즉각적인 응답성을 보장해야 한다. 드론이 GCS의 명령으로 자율 비행(Auto) 중이더라도, 조종사가 RC 스위치를 수동(Manual)으로 넘기는 순간 커맨더의 MUX는 즉시 자율 비행을 강제 탈거하고 제어권을 조종사에게 반환하는 RC 오버라이드(RC Override) 특권을 부여한다.

3. Offboard API (ROS 2 / MAVSDK)

최근 AI 엣지 컴퓨터(Jetson 등) 트렌드에서 가장 중요해진 모드 진입점이다.

  • 흐름: 보조 컴퓨터 \rightarrow uXRCE-DDS 브릿지 또는 MAVLink \rightarrow offboard_control_mode 토픽 및 궤적 셋포인트 10Hz 이상 연속 발행 \rightarrow 커맨더의 Offboard 진입 조건 충족.
  • 특징: 오프보드 모드 요청은 일회성 버튼 클릭(Command)으로 작동하지 않는다. 커맨더의 MUX는 오프보드 스위치가 토글되더라도, 외부 API에서 속도나 위치 셋포인트 스트림이 **충분한 주파수(예: 최소 2Hz 이상)로 안정적으로 들어오고 있는지(Heartbeat 개념)**를 먼저 검증한다. 만약 외부 컴퓨터에서 데이터 스트림이 끊기면, 커맨더는 즉시 연결 단절(Data Link Loss)로 간주하고 오프보드 모드를 거부(Reject)하거나 안전 모드로 강등(Fallback)시킨다.

결과적으로 커맨더의 입력 다중화기(MUX)는 단순히 신호를 취합하는 허브가 아니라, **“누가 가장 기체를 안전하게 살릴 수 있는가?”**라는 우선순위 철학(RC > MAVLink > Offboard)을 바탕으로 트래픽을 통제하는 항공 교통 관제사 역할을 수행한다.