## 0.1 런치, 파라미터, 메시지 에셋의 시스템 파일 계층 표준(FHS) 경로 설치 규칙

## 0.1 런치, 파라미터, 메시지 에셋의 시스템 파일 계층 표준(FHS) 경로 설치 규칙

ROS2 아키텍처는 개별 개발자의 홈 디렉토리에 격리된 로컬 워크스페이스(Workspace) 환경과 운영체제(OS) 전역에 설치되는 글로벌 패키지 환경(예: apt 기반 Debian 패키지 배포) 간의 완벽한 이식성(Portability)을 보장하기 위해, 리눅스 시스템 파일 계층 표준(FHS, Filesystem Hierarchy Standard) 철학을 계승한 리소스 설치 경로(Installation Destination) 규칙을 엄격하게 채택하고 있다. 자율 에이전트 드론의 오케스트레이션을 구성하는 이질적인 정적 에셋들, 특히 노드 실행 명세인 런치 스크립트(Launch Scripts), 알고리즘 동역학 튜닝 값을 담은 파라미터 설정 파일(YAML 파일), 그리고 노드 간 통신 인터페이스 객체 정의(메시지, 서비스, 액션 파일) 등은 컴파일 단계에서 사전에 예약된 파일시스템의 논리적 디렉토리 계층으로 물리적 매핑이 완료되어야만, 런타임 유틸리티(ros2 run, ros2 launch 등)가 대상 에셋을 정상적으로 로드(Load)할 수 있다.

ament_cmake 파이프라인에서 FHS를 준수하는 리소스 이관(Relocation) 및 배포는 주로 CMakeLists.txt 내부의 install(DIRECTORY ...) 또는 install(FILES ...) 매크로 지시어를 통해 명세된다. 가장 대표적인 텍스트 리소스 유형인 런치 모듈 스크립트(.py, .xml, .yaml)와 필터 게인(Filter Gain) 등의 정적 데이터를 담은 디바이스 파라미터 묶음, 그리고 URDF 3D 모델 및 RViz 시각화 레이아웃 파일 등은 아키텍처 비종속성(Architecture-Independent) 자산으로 간주되어 패키지의 글로벌 공유 접두사 공간인 share/${PROJECT_NAME}/ 디렉토리 하단에 설치되는 것이 공식 프레임워크 표준안이다. 구체적으로 소스 트리의 launch/config/ 하위 디렉토리는 CMake 빌드 평가 시 DESTINATION share/${PROJECT_NAME} 구문에 구속되어, 빌드 결과물 트리 내 install/share/<패키지명>/launch/install/share/<패키지명>/config/로 복제 투영된다. 이는 리눅스 머신의 전역 비실행 데이터 저장소인 /usr/share/의 구조적 철학을 ROS 작업공간 내에 국소적으로 투영한 것이다.

반면, 런타임 라이프사이클에 직접적으로 개입하는 동적 아티팩트 및 인터페이스 계층의 경우 빌드 도구는 보다 이질적이고 세분화된 계층 경로 체계를 강제한다. 커스텀 인터페이스 원본 텍스트 파일인 .msg.srv은 동적 타입 반영(Reflection)을 위해 share/${PROJECT_NAME}/msg/ 하위에 보존되는 프론트엔드 레코드 역할을 담당한다. 반면 IDL 제너레이터 툴체인 파이프라인(rosidl_generate_interfaces)에 의해 기계적으로 산출된 C/C++ 식별자 헤더 파일 묶음은 /include/${PROJECT_NAME}/ 레이어로 진입하여 의존성 주입을 대기하고, 컴파일러를 거친 ELF 공유 바이너리 모듈 파일은 /lib/로, 파이썬 기반의 동적 런타임 래퍼 객체 코드는 최종적으로 /lib/python3.x/site-packages/${PROJECT_NAME}/ 계층 구조를 향해 패키징된다.

결론적으로 ROS2의 FHS 호환 설치 규칙은 파일들의 단순한 디렉토리 분리 도그마가 아니라, 런타임 리소스 탐색기(Locator) 메커니즘이 Ament Index 캐시 해시(Hash)를 경유하여 파일 디스크립터를 탐색할 때 소모되는 I/O 비용 타임 아웃(Time-out)을 획기적으로 차단하기 위한 통제 프로토콜이다. 개발자가 CMakeLists.txt 내 설치 규칙(Destination Paths) 구문을 자의적으로 왜곡하거나 누락할 경우, 패키지가 정상적으로 빌드 성공(Build pass) 상태를 반환함에도 불구하고 런타임 시에 NodeExecutableNotFound 예외 상황이나 파일 시스템 파라미터 파싱 오류 등 자율 드론의 심각한 전역적 상태(State) 결함을 촉발하게 된다.