Chapter 14. 거리 측정 센서(LiDAR, Sonar, Radar) 및 옵티컬 플로우 연동
- # 1. 거리 측정 센서 및 옵티컬 플로우 시스템 아키텍처 개요
- ## 0.1 무인항공기 상태 추정(State Estimation)에서 로컬 센서의 역할과 한계
- ### 0.0.1 전역 센서(GNSS, Barometer)와 국소 센서(LiDAR, Optical Flow)의 주파수 대역별 상호보완성
- ### 0.0.1 정밀 이착륙(Precision Landing) 및 지형 추적(Terrain Following)을 위한 제어 요구사항 도출
- ## 0.1 PX4-Autopilot vs Ardupilot: 로컬 센서 처리 아키텍처 비교
- ### 0.0.1 드라이버 계층 차이: PX4의 독립 모듈(NuttX Task) 방식과 Ardupilot의 라이브러리(AP_RangeFinder, AP_OpticalFlow) 통합 방식 비교
- ### 0.0.1 센서 데이터 융합(Fusion) 파이프라인 설계 철학 차이 (ECL EKF2 vs AP_NavEKF3)
- ## 0.1 다중 센서 중복성(Redundancy) 및 결함 허용(Fault Tolerance) 설계 기초
- ## 0.1 LiDAR (Light Detection and Ranging) 센서 물리 모델 및 커널 연동
- ## 0.1 LiDAR 센서의 물리적 측정 원리 및 수학적 모델링
- ### 0.0.1 ToF(Time of Flight) 측정 방정식 및 광속 변화에 따른 오차 요인 분석
- ### 0.0.1 위상차(Phase-Shift) 방식의 변조 주파수(Modulation Frequency) 및 모호성(Ambiguity) 해결
- ### 0.0.1 램버시안 반사(Lambertian Reflectance) 모델에 따른 표면 재질별 수신 신호 강도(SNR) 변화
- ## 0.1 PX4 거리 센서 C++ 드라이버 소스 코드 분석 (
src/drivers/distance_sensor)
- ### 0.0.1 시리얼 기반 드라이버 구조 분석: Benewake TFmini/TF02 (
tfmini.cpp 파서 및 상태 머신)
- ### 0.0.1 I2C 기반 드라이버 구조 분석: ST VL53L1X/L0X 레지스터 맵핑 및 인터럽트 처리 로직
- ### 0.0.1 다중 인터페이스 지원 드라이버: Lightware SF 시리즈 펌웨어 프로토콜 파싱
- ## 0.1 하드웨어 인터페이스 버스 설계 및 전기적 노이즈 대책
- ### 0.0.1 I2C 버스 락업(Lock-up) 현상 원인 및 하드웨어 풀업(Pull-up) 저항 용량 최적화 계산
- ### 0.0.1 고속 UART 통신 시 DMA(Direct Memory Access) 활용을 통한 CPU 점유율 최적화
- ### 0.0.1 DroneCAN(UAVCAN) 프로토콜을 이용한 장거리/노이즈 강건성 노드(Node) 설계
- ## 0.1 uORB 메시지 구조 분석 및 데이터 퍼블리싱 매커니즘
- 14.2.4.1
distance_sensor.msg 구조체 필드 심층 분석 (current_distance, variance, signal_quality)
- 14.2.4.2
type 필드를 통한 레이저/초음파/레이더 분류 및 센서 ID(device_id) 할당 규칙
- ## 0.1 초음파(Sonar) 센서 어쿠스틱 모델링 및 연동
- 14.3.1 초음파 전달 방정식 및 환경 오차 보정 알고리즘
- 14.3.1.1 매질(공기) 온도에 따른 음속 변화 방정식(v = 331.4 + 0.6T)과 실시간 온도 센서 보정 로직
- 14.3.1.2 방사각(Beam Angle) 역학 및 다중 경로 간섭(Multipath Interference), 에코(Echo) 소실 분석
- 14.3.2 PX4 초음파 센서 드라이버 소스 코드 분석
- 14.3.2.1 MaxBotix I2C/Analog 시리즈(
mb12xx.cpp) 드라이버의 폴링(Polling) 타이머 설계
- 14.3.2.2 아날로그 핀을 통한 ADC(Analog-to-Digital Converter) 샘플링 및 해상도 최적화
- 14.3.3 하드웨어 마운팅 및 신호 처리(Signal Processing) 기술
- 14.3.3.1 모터/프로펠러 진동에 의한 고주파 어쿠스틱 노이즈(Acoustic Noise) 대역폭 분석
- 14.3.3.2 물리적 방진 댐퍼 설계 및 아날로그 전원부 RC 로우패스 필터(Low-pass Filter) 회로도 설계
- 14.3.4 소프트웨어 필터링 및 오프셋 보정
- 14.3.4.1 링 버퍼(Ring Buffer) 기반 메디안 필터(Median Filter) 구현을 통한 스파이크 노이즈 제거
- ## 0.1 레이더(Radar) 센서 신호 처리 및 장애물 회피 연동
- 14.4.1 mmWave FMCW(Frequency Modulated Continuous Wave) 레이더 원리
- 14.4.1.1 처프(Chirp) 신호 설계 및 거리-속도(Range-Doppler) 맵핑 수학 모델
- 14.4.1.2 기상 악화(우천, 안개, 분진) 환경에서 레이더 투과성(Penetration)에 대한 물리적 특성
- 14.4.2 PX4 레이더 고도계 및 회피 센서 통합
- 14.4.2.1 CAN 버스 기반 상용 레이더(Nanoradar 등)의 데이터 프레임 디코딩 로직
- 14.4.2.2
obstacle_distance.msg uORB 토픽 구조체 분석 및 섹터별 거리 데이터(Array) 맵핑
- 14.4.3 ROS2 경로 계획(Path Planning) 모듈과의 시스템 통합
- 14.4.3.1 MAVLink
OBSTACLE_DISTANCE (Message ID: 330) 직렬화 구조 및 전송 주기 최적화
- 14.4.3.2 uXRCE-DDS를 통한 ROS2 PointCloud2 메시지 변환 및 OctoMap 3D 공간 맵핑 연계
- ## 0.1 옵티컬 플로우(Optical Flow) 비전 프로세싱 및 하드웨어 연동
- 14.5.1 광학 흐름 기반 평면 속도 추정 알고리즘 수학 모델
- 14.5.1.1 영상 픽셀 변화량(Pixel Shift)을 물리적 각속도(Rad/s) 및 선속도(m/s)로 변환하는 야코비안(Jacobian) 행렬
- 14.5.1.2 조도(Illumination) 변화와 지면 텍스처(Texture) 주파수에 따른 추정 오차(Covariance) 증가 모델
- 14.5.2 하드웨어 아키텍처 및 센서 드라이버 소스 코드 분석
- 14.5.2.1 PMW3901/PAW3902 (
pmw3901.cpp) SPI 통신 프로토콜: 레지스터 초기화 시퀀스 및 모션 버스트(Motion Burst) 읽기
- 14.5.2.2 PX4Flow 스마트 카메라: 내부 STM32 마이크로컨트롤러의 영상 캡처 타이밍 및 I2C 데이터 전송 병목 현상 분석
- 14.5.3 카메라 광학계(Optics) 캘리브레이션 및 하드웨어 튜닝
- 14.5.3.1 렌즈 초점거리(Focal Length) 및 화각(FOV)에 따른
SENS_FLOW_ROT 스케일링 계수 계산
- 14.5.3.2 저조도 환경(실내 창고 등) 극복을 위한 적외선(IR) LED 동기화 펄스 제어 회로 설계
- 14.5.4 자이로스코프(Gyroscope) 데이터와의 정밀 시간 동기화(Time Synchronization)
- 14.5.4.1 이동 지연(Transport Delay) 문제: 카메라 셔터 시간과 IMU 샘플링 타임스탬프(Timestamp) 매칭 알고리즘
- 14.5.4.2
sensor_optical_flow.msg의 pixel_flow_x_integral 및 gyro_x_rate_integral 상관관계 분석
- ## 0.1 ECL/EKF2 (Estimator) 내 거리 및 플로우 센서 융합(Fusion) C++ 소스 코드 분석
- 14.6.1 EKF2 아키텍처 내 고도 추정(Height Estimation) 파이프라인 (
src/modules/ekf2)
- 14.6.1.1
control_range_finder.cpp: 기압계(Baro) 고도에서 거리 센서(Range) 고도로의 상태 천이(State Transition) 로직
- 14.6.1.2
EKF2_HGT_MODE 파라미터에 따른 관측 행렬(Observation Matrix, H) 동적 재구성 매커니즘
- 14.6.1.3 고도 튐(Glitch) 현상 방지를 위한 거리 센서 이노베이션(Innovation) 게이팅(Gating) 수학 모델
- 14.6.2 EKF2 옵티컬 플로우 속도 추정(Velocity Estimation) 파이프라인
- 14.6.2.1
control_opt_flow.cpp: 플로우 각속도 관측값(Measurement)을 시스템 상태 벡터(State Vector)에 결합하는 칼만 업데이트(Kalman Update) 방정식
- 14.6.2.2 플로우 속도 계산 시 거리 센서 데이터 의존성(Scaling)에 따른 다단계 에러 전파(Error Propagation) 분석
- 14.6.2.3 칼만 필터 노이즈 공분산 튜닝의 수학적 의미:
EKF2_OF_N_STAR, EKF2_OF_N_RAD, EKF2_OF_QMIN 파라미터 민감도 분석
- 14.6.3 GPS 거부 환경(GPS-Denied Environment) 상태 머신(State Machine) 분석
- 14.6.3.1 EKF2 내부 플래그(
filter_status.flags.opt_flow) 활성화 조건 및 Position 제어 모드 진입 허가 로직 분석
- 14.6.3.2 비행 중 플로우 텍스처 상실 시 추측 항법(Dead Reckoning) 유지 시간 및 Failsafe 전환 임계값 계산
- ## 0.1 정밀 캘리브레이션 및 GCS(QGroundControl) 기반 파라미터 최적화 실무
- 14.7.1 거리 측정 센서 비선형성(Non-linearity) 보정 실무
- 14.7.1.1 실측 거리와 센서 데이터 간의 다항식 회귀(Polynomial Regression) 곡선 적합을 통한 스케일 팩터(Scale Factor) 보정
- 14.7.1.2 IMU 자세(Roll/Pitch) 데이터 기반의 코사인 보상(Cosine Compensation): 수학적 증명 및 파라미터(
SENS_CM8JL65_R_0 등) 적용
- 14.7.2 옵티컬 플로우 고급 캘리브레이션 절차
- 14.7.2.1 실내 테스트 벤치 구축: 텍스처 패턴 매트(Pattern Mat) 생성 및 렌즈 무한대(Infinity) 초점 정밀 조절 기법
- 14.7.2.2 자이로 보상(Gyro Compensation) 위상 매칭: 롤/피치 축 스윙(Swing) 테스트를 통한
EKF2_OF_DELAY 밀리초(ms) 단위 튜닝
- 14.7.3 QGroundControl MAVLink Inspector를 활용한 실시간 데이터 품질 평가
- 14.7.3.1
DISTANCE_SENSOR 및 OPTICAL_FLOW_RAD MAVLink 메시지 주파수 검증 및 Jitter 분석
- ## 0.1 비행 데이터 시각화(ULog) 기반 장애 조치(Troubleshooting) 분석 기법
- 14.8.1 하드웨어 버스 및 전원 무결성(Integrity) 진단
- 14.8.1.1 ULog 시스템 메시지를 통한 I2C 통신 누락(Dropped Packets) 및 버스 리셋(Bus Reset) 이벤트 추적
- 14.8.1.2 전류 소모 피크 시 전압 강하(Voltage Sag)에 의한 센서 브라운아웃(Brownout) 현상 로그 패턴 분석
- 14.8.2 환경적 교란 요인에 의한 센서 발산(Divergence) 데이터 분석
- 14.8.2.1 수면 위 비행(Water Surface) 및 균일한 패턴(잔디밭) 상공에서 플로우 센서 품질(
quality 필드) 저하에 따른 EKF2 거부(Rejection) 사례 분석
- 14.8.2.2 유리 창문 및 직사광선 유입으로 인한 적외선 LiDAR 비행 고도 스파이크 오류(Spike Error) 플롯(Plot) 분석
- 14.8.3 PlotJuggler / Flight Review를 이용한 EKF2 센서 융합 심층 디버깅
- 14.8.3.1
estimator_status.msg 내 이노베이션 테스트 비(Test Ratio) 플로팅을 통한 센서 상태 모니터링
- 14.8.3.2
vehicle_local_position.msg 속도/위치 추정값과 로우(Raw) 센서 데이터(sensor_optical_flow, distance_sensor) 간의 잔차(Residual) 분석
- 14.8.3.3 고도/위치 제어 발산 시 원인 규명: 제어기(PID) 튜닝 실패 vs 센서 데이터 오염 판별 트리(Decision Tree) 작성법