29.5.4.1. Acro Trainer 모드: 자세 제어기가 백그라운드에서 동작하며, 설정된 피치/롤 각도 한계를 초과할 때 각속도 명령을 오버라이드(Override)하는 하이브리드 제어 알고리즘
1. 개요 및 Acro Trainer 모드의 목적
순수한 아크로(Acro) 모드는 조종기의 조작량을 기체의 목표 회전 각속도(Angular Rate Setpoint)로 직접 매핑하여 피드포워드(Feedforward) 및 비례-적분-미분(PID) 루프를 통과시키는 모드이다. 그러나 이 모드는 조종 스틱을 중앙에 놓더라도 기체가 수평으로 자동 복귀(Auto-leveling)하지 않으며, 현재 기울어진 자세를 그대로 유지하려는 특성이 있어 초보 비행자에게는 기체 제어 상실(Loss of Control)의 위험이 매우 높다.
최신 PX4-Autopilot(v1.14 및 v1.15 기준)에서는 초보 조종사가 아크로 기동의 감각을 익히면서도 치명적인 추락을 방지할 수 있도록 돕는 **Acro Trainer 모드(아크로 트레이너 모드)**를 제공한다. 본 절에서는 Acro Trainer 모드에서 자세 제어기(Attitude Controller)가 백그라운드에서 어떻게 동작하며, 설정된 피치(Pitch) 및 롤(Roll)의 물리적 한계를 초과할 위험이 감지되었을 때 각속도 명령을 어떻게 오버라이드(Override)하는지 그 하이브리드(Hybrid) 제어 구조를 소스 코드 수준에서 분석한다.
2. 하이브리드 제어 알고리즘 아키텍처
Acro Trainer 모드는 단일 목적의 제어기를 거치는 일반적인 비행 모드와 달리, 두 가지 제어 계층(자세 제어 루프와 각속도 제어 루프)이 동시에 연산되는 독특한 구조를 지닌다.
- 전경(Foreground) 제어 (각속도 제어): 조종자의 스틱 입력은 변환(Expo 및 SuperExpo 곡선 적용)을 거쳐 목표 각속도로 산출된다. 기체의 기울기가 안전 한계 내에 있을 경우, 이 목표 각속도는 직접 Rate Controller로 전달되어 순수 Acro 모드와 동일한 조작감을 제공한다.
- 배경(Background) 제어 (자세 제한 제어): 동시에, PX4 모듈은 EKF(Extended Kalman Filter)로부터 현재의 오일러 각도(Euler Angles)를 지속적으로 추적한다. 파라미터로 설정된 피치와 롤의 최대 허용 각도(Max Angle)에 기체의 현재 자세가 근접하게 되면, 배경에서 대기하던 자세 제어기(Attitude Controller) 형태의 가상 복원력(Virtual Restoring Force)이 개방된다.
2.1 제어권 오버라이드(Override) 동역학
기체가 설정된 각도 한계를 넘어서려 할 때, 제어 시스템은 조종자의 스틱 입력을 무시하고 기체가 해당 각도 한계 내로 다시 들어오도록 반대 방향의 억제 각속도를 주입한다. 이를 수학적으로 표현하면 다음과 같다.
\omega_{cmd} = \begin{cases} \omega_{stick} & \text{if } \vert \theta \vert \leq \theta_{limit} \text{ and } \vert \phi \vert \leq \phi_{limit} \\ \omega_{override} & \text{otherwise} \end{cases}
여기서 \omega_{cmd}는 최종 각속도 제어기로 전달되는 명령, \theta_{limit}와 \phi_{limit}는 각각 설정된 피치 및 롤의 한계 각도를 나타낸다.
3. 알고리즘 제어 흐름 (Mermaid 설계도)
Acro Trainer 알고리즘이 조종기 입력과 기체의 현재 자세 사이에서 어떻게 조건을 판단하고 제어값을 병합하는지는 아래 다이어그램과 같다.
graph TD
A[조종자의 RC 각속도 명령 입력] --> B(Acro Setpoint Generation)
C[EKF 현재 기체 자세: Roll / Pitch] --> D{자세 한계 초과 위험 감지?}
D -- 한계 이내 (안전 영역) --> E[기본 각속도 제어루프 통과]
D -- 한계 도달 또는 초과 --> F[자세 복원용 가상 각속도 산출]
F --> G(오버라이드 로직)
B --> G
G --> H[최종 Target Rate Setpoint]
E --> H
H --> I[MC Rate Controller]
I --> J[모터 믹서]
이 알고리즘은 본질적으로 다중 모달 방식(Multi-modal)을 취하고 있어, 스틱의 입력 정도와 현재 기체의 한계점 도달 여부라는 두 가지 차원에서 상태 간의 부드러운 전환(Bumpless Transfer)을 구현한다.
4. 소스 코드 깊은 분석 (FlightTaskManualAcro)
PX4 소스 코드 내에서 아크로 트레이너 모드의 로직은 주로 src/modules/flight_mode_manager/tasks/ManualAcro/FlightTaskManualAcro.cpp와 수동 제어 생성기에서 처리된다. 특히 피드포워드와 자세 한계를 혼합하는 메커니즘은 다음과 같은 형태로 구현되어 있다.
// 1. 센서로부터 현재의 Roll/Pitch 값을 취득하고, 한계 파라미터를 가져옴
float roll_current = _yaw_pitch_roll(2);
float pitch_current = _yaw_pitch_roll(1);
// 2. 관리자가 설정한 Acro Trainer 한계 각도 (예: 45도 = 0.78 rad)
float max_angle = _param_mc_acro_trainer_max_angle.get();
// 3. 사용자의 순수 스틱 각속도 명령
matrix::Vector3f rate_sp = generate_acro_setpoint(_sticks.getPosition());
// 4. 오버라이드 평가를 위한 자세 오류(Attitude Error) 산출
// 현재 자세가 한계를 초과하려 할 때 강건한 보완 각속도 산출 (단순화된 예시 코드)
if (fabsf(roll_current) > max_angle) {
// 임계값을 초과한 경우 오류에 비례하는 보정 각속도 계산 (P Gain 적용)
float restore_rate = (max_angle * sign(roll_current) - roll_current) * _attitude_p_gain;
// 조종자가 한계를 넘어서는 방향으로 회전하려 한다면 명령 오버라이드
if (sign(rate_sp(0)) == sign(roll_current)) {
rate_sp(0) = restore_rate;
}
}
소스 코드에서 관찰할 수 있듯, 조종자의 입력 신호(rate_sp)가 기체의 롤 현 상태(roll_current)를 한계 지점을 초과하는 방향으로 더 악화시키는 경우에 한해, 보호 루프가 작동하여 목표 각속도를 한계 각도로 유지시키기 위한 억제값(restore_rate)으로 전환(Override)시킨다. 조종자가 스틱을 반대 방향(안전 영역)으로 움직일 경우에는 즉시 제어권이 다시 조종자에게 주어진다.
5. Ardupilot 대비 관제 및 알고리즘 차이
Acro Trainer 기능에 있어 PX4-Autopilot과 Ardupilot 모두 사용자 보호 원칙은 동일하지만 파라미터 구성과 안전 철학 구현에서 뚜렷한 차이가 존재한다.
- PX4-Autopilot:
파라미터 기반으로 각도 한계를 매우 세밀하게 설정할 수 있다. 오버라이드 시 자세 제어기가 백그라운드에서 직접 각속도의 차감 및 억제 값을 연속적인 곡선형 추이로 생성해낸다. 이는 제어 전환 과정에서 기체가 튕기는(Jerking) 현상을 방지하는 데 최적화되어 있다. - Ardupilot:
Ardupilot은ACRO_TRAINER라는 파라미터를 통해 단계별 모드를 제공한다 (0 = 비활성, 1 = 일반적인 자동 수평 복귀 수준, 2 = 최대 각도만 제한). Ardupilot의 Leveling 비중 조절은 조종 스틱 중앙 복귀 시 자동 수평 모드(Stabilize) 특성을 더 강하게 부여하는 직관적인 감각에 맞추어진 반면, PX4는 현재 상태 궤적과 목표 궤적 간의 ‘오류 한계 제한(Error Limit Clamping)’ 관점에서 제어 이론적으로 더 명확한 분리를 보여준다.
결과적으로 PX4의 Acro Trainer 모드는 비선형 고도 제어 및 고난도 곡예비행 연구에 있어, 기체의 물리적 추락을 막는 최소한의 마지노선(Safety Net)을 구현하기 위한 하이브리드 제어 알고리즘의 좋은 예시로 평가받는다.