30.3.3.1. 이륙(Takeoff): 임계 피치각(Critical Pitch Angle) 제한 및 점근적(Asymptotic) 고도 도달 제어

30.3.3.1. 이륙(Takeoff): 임계 피치각(Critical Pitch Angle) 제한 및 점근적(Asymptotic) 고도 도달 제어

무인항공기의 자동 비행 시퀀스에서 이륙(Takeoff)은 단순한 수직 상승(Vertical Climb)을 넘어, 지면 효과(Ground Effect) 탈출과 점진적인 제어권(Control Authority) 확립을 동반하는 가장 동역학적으로 불안정한 마이크로 트랜지션(Micro-transition) 구간이다. PX4-Autopilot의 내비게이터(Navigator) 및 하위 위치 제어기(Position Controller)는 단순히 목표 고도로 이동하라는 명령(MAV_CMD_NAV_TAKEOFF)을 내리는 것을 넘어, 기체가 뒤집히거나(Flip) 불안정하게 솟구치지 않도록 임계 피치각(Critical Pitch Angle)을 억제하고 고도 목표점에 점근적(Asymptotic)으로 수렴하는 진보된 제어 로직을 구현하고 있다.

1. 임계 피치각 제한 (Critical Pitch Angle Limitation)

기체가 지면에 접지해 코깅 토크(Cogging Torque)를 이기고 막 이륙하려는 순간(Liftoff)에는 모든 멀티로터 모터에 완벽하게 균등한 양력이 발생하지 않는다. 센서의 노이즈나 바람의 영향으로 위치 제어기(Position Controller)가 XY축의 미세한 위치 오차를 감지하면, 이를 즉각적으로 수평 방향의 속도 에러로 간주하여 강한 피치(Pitch) 또는 롤(Roll) 명령을 내릴 위험이 존재한다.
스키드(Skid) 형태의 랜딩 기어가 땅에 반쯤 닿아 있는 상태에서 강한 피치각 요구나 요(Yaw) 모멘트가 들어가면 기체는 축을 중심으로 전복(Rollover)된다.

1.1 PX4의 제어기 내부 대응책 (Takeoff 상태 머신)

이를 방지하기 위해 PX4는 이륙 고도의 일정 수준을 달성할 때까지 자세 제어기(Attitude Controller)로 하달되는 목표 자세각(vehicle_attitude_setpoint_s)의 피치/롤 각도를 엄격하게 제한(Clipping)한다.

  • MPC_TKO_PITCH 파라미터: 고정익의 이륙 투구각(Pitch-up angle)을 제한하는 데 쓰이거나 멀티로터의 이륙 초반에 제한 각도로 작용한다.
  • MPC_TILTMAX_AIR vs MPC_TILTMAX_LND: PX4의 멀티콥터 위치 제어기(FlightTaskAuto)는 기체의 상태가 지면 접근 상태(landed \rightarrow ground_contact \rightarrow maybe_fell)에서 완전한 공중(In-air)으로 전환되기 전까지 평소보다 매우 보수적인 틸트 한계(MPC_TILTMAX_LND)를 적용함으로써 기체가 과도하게 누워서 이륙하는 현상을 억제한다.

2. 점근적(Asymptotic) 고도 도달 제어

이륙 명령은 통상적으로 고도 2.5m처럼 절대적인 단일 스칼라(Scalar) 타겟값을 지정한다. 하지만 기체가 정지 상태에서 목표 고도로 강한 스텝 입력(Step Input)을 주면, 목표 고도를 초과하는 오버슈트(Overshoot)가 발생하기 쉽다. PX4는 매끄러운 이륙 궤적을 위해 속도 기반의 저크 제한(Jerk-limited) 이륙 프로파일을 생성한다.

동역학적으로 시스템은 다음과 같은 한계를 동시에 지켜야 한다:

  1. 수직 상승 최대 속도 (MPC_Z_VEL_MAX_UP)
  2. 이륙 진폭 가속도 제한 (MPC_ACC_UP_MAX)
  3. 가속도의 미분형인 저크(Jerk) 제한 (MPC_JERK_MAX)

PX4의 FlightTaskAutoMapper 내에서는 이륙 속도를 점근적으로 감소시키기 위한 캐스케이드 P 제어기(Cascade P Controller)가 작동한다.
목표 고도(h_{target})와 현재 기체의 고도(h_{current}) 사이의 오차 에러 e_z = h_{target} - h_{current} 가 주어지면, 수직 속도 목표값 V_{z, setpoint}는 다음과 같이 선형적 비례로 수렴한다.

V_{z, setpoint} = K_{p, z} \times e_z

이 때 V_{z, setpoint}MPC_Z_VEL_MAX_UP을 넘지 않도록 상단 클리핑이 적용되며, e_z가 0에 가까워질수록(즉, 목표 고도에 다가갈수록) 상승 속도는 0에 점근적(Asymptotically)으로 감소하여 완벽히 부드러운 호버링(Hovering) 상태로 전이(Transition)하게 된다.

30.3.3.1.3. 시스템 제어 루프의 기하학적 블록도 (Mermaid)

다음은 이륙(Takeoff) 명령 진행 시 피치각 클리핑과 수직 점근 제어가 적용되는 제어 루프를 아키텍처 관점에서 모델링한 다이어그램이다.

graph TD
    A[MAVLink MAV_CMD_NAV_TAKEOFF] --> B[mission_block.cpp]
    B --> C{Determine Target Altitude}
    C --> D[flight_task_auto.cpp]
    
    D --> E[Calculate Altitude Error: e_z = Target - Current]
    E --> F[Generate Z_Velocity Setpoint via P-Gain]
    
    D --> G{Landed / Liftoff State Machine}
    G -- "On Ground / Near Ground" --> H[Override: Reduce Maximum Tilt Angle]
    G -- "Fully Airborne" --> I[Restore Normal MPC_TILTMAX_AIR]
    
    H --> J[Attitude Controller]
    I --> J
    F --> K{Jerk / Accel Limiter}
    K --> L[Position Controller Output]
    
    L --> M[Mixer / Motors]
    J --> M

30.3.3.1.4. Ardupilot 대비 PX4의 고유한 접근법

Ardupilot의 수직 이륙 로직은 TAKEOFF 비행 모드에서 직접적으로 내부 상태 머신 타이머를 할당하여 THR_MIN을 초기에 적용하고 일정 시간 후에 PID에 개입시키는 형태(모드별 하드코딩)인 경우가 빈번했다.

반면에 PX4-Autopilot은 Mission 모드든 로컬 CLI 명령이든 상관없이 모든 이륙 명령이 결국 FlightTaskAuto 또는 FlightTaskTakeoff라는 순수 공기역학/운동학 제어 추상 계층을 지나가게끔 구조화되어 있다. 이로 인해 앞서 기술한 “점근적 고도 수렴(Asymptotic Convergence)“이나 “지면 근접 시 틸트 한계 축소“와 같은 안전 기하학 제어(Safety Geometric Control)가, MAVLink 이륙인지 ROS2(Offboard) 이륙인지 명령의 출처(Source)를 가리지 않고 글로벌하게 동일한 물리 법칙으로서 적용된다는 아키텍처적 우수성을 갖는다.

30.3.3.1.5. 요약 및 관제 관점의 시사점

자율 에이전트(Autonomous Agent) 로직을 개발하거나 독자적인 GCS를 구축할 때, 이륙 명령어(MAV_CMD_NAV_TAKEOFF)를 주면 기체가 로켓처럼 수직으로 급상승 하다가 목표 고도에서 거칠게 브레이크를 걸 것이라 착각하기 쉽다. 그러나 PX4의 기하학적/운동학적 내부 모델 위에서는 조종사가 스로틀 스틱을 최대한 부드럽게 밀어올리는 것과 동일한 수준의 미분형 저크(Jerk) 제한과 피치각 페널티가 동적으로 덧씌워진다. 이러한 비선형 필터링과 클리핑 메커니즘을 숙지하면, 기체가 이륙 과정에서 흔들리거나 바람을 맞아 밀려날 때 GCS 화면상에서 관측되는 순간적인 “느린 가속(Sluggish Acceleration)” 현상이 시스템 버그가 아닌 의도된 기계역학적 보호 조치(Mathematical Safeguard)임을 명확히 이해할 수 있다.