13.6. 고급 디버깅, ULog 비행 데이터 프로파일링 및 트러블슈팅

13.6. 고급 디버깅, ULog 비행 데이터 프로파일링 및 트러블슈팅

무인항공기(UAV) 개발 및 운용에 있어 가장 혹독한 시련은 하늘 위에서 뜻대로 움직이지 않는 기체를 멍하니 바라봐야만 할 때 찾아온다. “왜 드론이 갑자기 고도를 잃었는가?”, “왜 RTK GPS는 가장 중요한 임무 순간에 Float 상태로 떨어졌는가?”, “바람 때문인가, 아니면 EKF2(칼만 필터)의 진동 발산 때문인가?” 이 모든 질문에 대한 해답은 오직 기체가 자신의 내부 메모리에 절실하게 기록해 둔 ’데이터’에 있다.

본 장에서는 PX4-Autopilot 환경에서 발생할 수 있는 치명적인 오류와 알 수 없는 비행 이상 동작을 과학적이고 체계적으로 추적하는 고급 디버깅(Advanced Debugging) 및 트러블슈팅(Troubleshooting) 기법을 다룬다.

1. 보이지 않는 데이터를 읽어내는 두 가지 시선

PX4 시스템의 디버깅 생태계는 크게 두 가지 시간 공간(Time Space)으로 나뉜다.

1.1 실시간(Real-time) 진단: CLI 및 MAVLink Console

비행 전(Pre-flight) 점검 단계나, 기체를 테스트 벤치에 묶어놓고 센서 캘리브레이션 무결성을 확인할 때 진가를 발휘한다.
지상 관제소(QGroundControl)의 화려한 GUI 인터페이스 이면에는 비행 제어기(FC) 운영체제인 NuttX RTOS의 투박하지만 강력한 터미널인 **NSH(NuttShell)**가 자리 잡고 있다. 개발자는 QGC MAVLink Console을 통해 NSH 셸에 직접 명령(listener, gps status, top 등)을 내림으로써, 현재 uORB 버스 위를 흘러 다니는 메시징 구조체의 날 것 제원(Raw Field)들을 마이크로초 단위 비동기 실시간으로 감시할 수 있다.

1.2 사후(Post-flight) 프로파일링: ULog 파일 분석

비행 중(In-flight) 발생한 충돌(Crash), 떨림(Oscillation), 혹은 나침반 미터 이탈(Compass Toilet-bowling) 현상은 실시간 텔레메트리 대역폭으로는 도저히 파악할 수 없다.
이를 위해 PX4는 비행 중에 발생하는 수백 개의 시스템 상태 변수, 센서 입력, EKF2 이노베이션(Innovation) 상태, 그리고 모터 제어 출력값을 50Hz ~ 200Hz 이상의 고해상도로 무자비하게 압축하여 SD 카드에 밀어 넣는 ULog 데이터 로깅 시스템을 가동한다. 사고 후 확보한 이 .ulg 파일은 마치 항공기 블랙박스처럼 그 순간의 모든 물리적, 소프트웨어적 맥락을 재구성하는 유일무이한 마스터키(Master Key) 역할을 한다.

2. 블랙박스 해독의 무기: 해석 도구 체인 체계

방대한 바이트 배열인 ULog를 인간의 직관으로 끌어내기 위해 우리는 강력한 분석 도구(Toolchain)를 활용해야 한다.

  1. Flight Review (웹 기반 플랫폼)
    PX4 개발 스택 커뮤니티가 제공하는 공식 툴(logs.px4.io)로, 초보자부터 전문가까지 가장 쉽게 로그를 시각화할 수 있는 강력한 무기이다. 드론의 PID 자세 제어 추종성(Tracking), 모터 클리핑(Clipping), 자기장 이격(Mag Interference), GPS 신호 저하 등의 치명적 에러를 직관적인 선형 그래픽과 3D 궤적으로 자동 변환해 준다.
  2. PlotJuggler (데스크톱 로그 프로파일러)
    C++ Qt로 작성된 극도로 가볍고 빠른 로컬 프로파일링 툴이다. Flight Review가 보여주지 않는 미세한 uORB 토픽(예: estimator_status_s 의 특정 비트 마스킹 결과)을 사용자 지정 수식 연산을 통해 분해할 수 있어, 제어 알고리즘이나 EKF2 필터를 새로 포팅(Porting)하는 딥-레벨(Deep-level) 임베디드 코어 개발자들에게 필수적인 타임라인 시각화 기능을 제공한다.
  3. pyulog 파이썬 스크립팅 분석
    머신러닝(ML)이나 배차 관제 수준의 드론 플릿(Fleet)에서 수백 개의 비행 로그를 배치 트랙 단위로 일괄 분해하거나, 데이터 클러스터링(Clustering)을 통해 기체의 특정 모터 노화도를 진단하기 위해 .ulg 파일을 Pandas Dataframe으로 치환해 내는 고급 코드 레벨 분석 툴이다.

3. 디버깅 트리의 설계: 인과율의 추적

결론적으로 PX4의 고급 트러블슈팅은 단순한 “에러 코드(Error Code) 읽어보기“로 끝나지 않는다. “모터가 출력을 멈췄다(결과)“라는 현상 뒤에는 “EKF2가 VIO 고도 록(Lock)을 잃었다 \rightarrow 기압계 난기류 스파이크가 겹쳤다 \rightarrow Failsafe 트리거가 발동했다(원인)“라는 긴 인과율(Causality)의 사슬이 존재한다.

본 장의 세부 절들에서는 ULog의 선과 그래프, NuttShell의 문자들을 조합하여 이러한 비행 시스템의 인과 관계 트리를 셜록 홈스(Sherlock Holmes)처럼 역추적하는 실전 노하우와 C++ 소스 코드 레벨의 해석 프로토콜을 전수할 것이다.