19.7.2.1. `make px4_sitl jmavsim` 빌드 및 시뮬레이터 구동

19.7.2.1. make px4_sitl jmavsim 빌드 및 시뮬레이터 구동

default.cmake 메뉴판에 당신의 모듈 이름이 무사히 적혔다면, 이제 터미널 창(Terminal)을 열쇠 삼아 PX4의 거대한 빌드 시스템(CMake/Ninja) 엔진의 시동을 터뜨릴 차례이다.
PX4 펌웨어 소스 코드가 위치한 최상위 루트 디렉터리(예: ~/src/PX4-Autopilot)로 이동한 뒤, 가장 압도적이고 유명한 메인 컴파일 명령어 하나를 쉘에 때려 박는다.

cd ~/src/PX4-Autopilot
make px4_sitl jmavsim

이 짧은 명령어 한 줄이 타격되는 순간, 백그라운드에서는 두 가지의 우주적인 창조 작업이 병렬로 미친 듯이 전개된다.

1. GCC/Clang 컴파일 타임: 펌웨어 바이너리 조립

첫 번째 마법은 make px4_sitl 파트에서 발생한다. 리눅스 시스템의 C++ 컴파일러가 깨어나 우리가 앞선 19.7.1 단원에서 몰래 적어두었던 메뉴판(sitl/default.cmake)의 경로들을 광분하며 스캐닝한다.
그다음 수천 개의 펌웨어 코어 파일들과 함께, 우리가 examples/px4_uorb_example 폴더 안에 숨겨두었던 수십 줄의 커스텀 C++ 다중 인스턴스 소스 코드 스크립트를 한 치의 오차도 없이 빨아들인다. 문법 에러가 없다면 이 모든 소스를 거대한 리눅스용 단일 실행 바이너리 파일(px4) 덩어리로 무자비하게 뭉쳐내어 링크(Linking)해 버린다.

만약 이 과정에서 당신이 짠 uORB 소스 코드에 치명적인 세미콜론(;) 누락이나 포인터 캐스팅 에러가 존재한다면 쉘 창은 끔찍한 붉은색 텍스트(Compile Error)를 토해내며 컴파일을 즉각 중단(Halt)시킬 것이다. 하지만 문법이 완벽하다면 대략 30초~1분 후 100% 빌드가 완료되며 가상 펌웨어의 혼(Spirit)이 메모리상에 기상할 준비를 마친다.

2. 가상 물리 엔진 런칭: jmavsim 3D 렌더러 기동

두 번째 마법은 명령어 뒷부분의 jmavsim 텍스트에서 터진다. 빌드된 펌웨어가 램에 올라가기 직전, 빌드 시스템은 백그라운드에 자바(Java) 기반의 경량 3D 가상 드론 물리 시뮬레이터 플랫폼인 jMAVSim을 강제 인터럽트로 띄워버린다.

화면에는 파란 하늘의 3D 공간과 가상의 쿼드콥터 드론 그래픽 창이 팝업(Pop-up)된다. 이 가짜 드론은 지금부터 실제 픽스호크 보드에 붙어있는 하드웨어 관성 측정 장치(IMU: 가속도, 자이로)와 GPS 칩셋 연기를 완벽하게 수행한다. 당신의 키보드나 마우스 조작에 드론이 기우뚱거릴 때마다, 가짜 센서들이 뽑아내는 시뮬레이션 데이터들이 가상 마더보드의 VFS 파이프망에 수백 Hz의 주기로 맹렬히 꽂히기 시작한다.

3. NuttShell (NSH) 쉘의 개방: 통제권 장악

3D 창이 뜨고 나면, 방금 전 컴파일 명령어를 타이핑했던 리눅스 우분투 터미널 창의 프롬프트가 대격변을 일으킨다. 익숙하던 user@ubuntu:~$ 프롬프트가 사라지고, 아래와 같은 텍스트로 치환된다.

INFO  [px4] starting netman
INFO  [px4] mqtt start
INFO  [mavlink] mode: Normal, data rate: 4000000 B/s on udp port 14550 remote port 14550
...
px4> 

바로 이것이 PX4 리얼타임 커널(NuttX RTOS)의 내장 심장부 쉘인 NSH (NuttShell) 터미널의 개방이다.
현재 시스템 메모리상에는 백그라운드로 1000Hz짜리 자세 제어 코어 모듈(EKF, Commander 등)들이 미친 듯이 돌며 방금 뜬 jMAVSim 시뮬레이터 드론이 떨어지지 않게 런타임으로 붙잡고 있다.

그리고 이 px4> 프롬프트 커서야말로, 우리가 컴파일러에 태워 넣었지만 아직 디스크에서 쿨쿨 자고 있는 우리의 px4_uorb_example 데몬 모듈을 수동으로 두들겨 깨우고 기상시켜 직접 VFS 메모리 수색 작전에 투입할 수 있는 유일한 마스터 관리자 인터페이스 창구이다. 이어지는 과정을 통해 이 쉘을 직접 호령해 볼 것이다.