28.6.3.1. VtolAttitudeControl 모듈 내 멀티로터 제어 출력과 고정익 제어 출력의 가중치 믹싱(Weight Mixing) 알고리즘
수직이착륙기(VTOL) 비행 제어의 가장 큰 기술적 난제는 제자리 비행을 하는 멀티로터 모드(MC)에서 날개의 양력으로 비행하는 고정익 모드(FW)로 넘어가는 수 초간의 ‘천이(Transition)’ 구간에 있다. 이 구간에서는 멀티로터의 양력과 고정익의 양력이 기형적으로 공존하며 기체의 동역학 모델이 시시각각 비선형적으로 변한다.
PX4-Autopilot은 이 천이 구간에서의 불안정성을 제어하기 위해 VtolAttitudeControl 모듈 내부에 멀티로터 제어 출력과 고정익 제어 출력의 가중치 믹싱(Weight Mixing) 알고리즘을 구현해 두었다. 본 절에서는 두 이질적인 제어기의 출력이 어떤 수학적 비율로 섞여 모터와 서보로 전달되는지, 그 소스코드 레벨의 블렌딩(Blending) 메커니즘을 심도 있게 분석한다.
1. 액추에이터 제어(Actuator Controls) 메시지의 충돌과 중재
PX4 시스템 구조상 mc_att_control(멀티로터 자세 제어기)과 fw_att_control(고정익 자세 제어기)은 기체가 부팅된 순간부터 백그라운드에서 동시에 병렬적으로 구동된다.
각 제어기는 현재 센서로 들어온 기체의 기울기 오차를 0으로 만들기 위해 각자 자신만의 방식(MC는 모터 RPM 차동, FW는 서보 모터 각도 변경)으로 제어 출력값인 actuator_controls_0, actuator_controls_1 uORB 메시지를 맹렬히 발행한다.
만약 두 출력이 아무런 중재 없이 곧바로 믹서(Mixer)로 들어가면 기체는 말 그대로 미쳐 날뛰게 된다. 여기서 절대 권력을 가진 중재자로 등장하는 것이 바로 vtol_att_control 프로세스다. 이 모듈은 두 제어기의 출력을 가로채어, 아래의 가중치 변수에 따라 최종 믹싱된 단일 출력을 생성한다.
2. 가중치 변수: weight_mc 와 weight_fw
믹싱 수학의 핵심은 0.0에서 1.0 사이를 오가는 두 개의 플로팅 포인트(Floating Point) 가중치 변수에 있다.
weight_mc(멀티로터 가중치): 호버링 모터(리프트 로터)에 입력될 제어 신호의 비율.weight_fw(고정익 가중치): 푸셔(Pusher) 모터 및 에일러론/엘리베이터 등 고정익 조종면(Control Surface)에 입력될 제어 신호의 비율.
2.1 모드별 가중치 할당의 원칙
논리적인 비행 모드에 따라 이 가중치 값은 명확하게 고정되거나 유동적으로 변한다.
- 순수 MC 모드:
weight_mc = 1.0,weight_fw = 0.0
- 멀티로터 제어기가 100% 개입. 고정익의 서보 모터는 중립(Neutral)으로 고정.
- 순수 FW 모드:
weight_mc = 0.0,weight_fw = 1.0
- 고정익 TECS 제어기가 100% 개입. 호버링 모터는 완전 정지(Turned off).
- 천이(Transition) 모드:
0.0 < weight_mc < 1.0,0.0 < weight_fw < 1.0
- 시간의 흐름과 대기속도(Airspeed)의 증가량에 따라 두 가중치 비율이 실시간으로 교차 계산(Cross-fade)된다.
3. 천이 과정(Front Transition)의 수학적 믹싱 로직
전방 천이(Front Transition, MC \rightarrow FW) 명령이 하달되면, vtol_att_control은 기체 유형(Standard, Tiltrotor, Tailsitter)의 자식 클래스 가상 함수를 통해 다음과 같은 믹싱 라이프사이클을 전개한다.
3.1 1단계: 푸셔 가동 및 속도 확보 (가속 페이즈)
호버링 상태에서 푸셔(Pusher) 모터가 최대로 가동되며 기체를 앞으로 밀어붙인다. 아직 날개에 양력이 생기지 않았으므로 기회를 띄우는 힘은 100% 호버 모터가 감당해야 한다.
weight_mc = 1.0(유지)weight_fw는 천이 진입 직후에는 0에 가깝지만, 대기속도(indicated_airspeed)가 점진적으로 증가함에 따라 조종면 효율이 살아나는 것에 비례하여 서서히1.0을 향해 선형적(Linear) 또는 지수적(Exponential)으로 증가시킨다.- 수식 맵핑: weight\_fw = f(V_{airspeed} / V_{transition})
3.2 2단계: 양력 발생에 따른 호버 모터 디스카운트 (블렌딩 페이즈)
기체의 속도가 천이 완료 대기속도(Transition Airspeed, VT_ARSP_TRANS)의 약 50~70% 지점을 넘어서면, 고정익 날개가 기체 무게의 상당 부분을 위로 들어 올리기 시작한다.
이 시점부터는 멀티로터의 호버 출력 가중치(weight_mc)를 점진적으로 줄여야 한다. 줄이지 않으면 날개의 양력 + 호버 모터의 양력이 합쳐져 기체가 급격하게 고도를 뚫고 치솟는 풍선 효과(Ballooning Effect)가 발생한다.
weight_mc는 타임아웃 타이머(Timer) 또는 남은 대기속도 오차에 근거하여 1.0에서 0.0으로 서서히 감소(Ramp down)한다.- 고도 보정 믹싱: 이때 피치(Pitch) 서보의 믹싱 가중치(
weight_fw_pitch)와 호버 스로틀(mc_throttle) 간의 강한 상호 결합 수식이 작용한다. 기수를 들면(Pitch up) 양력이 급증하여 호버 스로틀을 더 빨리 뺄 수 있으므로, 제어기는 이 두 파라미터 간의 트레이드오프(Trade-off) 비율을 지속적으로 연산한다.
3.3 3단계: 천이 완료 (종료 페이즈)
대기속도가 VT_ARSP_TRANS를 확고히 돌파하면 제어기는 천이 종료를 선언한다.
호버 모터 가중치(weight_mc)는 완전히 0.0으로 스냅 컷(Snap cut)되며 채널이 차단되고, 기체는 완전한 FW 모드(weight_fw = 1.0) 상태 머신으로 진입한다.
4. 믹서 파일(Mixer File)과의 연동 아키텍처
위에서 계산된 플로팅 포인트 가중치 결과값은 궁극적으로 어디로 전달될까? PX4 아키텍처의 맨 밑바닥에 있는 드라이버 단의 .mix 파일 또는 최신 Control Allocation 버스 아키텍처에서 그 진가를 발휘한다.
vtol_att_control 모듈은 믹서 엔진으로 던지기 직전, actuator_controls_0(MC용) 메시지 값에 weight_mc를 곱하고, actuator_controls_1(FW용) 메시지 값에 weight_fw를 곱하여 최종적인 통합 포트 명령을 전송한다.
// C++ 의사 코드 (믹싱 로직의 개요)
final_actuators[ROLL] = (mc_roll_out * weight_mc) + (fw_roll_out * weight_fw);
final_actuators[PITCH] = (mc_pitch_out * weight_mc) + (fw_pitch_out * weight_fw);
// 호버 스로틀은 철저히 MC 가중치에만 의존
final_actuators[THROTTLE_HOVER] = mc_throttle_out * weight_mc;
5. ArduPilot 대비 믹싱 전략의 특성
- ArduPilot (QuadPlane): ArduPilot은 메인 루프인 수평 비행 제어기(Plane) 안에서, 대기속도가 일정 수준 이하로 떨어질 때(Q_ASSIST_SPEED 등) 보조적으로 콥터 제어기를 ’구원 투수’처럼 끌어다 쓰는 하향식 방어(Bottom-up Assistance) 방식의 블렌딩을 띠는 경향이 짙다.
- PX4 (가중치 토글 구조): PX4는 철저히 두 개의 독립된 제어기 인스턴스를 평등하게 세워두고, 위상 반전 코사인 곡선(Cosine blending)이나 선형 램프(Linear ramp) 함수를 사용하여 두 출력을 라디오 주파수 섞듯(Fader) 크로스 믹싱(Cross-mixing)하는 매우 유동적인 유체 역학적(Fluid) 믹싱 파이프라인 구조를 갖고 있다. 이는 틸트로터처럼 각도가 0~90도로 서서히 변하며 믹싱 지수도 완전히 비례하게 연판해야 하는 고난이도 하드웨어를 다룰 때 훨씬 수학적 직관성을 제공한다.