21.9.2.1.1. `param compare CUSTOM_APP_EN 1` 쉘 스크립트 구문을 사용하여 파라미터 값 활성화 시 모듈의 `start` 명령을 호출하는 분기문 작성

21.9.2.1.1. param compare CUSTOM_APP_EN 1 쉘 스크립트 구문을 사용하여 파라미터 값 활성화 시 모듈의 start 명령을 호출하는 분기문 작성

Linux 쉘(Bash)에 능숙한 백엔드 개발자라도 막상 픽스호크의 심장인 NSH(NuttShell) 스크립트를 마주하면 당황하기 마련이다. PX4의 rcS 스크립트 생태계에서는 파일 I/O나 메모리를 엄청나게 잡아먹는 일반적인 쉘 커맨드(grep, awk 등)를 마음껏 쓸 수 없다.

대신 PX4 커널은 가장 빠르고 가벼운 C++로 짠 전용 쉘 커맨드(Built-in Command)들을 제공하는데, 파라미터 분기 로직의 핵심이 바로 param compare 명령어다.

1. param compare 커맨드의 작동 원리

이 명령어는 오직 “지정된 파라미터의 값이 목표값과 정확히 일치하는기“를 참(True)/거짓(False)으로 즉시 반환(Return)해 주는 극도로 가벼운 유틸리티다.

# 문법: param compare [파라미터_이름] [목표값]

만약 QGC에서 조종사가 CUSTOM_APP_EN 파라미터를 1로 저장했다면, param compare CUSTOM_APP_EN 1 명령어는 그 즉시 0 (리눅스 환경에서 0은 Return Success 즉, 참을 의미한다)을 뱉어내고 종료된다. 반대로 값이 0이나 2였다면 1 (Failure)을 뱉어낸다.

2. 완벽한 데몬 구동 if 분기문 세팅

이 반환값(Exit Status)을 NSH의 원시적인 if 블록과 결합하면, C++의 구조체만큼이나 단단하고 견고한 데몬 시동 스크립트를 작성할 수 있다. rc.mc_apps의 맨 하단 여백에 이 마법의 주문을 적어 넣자.

# ------------------------------------------------------------------
# [ 커스텀 모듈: 페이로드 자동 투하 제어기 부트 로직 ]
# ------------------------------------------------------------------
# 파라미터 서버(MTD)에서 CUSTOM_APP_EN 값을 직접 뒤져본다!
# 만약 그 값이 정수 1과 같다면, 이 if문은 TRUE가 되어 블록 안으로 진입한다.
if param compare CUSTOM_APP_EN 1
then
    # 조종사를 위한 친절한 부팅 로그를 띄운다 (콘솔창 확인용)
    echo "INFO  [init] Starting Payload Auto Drop Daemon..."
    
    # [핵심] 모듈의 start 명령을 커널에 쏜다.
    # 이때 페이로드 모듈 튜닝용 부가 파라미터(고도, 시간 등)도 
    # 모듈 스스로 읽어올 수 있도록 완벽한 상태가 갖추어졌다!
    payload_autodrop start
    
    # 만약 시작 도중 크래시가 났다면, 그 즉시 에러 로그를 뿜도록 방어 코드 추가 가능
    # (일반적으로 px4 모듈의 start 루틴은 에러 시 0이 아닌 값을 반환한다)
fi

2.1 왜 단순 하드코딩보다 나은가?

이러한 ‘파라미터 기반 분기 지연 실행(Parameter-gated Deferred Execution)’ 패턴은 상용 드론 펌웨어 유지보수에서 절대적인 위력을 발휘한다.

어떤 고객사(Customer A)는 방제 드론을 사갔고, 어떤 고객사(Customer B)는 배달 드론을 사갔다 치자. 코드를 분리해서 펌웨어를 두 개 만들어 배포하면 형상 관리(Git)가 끔찍해진다.
대신 하나의 통합 펌웨어(Unified Firmware)를 구워 두 고객사 모두에게 뿌린 뒤, 방제 드론을 세팅할 때는 공장에서 CUSTOM_APP_EN 파라미터만 1로 바꿔서 출고하면 그만이다.

백그라운드로 들어간 우리의 데몬(payload_autodrop)은 이제 픽스호크가 꺼질 때까지 영원히 숨을 쉰다.
하지만 비행을 마치고 조종사가 시동을 끄고 배터리를 뽑기 직전, 메모리를 물고 있는 데몬 데스크탑 프로그램 수준의 깔끔한 종료(Clean Shutdown)를 PX4 환경에서는 어떻게 구현할까?
대망의 시리즈 마지막 주제, 안전한 백그라운드 구동과 소프트 셧다운 아키텍처를 21.9.3장에서 마무리해 보자.