# 1. 사용자 정의 모듈 개발 아키텍처: src/examples/
PX4의 험난한 C++ 로직과 방대한 디렉토리 숲 속에서 방황하는 초급자, 혹은 나만의 특수 페이로드(예: 레이저 모듈, 폭하 로봇암)를 제어하기 위한 독자적인 백그라운드 스레드를 심구자 할 때 길잡이가 되는 곳이 바로 src/examples/ 폴더다. 이 디렉토리는 기체의 실제 비행 제어에는 단 1%도 관여하지 않는, 철저한 교육용 샌드박스(Sandbox)이자 뼈대 컴포넌트(Boilerplate) 보급처다.
Hello Sky: px4_simple_app/ 의 무해함
가장 기초적인 골격인 px4_simple_app 디렉토리 내부의 px4_simple_app.c (또는 cpp) 소스를 열어보면, 우주역학이나 쿼터니언 수학은 단 한 줄도 없다. 대신 한 개의 PX4 모듈이 어떻게 세상(NuttX 커널)에 태어나 스레드 데몬으로 상주하며, uORB 우체국과 최소한의 대화(구독 및 발행)를 주고받는 지 그 앙상한 라이프사이클 뼈대만을 보여준다.
- 데몬 메인 함수 등록 (
px4_simple_app_main): 콘솔(NSH) 창에서 사용자가px4_simple_app start라고 타이핑했을 때 이 진입점(Entry Function)이 깨어난다. - uORB 구독 (
orb_subscribe):sensor_accel(가속도 센서 토픽) 메일박스에 수신 예약 등록을 한다. - 블로킹 폴링 (
px4_poll): 스레드가 무한 루프(while 루프)를 돌며 CPU 퍼센트를 갈아먹는 것을 억제하기 위해, “센서 데이터가 새로 도착할 때까지 내 스레드를 재워달라(Sleep)“고 리눅스의poll()과 완벽히 동일한 원리로 대기열에 들어간다. - uORB 복사 및 조작 (
orb_copy): 깨어나면 택배 상자에서 가속도 x,y,z 수치를 빼내 화면에 프린트(PX4_INFO)하거나 나뭇잎을 줍듯 조작한다.
코드 복제(Cloning) 기반 아키텍처 확장
PX4 생태계에서 당신만의 새로운 기능 덩어리인 custom_laser_controller 모듈을 만들고 싶다면, 절대 맨땅에서 백지 텍스트 파일을 열고 C++ 헤더를 한 줄 한 줄 코딩하지 마라.
진정한 고립된 개발의 1단계는 src/examples/px4_simple_app/ 폴더를 복사 통째로 떠서 src/modules/custom_laser_controller/ 로 붙여넣기(Paste) 하는 것이다. 그 후 CMakeLists.txt 파일 내의 모듈 이름 매크로만 당신의 것으로 sed 치환시켜라.
그리고 최종적으로 타겟 보드의 default.px4board 설정 파일 끝자락에 CONFIG_MODULES_CUSTOM_LASER_CONTROLLER=y 한 줄을 기입하여, 메타 CMake 빌더가 당신의 새 폴더를 갓난아기처럼 품에 안아 컴파일 파이프라인으로 태워 무사 구동되게 만드는 이 거침없는 확장성 파이프라인. 이것이야말로 오픈소스 뼈대의 진정한 마법이다.