### 0.0.1 PX4의 기능 중심 동적 직렬 라우팅(Dynamic Serial Routing) 방식 vs Ardupilot의 포트 중심 SERIALx_PROTOCOL 정적 매핑 방식
드론 비행 제어기(FC)의 확장성을 판가름하는 가장 중요한 설계 중 하나는 시리얼 통신 포트(Serial Port) 배선도를 소프트웨어적으로 어떻게 관리하느냐이다. 텔레메트리, GPS, RTK, OSD, 광학 플로우 등 수많은 주변기기가 제한된 UART 포트 자원을 두고 경쟁한다.
이 한정된 자원의 분배(Routing) 문제에 대해, PX4는 동적 라우팅(Dynamic Routing) 을, Ardupilot은 정적 매핑(Static Mapping) 구조를 채택했다.
0.1 PX4의 ‘기능(Function) 선언형’ 동적 직렬 라우팅 체계
앞선 절에서 보았듯 PX4는 사용자에게 철저하게 파라미터를 추상화(Abstraction)하여 제공한다. 이 추상화 시스템의 백엔드가 바로 기능 중심 라우팅(Function-based Routing) 이다.
- 포트는 기능에 종속된다: PX4에서는 사용자가 텔레메트리를 꽂았는지, GPS를 꽂았는지 운영체제가 먼저 묻지 않는다. 파라미터는
TELEM_1_CONFIG(텔레메트리 기능 1번을 활성화할 포트는 무엇인가?),GPS_1_CONFIG(GPS 기능 1번을 활성화할 포트는 무엇인가?) 처럼 “무엇을 할 것인가(기능)“에서 시작한다. - 부팅 시점의 동적 바인딩(Dynamic Binding): 사용자가
GPS_1_CONFIG드롭다운 메뉴에서TELEM2포트를 선택하고 재부팅하면 놀라운 일이 벌어진다. PX4의 부팅 셸(rc.board_sensors 등)이 백그라운드 스크립트를 파싱하면서, “아, 사용자가 GPS 드라이버 데몬을 띄울 때--port /dev/ttyS2(TELEM2의 물리적 포트명) 인자를 넘기라고 했구나!” 하고 동적으로 스위칭을 해버린다. - 추상화의 위력: 이 구조 덕분에 PX4 펌웨어는 픽스호크(Pixhawk) 4를 쓰든, 오라클(Orange Cube)을 쓰든, 라즈베리 파이(RPi)를 쓰든 내부 하드웨어의 보드 레이아웃 명칭(
ttyS1,ttyS2)을 전혀 신경 쓸 필요가 없다. QGroundControl은 그저 추상화된 기능 이름표만 화면에 띄우면, 펌웨어가 부팅 시점에 하드웨어 매핑 테이블(board_config.h)을 뒤져 동적으로 포트를 할당한다.
0.2 Ardupilot의 ‘하드웨어(Port) 중심’ SERIALx_PROTOCOL 정적 매핑
반면 Ardupilot은 “기능이 포트를 찾는 것“이 아니라, “포트가 기능을 결정하는” 정적 매핑(Static Mapping) 방식을 채택했다.
- 포트는 군주다: 앞서 언급한
SERIAL1_PROTOCOL,SERIAL2_PROTOCOL처럼 Ardupilot의 모든 시리얼 매핑 파라미터는 물리적 포트 번호(SERIALx)를 기준으로 한다. 사용자는 각 포트 파라미터에 1(MAVLink), 5(GPS), 9(Rangefinder) 등의 정수형 프로토콜 ID를 직접 박아 넣어야 한다. - 스케줄러의 무차별 순회(Iteration): 부팅 시, Ardupilot 메인 스케줄러는 0번부터 N번까지의 물리적 시리얼 포트를 순서대로 싹 다 훑는다. “1번 포트, 네 프로토콜 ID가 5번(GPS)이라고? 좋아, AP_GPS 프론트엔드 클래스를 이 포트 메모리 주소에 바인딩(Binding)하겠다“는 식으로 포트의 프로토콜 선언을 읽어 하위 드라이버를 찍어 누르듯 할당한다.
- 결정론적 단단함: 이 방식은 무식하지만 아주 강력하고 직관적이다. 개발자나 파워 유저는 텔레메트리 포트 뚜껑을 열 때, 이 물리적 구멍(UART)이 소프트웨어의 몇 번째
SERIAL변수와 1:1로 맵핑되는지만 알면 된다. 동적 스크립트 파싱(Parsing) 에러 같은 복잡한 부팅 변수가 존재하지 않으며, 코드 실행 흐름이 하드웨어 핀맵(Pin-map) 배열과 정확히 일치하는(Deterministic) 클래식한 임베디드 코딩의 정수다.
0.3 유연성(Flexibility)인가, 투명성(Transparency)인가?
- PX4의 구조는 플러그 앤 플레이(Plug & Play) 에 가장 가깝게 다가선 현대적 아키텍처다. 제조사가 핀맵 매핑(Mapping) 파일만 예쁘게 만들어주면, 소비자는 하드웨어 포트 이름조차 모른 채 다채로운 확장 기능을 마우스 클릭만으로 라우팅할 수 있는 눈부신 유연성을 제공한다.
- Ardupilot의 구조는 회로도를 보며 오실로스코프(Oscilloscope)로 신호를 찍어보는 엔지니어의 투명성을 대변한다. 운영체제가 중간에서 마법(동적 스크립트 라우팅)을 부리지 못하게 하고, 하드웨어 1번 포트는 무조건 소프트웨어의
SERIAL1변수로 박제시켜 유지보수와 디버깅의 복잡도를 극도로 낮추었다.