## 0.1 PX4 거리 센서 C++ 드라이버 소스 코드 분석 (`src/drivers/distance_sensor`)

## 0.1 PX4 거리 센서 C++ 드라이버 소스 코드 분석 (src/drivers/distance_sensor)

지금까지 LiDAR 내부의 광자(Photon)와 물리 방정식을 훑어보았다면, 이제는 비행 제어기(Pixhawk)의 펌웨어가 이 하드웨어를 소프트웨어 스택으로 묶어버리는 C++ 소스 코드를 해부할 차례다.
물리적 측정값이 디지털 비트스트림(Bitstream)으로 치환되어 I2C나 Serial 버스를 타고 비행 제어기 포트로 들이닥칠 때, PX4의 드라이버 계층이 이를 낚아채어 파싱(Parsing)하고, 운영체제의 통합 언어(uORB 토픽)로 번역하는 일련의 저수준(Low-Level) 파이프라인을 추적한다.

src/drivers/distance_sensor 디렉토리의 상속 아키텍처

PX4 시스템의 드라이버 디렉토리 구조는 철저한 객체 지향 상속(Object Orientated Inheritance) 트리를 따른다. 모든 하단 거리 센서 코드는 공통된 규격을 통과하기 위해 순수 가상 함수나 래퍼(Wrapper) 기본 클래스를 부모로 둔다.

  • 예를 들어, 널리 쓰이는 tfmini, leddar_one, vl53l1x 같은 각 제조사별 C++ 디렉토리 안을 열어보면, 이들 메인 클래스는 공통적으로 운영체제 디바이스 인터랙션을 담당하는 I2C 또는 UART 인터페이스 클래스와 측정값 퍼블리셔(Publisher) 클래스를 다중 상속받아 구현된다.
  • 이 아키텍처 덕분에 메인 제어 루프(EKF나 Commander) 입장에서는 하단에 달린 센서가 비싼 레이저 기반의 Lidar-Lite 인지 한 줄짜리 싸구려 TF-Luna 인지 하드웨어의 브랜드나 복잡도에 전혀 관여할 필요가 없다. 그저 부모 클래스가 구강 규격화하여 던져주는 distance_sensor_s 타입의 구조체 메모리만 바라보고 있을 뿐이다. 이것이 오픈소스의 장점인 하드웨어 추상화 계층(HAL) 의 정수다.