19.7.1.1. `boards/px4/sitl/default.cmake`에 커스텀 모듈(`examples/px4_uorb_example`) 추가

19.7.1.1. boards/px4/sitl/default.cmake에 커스텀 모듈(examples/px4_uorb_example) 추가

PX4 코어 아키텍트는 리눅스 위에서 돌아가는 아주 안전하고 강력한 가상 비행 제어기, 즉 **SITL (Software-In-The-Loop)**만을 위해 완벽히 독립적인 전용 메뉴판 타겟 파일을 운용하고 있다. 그 위치는 PX4 루트 소스 코드 디렉터리 기준 boards/px4/sitl/default.cmake이다.

이 거대한 파일의 텍스트 뱃속을 열어보면, 시스템을 구동하기 위해 수백 명의 오픈소스 컨트리뷰터들이 피땀으로 쌓아 올린 기본 모듈(모터 드라이버, 센서 에뮬레이터, EKF 항법 모듈, 로거 등)들의 이름들이 BOARD_MODULES라는 거대한 CMake 리스트 함수 블록 안에 줄줄이 선언되어 있는 것을 볼 수 있다.

여러분이 작성한 무결점 다중 인스턴스 코어 데몬 소스(src/examples/px4_uorb_example/px4_uorb_example.cpp)를 시스템에 탑승시켜 컴파일러가 잡아채게 하려면, 저 수많은 기존의 선배 모듈들 목록 가장 밑바닥에 여러분 모듈의 이름표(Relative Path)를 수동으로 타이핑해 강제 삽입(Injection)해야만 한다.

1. default.cmake의 파괴적 타설과 모듈 인젝션

터미널이나 VSCode 에디터에서 PX4-Autopilot/boards/px4/sitl/default.cmake 파일을 열고 최하단으로 드래그해 보라. examples 하위 카테고리 디렉터리가 보일 것이다.

# ... (상단 생략: 무수한 센서와 컨트롤러 모듈 목록들) ...

px4_add_board(
    # ...
    MODULES
        # ...
        # [examples 카테고리 블록: 학습용/테스트용 커스텀 모듈들의 은신처]
        examples/fixedwing_control
        examples/hello
        examples/hwtest
        examples/matlab_csv_serial
        examples/px4_mavlink_debug
        examples/px4_simple_app

        # ---- [이곳이 당신이 지배해야 할 역사적인 삽입 지점이다] ----
        examples/px4_uorb_example
        # -------------------------------------------------------------
        
        # ...
)

이 한 줄, 즉 **examples/px4_uorb_example**이라는 디렉터리 경로를 추가하고 파일을 저장하는 행위는, PX4의 거대한 Ninja/GCC 빌드 시스템을 향해 **“야, 소스코드 트리를 폴링(Polling)할 때 src/examples/px4_uorb_example 폴더 안에 있는 CMakeLists.txt도 잊지 말고 같이 읽어서 거대한 단일 펌웨어 바이너리 이미지 조각에 무조건 포함(Linking)시켜라”**라고 내리는 절대적인 병합 명령과 같다.

만약 이 한 줄의 삽입을 까먹은 채 아무리 터미널에서 C++ 소스를 예쁘게 고쳐봤자, 멍청한 리눅스 컴파일러는 당신의 폴더를 투명 인간 취급하며 바이너리를 구워내고, 당신이 시뮬레이터를 띄워 내 모듈 명령어를 쳤을 때 Command 'px4_uorb_example' not found라는 끔찍한 절망의 에러를 토해내게 될 것이다.

이 한 줄의 타설이 무사히 끝났다면, 당신의 커스텀 코드는 이제 PX4 펌웨어 운영체제의 공식 내장 애플리케이션(Built-in App)으로 완벽하게 격상되었다. 이제 남은 것은 이 거대한 펌웨어 덩어리를 컴파일러로 굽고(Make), 시뮬레이터 공간에 올려 생사가 오가는(Life Cycle) 실제 데몬 명령어를 타격해 보는 일뿐이다.