# 1. 최상위 상태 관리 및 미들웨어: src/modules/ (Part 1)
펌웨어의 뇌수, 즉 핵심 알고리즘 덩어리들이 은닉된 src/modules/는 그 자체로 수백 개의 다중 자아(Threads)가 살아 숨 쉬는 생태계다. 모든 모듈은 서로의 내부 로직을 몰라도 uORB 메시지 버스만으로 대화하는 마이크로서비스(Microservices) 아키텍처를 따른다. 이 장에서는 비행 제어기 본연의 기능보다는, 시스템 전체의 ’상태(State)’를 통제하고 지상 및 외부 컴퓨터와의 다리 역할을 하는 관리·미들웨어(Middleware) 모듈들의 디렉토리를 해부한다.
시스템 두뇌와 안전판: commander/ 및 navigator/
src/modules/commander: 기체 전체의 최고 의사 결정 기구다. 배터리가 충분한지, GPS Lock이 걸렸는지, 사용자가 GCS에서 “시동(Arm)” 버튼을 눌렀는지를 취합하는 거대한 상태 머신(State Machine) 덩어리다. 특히Commander.cpp내부에서는 Preflight Check(비행 상태 점검) 로직이 천 줄 넘게 하드코딩되어 있어, 시동이 걸리지 않을 때 엔지니어가 가장 먼저 열어봐야 할 파일 1순위다.src/modules/navigator: 자율 비행(Auto Mode)의 내비게이션 경로 계획기이다. QGroundControl에서 업로드한 웨이포인트(Mission Items) 배열을 읽어 들여, 다음 타겟 지점의 위도/경도, 이륙(Takeoff)/착륙(Land), 복귀(RTL) 명령을 현재 기체 상태에 맞게 해석한 후, 하위 위치 제어기(Position Controller)에게 목표 좌표(Setpoint)를 던져주는 역할을 한다.
데이터 통신망 및 미들웨어: mavlink/ 및 logger/
src/modules/mavlink: 드론을 외부 세상과 연결해 주는 유일한 탯줄이다. GCS(QGroundControl)에서 날아온 MAVLink 이진 패킷 스트림을 분석(Parsing)하여 PX4 내부의 uORB 메시지로 변환해 뿌려주거나, 반대로 PX4 시스템에서 생산된 내부 uORB 센서 데이터들(자세, 배터리)을 정해진 주사율 마다 MAVLink 패킷으로 포장(Packing)하여 텔레메트리 안테나 밖으로 쏘아 보낸다. 트래픽 스트레스가 가장 심한 모듈이다.src/modules/logger: 사고 원인 분석의 핵심 백박스(Blackbox) 팩토리다. SD 카드의 I/O 병목을 우회하기 위해 전용 비동기 스레드를 돌면서, 초당 수백 헤르츠(Hz)로 난사되는 시스템 내부 uORB 토픽들을.ulg(ULog) 바이너리 포맷으로 고속 타각(Write) 한다. SD 카드가 늦게 반응하더라도 데이터 손실(Drop)을 막도록 링 버퍼(Ring Buffer)와 메모리 할당 최적화 기법이 덕지덕지 발려있는 극한 스피드의 모듈이다.