# 1. 핵심 비행 제어 및 상태 추정: src/modules/ (Part 2)
앞서 Part 1이 시스템의 의사결정과 통신망을 다루었다면, 이 장에서 다루는 모듈들은 오직 “어떻게 기체를 중력을 거슬러 원하는 곳으로 찢어 옮길 것인가“에 대한 극단적인 수학과 근육의 영역이다. 항공역학, 선형대수, PID 제어 이론이 난무하는 가장 가혹한 마이크로 서비스 공간이다.
자세 및 위치 상태 추정기: ekf2/ (Estimator)
src/modules/ekf2: Extended Kalman Filter (확장 칼만 필터) 엔진. PX4 알고리즘의 왕관이다. 자이로(고속, 드리프트 심함), 가속도, 나침반, GPS(저속, 정확함), 기압계 등 응답속도와 노이즈 특성이 완전히 다른 수십 개의 센서 데이터 스트림을 집어삼켜, 기체의 ‘현재 3차원 자세, 속도, 위치’ (True State)라는 하나의 절대 진리로 융합(Fusion)해 낸다. 이 디렉토리 내부는 센서 신호의 지연(Delay)을 극복하는 버퍼 시간여행 로직과 방대한 오차 공분산(Covariance) 행렬 연산 코드로 가득 차 있다. EKF2 코드를 건드리는 자는 시스템 전체에 재앙을 부를 수 있다.
기체 특화 제어 시스템: mc_pos_control/, mc_att_control/, fw_pos_control_l1/
mc_pos_control/및mc_att_control/: 멀티로터(Multi-copter)의 자세와 위치를 제어하는 투 스텝 레이어다.
- 위치 제어기(
pos_control)는 Navigator가 던져준 목표 3D 좌표에 도달하기 위해 공간상의 속도와 추력(Thrust) 벡터를 계산하여 하위 제어기에 넘긴다. - 자세 제어기(
att_control)는 넘겨받은 3D 벡터 각도를 달성하기 위해 P-I-D 방정식과 쿼터니언(Quaternion) 오차 함수를 회전시켜 초당 400Hz 이상의 속도로 ’목표 각속도(Roll/Pitch/Yaw Rate)’를 뽑아낸다.
fw_pos_control_l1/및fw_att_control/: 고정익(Fixed-Wing)은 콥터처럼 제자리 정지가 불가능하다. 비행기 역학(Aero Dynamics) 특성상 선회 반경을 고려하는 L1 가이던스(Guidance) 알고리즘과 TECS(Total Energy Control System, 총 에너지 제어-고도와 속도의 균형 교환) 엔진이 탑재되어 있다. 콥터 코드와는 철학의 궤가 완전히 다르다.
근육으로의 명령 매핑: control_allocator/
src/modules/control_allocator: 로터 제어의 종착역이다. 앞선 자세 제어기들이 “Roll 각도를 오른쪽으로 이만큼 돌려!“라고 회전 모멘트(Torque) 요구량을 쏘아보내면, 이 모듈은 현재 기체가 쿼드콥터 무늬인지, 옥토콥터 모양인지 형상(Geometry) 매트릭스를 들여다보고 수학 방정식을 풀어, 정확히 “우측 모터 1번은 PWM 1800으로, 좌측 모터 3번은 PWM 1200으로 회전하라“는 개별 모터 출력값으로 분배(Allocation) 행렬을 도출한다. 액추에이터 효율을 극한으로 쪼개는 마지막 수학적 관문이다.