28.1.1.1.2. 다중 제어기(Position, Attitude, Rate) 요구사항에 맞춘 독립적 궤적 생성 메커니즘
PX4-Autopilot의 하위 제어 스택은 단일한 파이프라인이 아닌 캐스케이드(Cascade, 직렬 다중 루프) 제어기 형태로 견고하게 결합되어 있다. 일반적으로 “위치 제어기(Position Controller) \rightarrow 자세 제어기(Attitude Controller) \rightarrow 각속도 제어기(Rate Controller)“의 순서로 데이터가 흘러내려 간다.
비행 모드 구조체(Flight Mode Manager)의 핵심 임무 중 하나는 이 다중 제어기 시스템 중 현재 활성화된 최고 상위 제어기의 입맛에 맞는 정확한 형태의 제어 목표(Setpoint) 포맷을 독립적으로 빚어내는(Generation) 것이다.
1. 계층별 제어 목표(Setpoint)의 종류와 차이
조종사나 관제 컴퓨터에서 “오른쪽으로 진행해라“라는 동일한 형태의 방향성 의도(User Intent)를 내렸다고 가정하자. 현재 활성화된 비행 모드가 무엇이냐에 따라 이 요구사항은 완전히 다른 규격의 수학적 데이터 토픽으로 번역되어 발행되어야 한다.
1.1 trajectory_setpoint.msg (Position / Velocity 모드)
- 활성화 모드:
Mission,Position,Hold,Offboard (Position) - 수신 모듈:
mc_pos_control(멀티로터 위치 제어기) - 생성 메커니즘: 조종기의 롤/피치 스틱 입력은 ’기체를 오른쪽으로 30도 기울여라’가 아니라 **‘10m/s의 이동 속도로 동쪽(X축)으로 일정하게 진행해라’**로 차원이 다르게 파싱된다.
- 물리적 제약 부과: FlightTask 모듈 내부에서는 다이내믹 스플라인 수식을 통해 급격한 스틱 조작에 의한 순간적인 목표 속도의 널뜀(Step input step)을 방지한다. 대신 부드러운 가속도 램프(Ramping) 곡선을 적용하여, 최종적으로 3차원 위치(X, Y, Z), 속도(V_x, V_y, V_z), 가속도(A_x, A_y, A_z) 및 저크(Jerk) 벡터가 빈틈없이 포함된 풀 패키지 형태의 물리적 궤적을 산출하여 발행한다.
1.2 vehicle_attitude_setpoint.msg (Stabilized / Attitude 모드)
- 활성화 모드:
Stabilized,Altitude - 수신 모듈:
mc_att_control(자세 제어기) - 생성 메커니즘: 조종기의 롤/피치 스틱 입력이 이번에는 ’우측으로 기울어진 30도 각도(Roll Angle Target)’라는 **직접적인 3차원 자세 기준점(Attitude Setpoint)**으로 순수하게 파싱된다.
- 특징: 이 모니터링 체계 하에서는 최고 상위 제어기인 위치 제어기(
mc_pos_control) 자체가 내부적으로 대기열 우회(Bypass/Suspended) 상태로 전환된다. Flight Mode Manager는 복잡한 위치 궤적의 램프 스플라인 계산을 생략하고 즉각적으로 쿼터니언(Quaternion) 또는 오일러 각(Euler Angle) 형식의 목표 3차원 자세 벡터를 산출해 중간 계층인 자세 제어기에게 직통 직행으로 하달한다. (시계 비행(VFR) 시 가장 직관적인 인간의 드론 조종 감각과 일치한다.)
1.3 vehicle_rates_setpoint.msg (Acro / Rate 모드)
- 활성화 모드:
Acro(레이싱 드론의 곡예비행 전용 모드),Offboard (Rate) - 수신 모듈:
mc_rate_control(각속도 제어기) - 생성 메커니즘: 조종기 스틱을 치는 양 그 자체가 기체가 기체 축 기준으로 초당 스스로 회전해야 할 **‘우측 롤(Roll) 각속도 200 deg/s’**라는 회전율(Rate Target)로 직역된다.
- 특징: 조이스틱을 놓았을 때 기체가 수평으로 자동 복원되는 안정화(Attitude Stabilization) 억제 로직조차 배제된, 시스템 내에서 가장 파괴적이고 날 것(Raw) 그대로인 제어 목표다. 자세 제어기 루프조차 배제되고 오직 최하위 1차원 PID 루프인 각속도 제어기만 하드웨어에 직결되어 활성화된다.
2. 캐스케이드 구조 내 비행 모드의 스마트 라우팅(Smart Routing)
이를 종합하면, 비행 모드 관리자(flight_mode_manager)는 단순히 고정된 1종의 토픽 데이터형만을 죽어라 뱉어내는 수동적인 단방향 발사관이 아님을 알 수 있다.
비행 모드 매니저는 기체 내부에 존재하는 다중 제어기 층들의 계층적 의존성 사슬을 정확히 포괄 이해하고 있으며, 사용자의 모드 선택에 따라 어느 제어기(Controller)의 어느 높이 입구(Input Port)에 어떠한 객체 형식 파라미터(Setpoints)를 다이렉트로 꽂아 주어야 가장 안전하고 빠른 반응을 도출해 낼 수 있을지 동적으로 판단하는 스마트 라우터(Router) 역할을 비동기적으로 수행하고 있는 것이다.
graph TD
%% 외부 및 비행 모드 데이터 인입 영역
Input(조종기 파서 / MAVLink 핸들러) --> FM((Flight Mode \n Manager))
%% 제어 계층 토픽 발행 분기 (라우팅)
FM -- "만약 현재 Position 모드라면" --> T_SET[ trajectory_setpoint \n (XYZ 위치, 속도 벡터) ]
FM -- "만약 현재 Stabilized 모드라면" --> A_SET[ vehicle_attitude_setpoint \n (Roll/Pitch/Yaw 각 자세) ]
FM -- "만약 현재 Acro 모드라면" --> R_SET[ vehicle_rates_setpoint \n (deg/s 순수 각속도) ]
%% 하위 제어기 캐스케이드(Cascade) 사슬 병렬 연결
subgraph Controller Cascade Pipeline
T_SET --> P_CTRL[위치 제어 루프 \n mc_pos_control]
P_CTRL --> |위치 오차 보상용 내부 자세 제어 목표 동적 재작성| A_SET2(vehicle_attitude_setpoint)
A_SET2 --> A_CTRL[자세 제어 루프 \n mc_att_control]
A_SET --> A_CTRL
A_CTRL --> |자세 오차 보상용 내부 각속도 제어 목표 동적 변환| R_SET2(vehicle_rates_setpoint)
R_SET2 --> R_CTRL[각속도 제어 루프 \n mc_rate_control]
R_SET --> R_CTRL
R_CTRL --> |최종 PWM 믹싱 제어량| OUT[Motor & Actuator Out]
end
도식 구조에서 보증하듯, 최고 상위 계층인 Position 모드가 켜져 있을 때는 하강하는 폭포수(Cascade) 밸브처럼 최상위 궤적 목표(trajectory_setpoint)만 주입해도 내부적으로 C++ 위치 제어기가 알아서 다시 하위 계층인 ’자세 제어 목표’와 ‘각속도 제어 목표’ 토픽 메시지를 계단식으로 파생 및 재생산하여 아랫단으로 자동 인계해 준다.
반면 역으로 Acro 모드 진입 명령이 떨어졌을 때, 비행 모드 시스템은 자신과 무관하게 되어버린 거추장스러운 상단의 위치, 자세 제어 모듈들을 모조리 무시(Bypass Isolation)한 채 가장 짧고 직접적인 다이렉트 전파선으로 밑바닥의 각속도 제어 기능 입구에 vehicle_rates_setpoint 토픽을 밀어 넣는 우회 고속도로(Routing Path)를 즉각적으로 재창출해 낸다.
이는 PX4가 레이싱 드론 수준의 어떠한 극단적인 항공 역학적 곡예 상황에서도 NuttX CPU 자원 점유의 낭비를 최소화하고 파이프된 다중 제어 시스템을 가장 민첩하게 스케줄링(Scheduling)하기 위해 지난 10년간 갈고닦아 제련해 온, 기능성이 극한에 달한 다형성(Polymorphism) 아키텍처 디자인의 산물이라 할 수 있다.