21.9.2. SYS_AUTOSTART 기반 기체 프로파일 연동 시작
앞서 우리는 내 모듈(payload_autodrop)이 부팅 트리의 맨 하단, 즉 센서와 EKF 데몬이 모두 켜진 뒤에 실행되어야 한다는 ’황금 시간대’를 찾아냈다.
초보 개발자라면 rcS 파일 맨 밑바닥에 payload_autodrop start 라고 무식하게 한 줄을 박아 넣고 만족할 것이다.
하지만 PX4는 전 세계의 온갖 드론(쿼드콥터, 헥사콥터, 고정익, 잠수함 등) 수백 종을 지원하는 거대한 플랫폼이다. 내가 만든 페이로드 투하 모듈을 모든 드론이 켜질 때마다 강제로 백그라운드에 상주시킨다면 엄청난 메모리(RAM) 낭비가 발생한다. 농약 뿌릴 일 없는 스피드 레이싱 드론조차 내 모듈을 메모리에 이고 다녀야 하는 비극이 벌어지는 것이다.
이 문제를 우아하게 해결하는 PX4의 핵심 철학이 바로 SYS_AUTOSTART 기체 프로파일(Airframe Profile) 연동 아키텍처다.
1. SYS_AUTOSTART의 마법
QGroundControl(QGC) 화면에 들어가서 [기체(Airframe)] 탭을 눌러보면 수많은 기체 모양들이 뜬다. 그중 하나를 선택하고 재부팅하면, 픽스호크 내부 파라미터인 SYS_AUTOSTART의 값이 내가 고른 기체의 고유 번호(예: 4001, 10015 등)로 바뀐다.
부팅 시 rcS 스크립트는 이 SYS_AUTOSTART 번호를 읽어 들여서 1줄짜리 기체 설정 파일(Airframe Config File) 을 수백 개 중에 찾아내어 읽어들인다.
이 기체 설정 파일 안에는 이 드론이 쿼드콥터인지 고정익인지, PWM 믹서는 어떻게 매핑할 것인지, 그리고 가장 중요하게 **“이 기체의 특수한 커스텀 앱들을 켤 것인가?(앱 플래그)”**에 대한 환경 변수(Environment Variables) 세팅들이 담겨있다.
우리는 이 방식을 빌려와서, 우리 모듈을 켜기 위한 전용 환경 변수를 하나 파서 스크립트에 이식해 볼 것이다.
2. 기체별 맞춤형 환경 변수(App Flag) 주입하기
우리가 만든 모듈은 일반적인 멀티콥터(mc_apps) 중에서도 특수한 임무를 띤 녀석만 켜야 한다. 이를 위해 먼저 QGC 파라미터로 조종사가 직접 On/Off 스위치를 딸깍 할 수 있도록 CUSTOM_APP_EN (커스텀 앱 활성화) 이라는 이름으로 1(켜기) 또는 0(끄기) Int 파라미터를 하나 만들어 둔다.
우리의 지킬 앤 하이드 같은 분기 로직은 바로 여기서 시작된다. 만약 어떤 드론 조종사가 방제(Payload) 미션을 뛸 생각으로 QGC에서 CUSTOM_APP_EN 파라미터를 1로 세팅했다면, 부팅 과정에서 PX4 스크립트가 이를 찰떡같이 알아먹고 멀티콥터 앱 실행 담당 스크립트인 rc.mc_apps 내에서 내 모듈을 은밀하게 start 시키게 만들어야 한다.
파라미터 값(0인지 1인지)을 rc 스크립트 언어로 논리 조건 평가(if-else)하여 내 C++ 데몬을 분기 실행시키는 고난이도 쉘 스크립트 구조를 21.9.2.1장에서 완벽히 뜯어고쳐 보자.