29.5.4.2. 에어모드(Airmode): 자유 낙하 시에도 기체 제어력을 상실하지 않도록 믹서 포화 검사기를 우회하여 PID 루프를 강제 활성화하는 제어 보장 로직
1. 개요 및 에어모드(Airmode)의 필요성
일반적인 멀티로터의 제어 시스템에서 조종자가 스로틀(Throttle) 스틱을 최하단(0%)으로 내릴 경우, 비행 제어기(Flight Controller)는 모터의 회전을 멈추거나 기본 유휴 속도(Idle Speed)로 최소화한다. 이 상태에서는 전체 추력(Thrust)이 0에 가깝게 설정되기 때문에, 기체를 회전시키기 위한 차동 추력(Torque)을 생성할 여유분이 사라져 비례-적분-미분(PID) 제어 루프가 사실상 무력화된다. 이는 고속으로 비행하다가 자유 낙하(Free Fall)를 하거나, 거꾸로 뒤집힌 상태(Inverted)에서의 체공 시간 연장을 위해 스로틀을 끌 때 기체가 회전 제어력을 상실하여 안정성을 잃는 치명적인 결과를 초래한다.
최신 PX4-Autopilot(v1.14 이상)에서는 극한 기동 환경에서 스로틀이 0이더라도 모터 제어력을 온전히 유지하기 위해 **에어모드(Airmode)**를 제공한다. 본 절에서는 에어모드가 어떻게 믹서(Mixer) 또는 제어 할당기(Control Allocator)의 포화 검사기(Saturation Checker) 로직을 우회하여 PID 루프를 강제 활성화하고 자세 제어력을 보증하는지에 대하여 심층적으로 분석한다.
2. 에어모드 제어 보장 알고리즘 및 아키텍처
에어모드는 본질적으로 스로틀 세트포인트(Thrust Setpoint)와 목표 각속도를 위한 토크 세트포인트(Torque Setpoint) 간의 우선순위(Priority) 역전 및 재배열 메커니즘이다.
2.1 제어 할당기(Control Allocator)와 포화(Saturation) 로직 우회
표준 비행 모드에서는 목표 스로틀이 부족하여 구동기(Actuator) 한계를 벗어나는 토크가 요구될 경우, 믹서는 요구되는 토크를 포화(Clipping)시켜 스로틀 명령을 지킨다. 반면, 에어모드(MC_AIRMODE 파라미터 활성화 시)가 켜진 상태에서는 다음의 알고리즘이 적용된다.
- 아이들(Idle) 보장 루프: 스로틀이 가장 낮은 상태라도, 모터는 사전에 정의된 유휴 스피드 이상으로 회전하도록 예약된다.
- 토크(Torque) 우선 재할당: 스틱에 의한 회전 명령(Roll/Pitch/Yaw)이 발생하면 제어 할당기는 총 추력을 희생하더라도 모터 간의 회전수 차이를 확보하려 시도한다. 만약 한 모터가 유휴 한계(최소치)에 부딪혀 더 이상 속도를 줄일 수 없다면, 제어 할당기는 기체의 전체 스로틀을 일시적으로 상향(Throttle Boost)하여 반대쪽 모터의 속도를 더 올림으로써 원하는 각속도 토크 차이를 기어코 만들어낸다.
이를 통해 PID 루프는 자유낙하 시점에서도 목표 에러(Error)에 대해 100% 대응 출력을 생성해 낼 수 있다.
3. 포화 우회 알고리즘 체계 (Mermaid 설계도)
에어모드 활성화 유무에 따른 제어 할당기(Control Allocator)의 우선순위 결정 로직을 다이어그램으로 나타내면 다음과 같다.
graph TD
A[조종기 스로틀 0% 및 각속도 명령 입력] --> B[PID 제어기]
B --> C(요구 토크 Trq_req 산출)
C --> D{MC_AIRMODE 설정 상태}
D -- 비활성 (일반 상태) --> E[제어 할당기 / 믹서]
E --> F[하한선 0 제약 조건에 의해 <br>음수 방향 토크 Clip]
F --> G[기체 회전 불가 <br> 추락 또는 자세 제어 상실]
D -- 활성 (Airmode) --> H[제어 할당기 내 Desaturation 로직 진입]
H --> I{한쪽 모터가 하한선 Min-Idle 이탈?}
I -- Yes --> J[모든 모터의 스로틀 기준점을 상향 Boost]
I -- No --> K[정상적인 차동 출력 분배]
J --> L[요구 토크 Trq_req 100% 확보]
K --> L
L --> M[자유낙하 중에도 완벽한 기체 제어]
4. 소스 코드 깊은 분석 (Control Allocation 로직)
PX4 v1.14 이후 도입된 Control Allocator 아키텍처 내부의 비포화(Desaturation) 메커니즘을 살펴보면 에어모드의 동작 철학이 명확히 드러난다. src/modules/control_allocator/ControlAllocation/ControlAllocationPseudoInverse.cpp와 유사한 핵심 행렬 분배 루틴에서, 추력과 토크의 한계를 재조정하는 로직은 다음과 같은 개념으로 구현되어 있다.
// 1. 에어모드 설정값 취득
// (0: 비활성, 1: Roll/Pitch 활성화, 2: Roll/Pitch/Yaw 모두 활성화)
int airmode = _param_mc_airmode.get();
// 2. 초기 추력 및 토크를 기하학적 믹스 행렬(Mix Matrix)에 곱하여 모터 명령 산출
matrix::Vector<float, NUM_ACTUATORS> actuator_sp = _mix_matrix * setpoint;
// 3. 포화 검사 (역치 초과 및 미만 판단)
float min_violation = 0.0f;
float max_violation = 0.0f;
for (int i = 0; i < NUM_ACTUATORS; i++) {
if (actuator_sp(i) < _actuator_min(i)) {
min_violation = math::max(min_violation, _actuator_min(i) - actuator_sp(i));
}
// ... 최대치 초과 검사 로직 생략
}
// 4. Airmode 데사추레이션(Desaturation) 우선순위 로직 적용
if (airmode > 0 && min_violation > 0.0f) {
// 하한선(모터 스탑)을 위반하여 토크 생성이 불가능할 경우,
// 전체 스로틀 베이스(Z축 추력)를 최소 단위로 상승시킴 (Throttle Boost)
// 이 오프셋을 통해 모터 간의 차동 스피드(Differential Speed)를 강제로 확보함.
thrust_offset += min_violation;
// 재할당(Re-allocation)
for (int i = 0; i < NUM_ACTUATORS; i++) {
actuator_sp(i) += thrust_offset;
}
} else {
// 에어모드가 꺼져 있다면, 명령 하한선에서 토크를 잘라냄(Clipping)
// 조종 능력을 상실하게 됨.
}
소스 코드에서 보듯, airmode > 0 조건 분기를 통해 모터의 최소 회전 속도 하한(_actuator_min)을 침범하는 목표 하향 출력이 요구될 경우, 해당 값을 무시하고 잘라내는 대신 전체 스로틀의 축 기준을 상향(thrust_offset += min_violation)하는 방식으로 해결한다. 이는 PID 제어기 입장에서 제어 명령이 온전히 수용되는 것과 같은 환형(Illusion)을 시스템에 제공하여 수학적 적분 오차(Integral Error)가 비정상적으로 꼬이는 것을 막는다.
5. Ardupilot 대비 관제 및 알고리즘 차이
기체를 0 스로틀 상태에서도 완전히 통제할 수 있도록 지원하는 에어모드라는 개념은 FPV(First-Person View) 레이싱 커뮤니티에서 출발하였으며, 설계 사상 면에서 두 시스템 간의 차이가 존재한다.
- PX4-Autopilot:
파라미터MC_AIRMODE를 통해 제어 할당(Control Allocation) 단계의 알고리즘을 변경함으로써 우아하게 해결한다. 이 방식은 제어 행렬의 스로틀 이탈(Violation)을 수학적으로 계산하여 정확하게 필요한 만큼의 스로틀 부스트만 인가하는 동적인 구조(Dynamic Desaturation)를 갖추고 있다. 이로 인해 불필요한 고도 상승을 최소화하면서 극단적인 자세 제어를 지원한다. - Ardupilot:
초기에는 단순히 최저 모터 회전 속도를 높게 설정하는 방식(Motor Interlock)을 사용했으나, 최근 버전에서는 Acro/Stabilize 모드에서 스위치나 옵션으로 AirMode를 활성화한다. Ardupilot의 알고리즘 역시 믹서 내에서 Priority를 Torque로 부여하는 방식으로 동작하지만, PX4에 비해 스로틀 하한 점프 로직이MOT_SPIN_MIN및MOT_THST_HOVER추정치와 보다 복잡하게 얽혀 있어, 상대적으로 초기 튜닝에 민감하게 작용하는 편이다.
결론적으로, PX4의 에어모드는 비선형적이고 복잡한 다중 로터 드론체계의 믹서 포화 검사기를 행렬 기반의 데사추레이션 원리로 우회함으로써, 자유 낙하 중인 드론 체계에서도 학술적으로 높은 수준의 제어 강건성(Robustness)을 보장하는 구조로 최적화되어 있다.