28.1.1.1. Estimator-Controller 분리 아키텍처에서의 중간 계층 역할

28.1.1.1. Estimator-Controller 분리 아키텍처에서의 중간 계층 역할

앞선 단원 구조에서 확인했듯, 최신 PX4-Autopilot 비행 제어 스택에서 비행 모드(Flight Mode Manager) 모듈은 단순히 스위치를 On/Off 하는 릴레이 계층이 아니라, 상태 추정기(Estimator)와 제어기(Controller)를 철저히 분리(Decoupling)시켜 주는 핵심적인 중간 브로커(Middle Layer Broker) 아키텍처를 취하고 있다.
이 중간 계층의 추상화를 잘 다루는 것이 바로 PX4가 다른 오픈소스 펌웨어 대비 압도적인 학술적, 산업적 확장성을 가지게 하는 원천이며, 수많은 ROS2 기반 자율 비행 알고리즘 개발을 제어 스택의 파괴 없이 손쉽게 통합할 수 있는 근거다.

1. 인지(Perception)와 행동(Action)의 파이프라인 분리 원칙

전통적인 소형 드론의 임베디드 제어 코딩이나 아두이노(Arduino) 수준의 제어 스크립트에서는 흔히 “센서를 읽고(Read) \rightarrow 조종기 값에 따라 목표치를 계산하고 \rightarrow 모터 PWM을 구동한다“라는 일련의 논리를 동일한 while(1) 메인 루프 안에 하드코딩(Hard-coding)하는 우를 범하기 쉽다.
하지만 이러한 **강한 결합(Tight Coupling)**은 센서 종류가 바뀌거나, 새로운 자율 비행 모드를 하나 추가할 때마다 제어 루프 전체의 타이밍 지터(Jitter)를 유발하고 동역학 안정성을 위협하는 치명적 안티 패턴(Anti-pattern)이다.

PX4 아키텍처 연구진은 이 거대한 코어 제어 논리 사이에 명확한 데이터 단절점(Decoupling Point)을 두어 3계층으로 완벽히 병렬 분리했다.

1.1 단계: State Estimator (유일한 진실의 입)

  • 대표 모듈: ekf2 (Extended Kalman Filter 2)
  • 역할: GPS, IMU 정밀 가속도/각속도, 비전 센서들의 원시 데이터 노이즈 역학 모델링을 통해 기체의 현재 3D 공간적 상태를 순수 수학적으로 위치 추정한다.
  • 산출물: vehicle_local_position, vehicle_attitude 토픽 (현재 NED 3D 좌표, 쿼터니언 자세, 선속도, 각속도)
  • 특징: 이 계층은 드론 조종사가 드론을 전진시키려는지, 제자리에 호버링 시키려는지(사용자의 의도나 비행 모드)에 대해 일절 관심도, 개입도 하지 않는다. 오로지 물리 법칙에 의해 “현재 기체가 우주 공간 어디에 위치하고 있는가?“라는 유일한 상태 추정치(Ground Truth Estimate Approximation)만을 객관적으로 생산(Publishing)할 뿐이다.

1.2 단계: Controller (맹목적인 추종자)

  • 대표 모듈: mc_pos_control (멀티로터 위치 제어기), mc_att_control (자세 제어기)
  • 역할: EKF가 알려준 현재 추정 상태(State)와, 도달해야 할 최종 궤적의 목표 상태(Setpoint) 사이의 수학적 오차(Error)를 구동 제어 계층의 신호로 믹싱 변환한다.
  • 특징: 이 제어 계층 역시 현재 목표 상태가 인간이 조종기를 위로 밀어 생성된 것인지, ROS2 컴퓨터 비전 AI가 도망가는 표적을 뒤쫓으라고 내린 지시인지(비행 모드)에 대해 알 수 있는 정보가 전혀 없다. 단지 자신이 구독(Subscribe)한 목표 궤적 메시지(trajectory_setpoint)의 행렬 값만을 바라보고, 캐스케이드(Cascade) P-I-D 게인 수식에 따라 맹목적으로 모터의 회전을 유도할 뿐이다.

2. 중간 계층(Middle Layer)으로서의 비행 모드(Flight Mode) 역할

이처럼 극단적으로 시야가 분리된 1단계(Estimator)와 3단계(Controller) 사이의 거대한 간극을 메우는 것이 바로 유일한 **의도 해석기(User Intent Interpreter)**인 2단계 중간 계층, Flight Mode 시스템이다.

조종사나 관제 시스템(QGroundControl)이 내리는 “앞으로 가라” 혹은 “복귀(Return)해라” 같은 구어체적이고 추상적인 명령은, 하부 PID 제어기 입장에선 곧바로 다룰 수 없는 알 수 없는 데이터(Raw PWM or Command)다.
모드 시스템은 다양한 비행 단계에 맞춰 다음의 3가지 중간 매개 연산을 수행하여 시스템을 보호하고 데이터를 수학적 벡터 공간(Vector Space)으로 투영 및 번역한다.

  1. 의도의 정규화 해석 (Intent Parsing & Normalization): manual_control_setpoint 토픽(조종기 스틱 아날로그 값)의 Raw PWM을 [-1.0, 1.0] 공간으로 정규화한다. 이때 현재 활성화된 모드가 Position 제어 모드라면 스틱 입력을 ’공간 상의 목표 이동 속도(m/s)’로 스케일링(Scaling)한다. 반면 Acro 모드에 진입해 있다면, 동일한 스틱 크기의 입력이더라도 위치가 아닌 ‘초당 롤/피치 회전율(Rate in deg/s)’ 제어 목표로 완전히 다르게 해석(Context Mapping)한다.
  2. 동역학적 물리 제약 부과 (Kinematic Trajectory Restraints): 사용자가 조종기를 0에서 최대로 단번에 튕기더라도(Max Throw), 단순히 해당 목표치로 속도 스케일을 순간 점프시키는 오류를 범하지 않는다. 기체의 최대 가속도(Max Acceleration Allowed) 제한이나, 급격한 추진력 변화에 의한 모터 포화 및 찌그러짐을 방지하는 저크 한계(Jerk Limit / Slew Rate) 알고리즘을 내부 수식에 적용하여 다이내믹 피드포워딩이 가능한 부드러운 스플라인 기반 궤적 곡선(Smoothed trajectory)을 직접 생성해 낸다.
  3. 순수 제어 목표의 하달 (Setpoint Topic Publication): 모든 제약 조건의 클리핑(Clipping)이 완료된 완벽하고 안전한 수학적 이상향(Ideal State)을 비로소 위치, 속도, 가속도 배열로 데이터화한 trajectory_setpoint.msg 토픽 안에 꽉꽉 채워 넣어 하부 캐스케이드 Controller로 던져준다.

2.1 아키텍처적 결론

이러한 Estimator-FlightMode-Controller 디커플링 아키텍처 덕분에, 우리는 하드 레벨의 PID 게인 보상 수식이나 EKF2의 칼만 공분산 행렬 연산 루프를 일절 건드리지 않고도 개발을 확장할 수 있게 되었다.
오직 중간 계층 로직(FlightTask C++ 가상 클래스 계층 상속)만 살짝 비틀어, 우주 이동체 랑데부/도킹(Rendezvous) 알고리즘이나 카메라 객체 추적 비행(Visual Tracking)과 같은 최고난도 융합 제어 모드를 펌웨어 시스템 상에 파괴적 위험 없이 안전한 샌드박스 형태로 꽂아 넣을 수 있는 것이다.

이어지는 장에서는 상태 추정치(State Estimate) 데이터와 제어 목표(Setpoint) 간의 디커플링 원리가 실제로 통신 단에서 어떻게 구현되는지 통계적 비동기화 측면에서 상세히 고찰할 것이다.