28.5.2.2. Offboard 모드에서의 플래그 다이렉트 주입(Direct Injection) 및 제어 권한 탈취 메커니즘
비행 로봇 연구 및 상용 개발 영역에서 자율 비행(Autonomous Flight)을 구현할 때 가장 애용되는 모드가 바로 오프보드(Offboard) 모드이다. 오프보드 모드란 픽스호크 내부의 항법 알고리즘(Navigator)이나 조종사의 조종기(RC) 입력을 완전히 차단하고, MAVLink나 ROS2 (uXRCE-DDS)를 통해 연결된 외부 컴패니언 컴퓨터(Raspberry Pi, Jetson Nano 등)에게 비행의 전권을 위임하는 상태를 말한다.
이 오프보드 모드의 강력함은 단순히 “어디로 가라“는 좌표 명령을 내리는 것을 넘어, 앞 절에서 다룬 제어 계층의 각 플래그를 정밀하게 켜고 끄면서 특정 계층의 제어 권한만을 부분적, 혹은 전체적으로 탈취(Override) 할 수 있다는 데 있다. 본 절에서는 이러한 다이렉트 주입 메커니즘을 심화 분석한다.
1. 개요: Offboard 모드의 제어 대상(setpoint_type) 결정
외부 컴퓨터에서 PX4로 명령을 보낼 때, ROS 2 기준 /fmu/in/trajectory_setpoint 토픽이나 /fmu/in/vehicle_attitude_setpoint 토픽을 주로 퍼블리싱(Publishing)한다. 커맨더(Commander) 모듈은 이 외부 메시지를 수신하면, 단순히 값만 넘기는 것이 아니라 오프보드 제어 모드라는 상태를 새롭게 구성하게 된다.
이 과정에서 핵심 역할을 하는 것이 MAVLink의 SET_POSITION_TARGET_LOCAL_NED 메시지 등에 포함된 타입 마스크(Type Mask) 이다. PX4는 수신된 타입 마스크를 해석하여 외부 명령자가 어느 단계의 컴포넌트(위치, 속도, 가속도, 자세 등)를 제어하고 싶은지를 알아채고, 그에 맞춰 vehicle_control_mode 의 플래그 비트를 강제로 덮어씌운다(Inject).
2. 플래그 다이렉트 주입(Direct Injection) 조합 사례
외부 컴퓨터가 퍼블리싱하는 데이터 타입에 따라 커맨더가 어떻게 플래그를 변조하는지 주요 시나리오를 통해 확인해 본다.
2.1 위치 셋포인트 제어 (Position Setpoint Control)
- 외부 명령: “현재 위치에서 북쪽으로 5m, 동쪽으로 5m 좌표로 이동하라.”
- 플래그 주입 상태:
flag_control_position_enabled = trueflag_control_velocity_enabled = trueflag_control_attitude_enabled = trueflag_control_rates_enabled = true
- 메커니즘: 오프보드가 지시한 좌표점(Position Setpoint)을 수신한
mc_pos_control은 내부적으로 P 제어기를 통해 스스로 속도와 가속도를 생성해 낸다. 일반적인 Auto(Mission) 모드와 완전히 동일한 플래그 체인을 유지하되, 목표(Target) 데이터의 출처만 외부 노드로 바뀐 가장 보편적이고 안전한 권한 탈취 방식이다.
2.2 순수 속도 셋포인트 제어 (Velocity-Only Control)
- 외부 명령: (위치 좌표 상관없이) “현재 기수 방향으로 2m/s 속도로 전진하라.”
- 플래그 주입 상태:
flag_control_position_enabled = false(차단됨)flag_control_velocity_enabled = trueflag_control_attitude_enabled = true…
- 메커니즘: 위치 제어기 P 루프가 스킵(Bypass)된다. 외부에서 주입된 2m/s 라는 속도값이
mc_pos_control의 두 번째 계층인 속도 제어기(Velocity Controller)의 목표값으로 바로 꽂힌다(Direct Injection). 비전 센서 등을 이용해 장애물을 회피할 때, 절대 좌표 변경 없이 즉각적인 스피드 벡터만 조작하는 데 매우 효과적이다.
2.3 오프보드 자세 제어 (Attitude/Rates Control) - ‘진정한 권한 탈취’
- 외부 명령: “기체의 피치(Pitch)를 20도로 영구 고정하라” 또는 “초당 30도씩 롤링(Rolling)하라”
- 플래그 주입 상태:
flag_control_position_enabled = falseflag_control_velocity_enabled = falseflag_control_attitude_enabled = true(또는false)flag_control_rates_enabled = true
- 메커니즘: 심화 학습 인공지능(RL)이나 고도화된 비선형 제어 로직을 컴패니언 컴퓨터에 올린 연구 팀들이 픽스호크의 위치/속도 제어를 완전히 불신(혹은 불필요하게 여김)할 때 사용한다. PX4의
mc_pos_control은 통째로 유휴 상태가 되며 기체는 오로지 지상/외부 컴퓨터가 지시하는 쿼터니언(Quaternion) 각도나 각속도 벡터에 의해서만 강제 모션(Forced Motion)을 수행하게 된다.
3. 오프보드 손실(Offboard Loss) 시의 페일세이프 구조
외부 컴퓨터가 이처럼 광범위한 제어 권한을 탈취하게 될 때는 통신 두절(Link Loss)이라는 거대한 리스크가 동반된다. ROS2 DDS 시스템 다운이나 시리얼 포트 단선으로 오프보드 셋포인트가 단 0.5초라도 멈추면 기체는 추락할 수 있다.
이러한 위기를 관리하기 위해 PX4는 오프보드 모드 전용의 삼중 방어선을 제공한다.
- 셋포인트 타임아웃 킥(Timeout Kick):
COM_OF_LOSS_T파라미터(기본 0.5초) 내에 새로운 제어 메시지가 갱신되지 않으면 커맨더 모듈은 즉각 오프보드 모드를 강제 종료시킨다. - 자동 플래그 롤백 (Auto Rollback): 오프보드 모드가 해제되면 픽스호크는 사전에 설정된 페일세이프(Failsafe) 전략 파라미터 (예:
COM_OBL_RC_ACT등)를 참작한다. - Hold 모드 전환 제어: RC가 연결되어 있고 GPS가 살아있다면, 커맨더는 방금 전까지 외부 컴퓨터가 갖고 있던 모든 제어 권한 플래그 비트를 강제로 압수하고 원래 픽스호크의 자체 위치 유지 로직인
Hold Mode의 플래그 조합
(flag_control_position_enabled = true등)으로 즉시 원복(Rollback)시킴으로써, 기체가 자위를 되찾고 제자리에 정밀 정지(Braking & Hold)하도록 생존을 보장한다.
4. ArduPilot과의 메커니즘 비교 (Guided 모드)
- PX4 (Offboard): 비행 모드 자체가 “Offboard” 하나로 통합되어 있으며, 외부 메시지의 타입 버퍼 마스크(Type Mask)를 읽어 실시간으로 내부 uORB 플래그 생태계를 껐다 켰다 자유자재로 해체/조립하는 극도의 모듈러형 탈취 방식이다.
- ArduPilot (Guided): 외부 컴퓨터 제어의 진입점 역할을
mode_guided.cpp가 맡는다. 사용자가 위치를 보내면pos_control을 호출하고, 속도를 보내면 속도 제어 함수를, 헤딩을 보내면 자세 믹싱 함수를 수동 분기(Switch/Case)하여 가동시키는 구조이다. PX4에 비해 특정 계층(예: Position은 ArduPilot이 하고 Attitude는 Companion이 하는 등)을 넘나드는 하이브리드 제어 설정의 자유도가 상대적으로 제한적이다.